Вход | Регистрация


1С:Предприятие ::

Метки:OLE и COM

Не могу получить значение поля, являющегося перечисленем

Я
   RomanXXX
07.07.04 - 09:18
Не могу получить значение поля, являющегося перечисленем. Например Справочник.Сотрудники.ХарактерРаботы = Перечисление.ХарактерРаботы.ТрудовойДоговор, При выгрузке справочника Сотрудники из бухгалтерии в Зарплату с помощью OLE не могу получить значение Справочник.Сотрудники.ХарактерРаботы - выгружаемый объект.
 
  Рекламное место пустует
   Gavrila
 
1 - 07.07.04 - 09:37
(0) Если не можешь получить в базе ОЛЕ, то вот:
БазаОЛЕ.EvalExpr("Перечисление.ПолучитьАтрибут(""" + ВидПеречисления + """)").ЗначениеПоИдентификатору(ИдентификаторПеречисления);
где ВидПеречисления - строка с названием вида перечисления, а ИдентификаторПеречисления - строка с идентификатором значения перечисления
   RomanXXX
2 - 07.07.04 - 10:09
Спасибо за совет, сейчас попробую, но сомневаюся что это поможет, результат сообщю.
   RomanXXX
3 - 07.07.04 - 10:18
V77M.EvalExpr("Перечисление.ПолучитьАтрибут(""" + "ХарактерРаботы" + """)").ЗначениеПоИдентификатору(V77M.Перечисление.ХарактерРаботы.ТрудовойДоговор) = OLE
Не конает, еще есть предложения
   Gavrila
 
4 - 07.07.04 - 10:25
БазаОЛЕ.EvalExpr("Перечисление.ХарактерРаботы.ТрудовойДоговор"); - возвращает значение перечисления базы ОЛЕ, чтобы получить идентификатор этого перечисления
БазаОЛЕ.EvalExpr("Перечисление.ХарактерРаботы.ТрудовойДоговор.Идентификатор()");
   Gavrila
 
5 - 07.07.04 - 10:29
+(4) Уточни "могу получить значение поля, являющегося перечисленем" где не можешь получить в локальной базе или в базе ОЛЕ?
   RomanXXX
6 - 07.07.04 - 10:35
Проблема состоит в том, чтобы выяснить к какому перечислению относится сотрудник (Сотрудник.ХарактерРаботы равен ли  Перечисление.ХарактерРаботы.ТрудовыеОтношения все происходит  в ОЛЕ базе)
   RomanXXX
7 - 07.07.04 - 10:36

   RomanXXX
8 - 07.07.04 - 10:36
в ОЛЕ
   Gavrila
 
9 - 07.07.04 - 10:48
Попробуй так
Если Сотрудник.ХарактерРаботы.Идентификатор() = БазаОЛЕ.EvalExpr("Перечисление.ХарактерРаботы.ТрудовыеОтношения.Идентификатор()") Тогда
// Принадлежит ...

КонецЕсли;
   RomanXXX
10 - 07.07.04 - 10:53
Если Сотрудник.ХарактерРаботы.Идентификатор() = БазаОЛЕ.EvalExpr("Перечисление.ХарактерРаботы.ТрудовыеОтношения.Идентификатор()") Тогда 
// Принадлежит ... 

КонецЕсли;
Сотрудник.ХарактерРаботы.Идентификатор()-Объект ОЛЕ, тип переменной ХарактерРаботы является Перечисление.ХарактерРаботы.ТрудовыеОтношения
В том то и дело , что Сотрудник.ХарактерРаботы не доступен
 
  Рекламное место пустует
   Gavrila
 
11 - 07.07.04 - 11:08
(10)Что значит "Сотрудник.ХарактерРаботы не доступен" ? Ошибку выдает? или ничего не выдает или хрень какую-то выдает?
   RomanXXX
12 - 07.07.04 - 11:29
Нет доступа к значению Сотрудник.ХарактерРаботы.ТрудовыеОтношения
в отладчике передается значение следующие
Сотрудник.ХарактерРаботы.ТрудовыеОтношения=ОЛЕ
   Gavrila
 
13 - 07.07.04 - 12:05
(12) А что возвращает Сотрудник.ХарактерРаботы.Идентификатор() или СокрЛП(Сотрудник.ХарактерРаботы.Идентификатор())?
   RomanXXX
14 - 07.07.04 - 12:09
СокрЛП(Сотрудник.ХарактерРаботы)="OLE"
а СокрЛП(Сотрудник.ХарактерРаботы.Идентификатор()) = Ошибка в выражении!
   Gavrila
 
15 - 07.07.04 - 12:19
(14) Вот пример для справочника "Контрагенты", где реквизит "ВидКонтрагента" - тип Перечисление.ВидыКонтрагентов. Все работает
//*******************************************
Процедура Сформировать()
   // Получаем доступ к OLE объекту V7

    БазаОле            = СоздатьОбъект("V77.Application");
    КаталогБазыОЛе    = "D:\1cv77\МояБаза\";
    ПользовательОле = "";
    ПарольОле        = "";
    
    МонопольныйРежимOLE = " /m"; 
   // для немонопольного запуска указать пустую строку!

    
    ЗапускБезЗаставки = 1; 
   // для появления заставки поставьте "0"

    
    РезультатПодключения = 
    БазаОле.Initialize(БазаОле.RMTrade , "/d" + """" + 
    Сокрлп(КаталогБазыОле) + """ /n" + 
    Сокрлп(ПользовательОле)+ " /p" + 
    Сокрлп(ПарольОле) + МонопольныйРежимOLE ,
    ?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW",""));
    
    Если РезультатПодключения = 0 Тогда 
        Предупреждение("Ошибка подключения.");
    КонецЕсли;
    
    СпрОле = БазаОле.EvalExpr("СоздатьОбъект(""Справочник.Контрагенты"")");
    СпрОле.ВыбратьЭлементы();
    Пока СпрОле.ПолучитьЭлемент() = 1 Цикл
        Сообщить("К:" + СокрЛП(СпрОле.Код) + ", Н:" + СокрЛП(СпрОле.Наименование) + ", Вид:" + СокрЛП(СпрОле.ВидКонтрагента.Идентификатор()));
    КонецЦикла;
    
КонецПроцедуры
   RomanXXX
16 - 07.07.04 - 12:38
Я конечно благодарен тебе за твою помощь, спасибо, но результат остается прежний, может твой способ не работает потому что Сотрудник.ХарактерРаботы периодический?
Спр.ХарактерРаботы.Идентификатор()=неизвестный объект Идентификатор()
Спр.ХарактерРаботы = "OLE"
   Gavrila
 
17 - 07.07.04 - 12:42
(16) естесственно
Попробуй так 
Если Сотрудник.ХарактерРаботы.Получить(Необходимая_Дата).Идентификатор() = БазаОЛЕ.EvalExpr("Перечисление.ХарактерРаботы.ТрудовыеОтношения.Идентификатор()") Тогда 
// Принадлежит ... 

КонецЕсли;
   RomanXXX
18 - 07.07.04 - 12:49
Спасибо, сработало, я пытался .Получить(РабочаяДата()), на без .Идентификатор
Спасибо огромное, выручил!!!
Обращайся если что мое мыло есть!
   nice
19 - 06.01.05 - 07:48
Хотелось бы поднять тему, т.к. у меня не помогает метод Получить:
спрПров2.Движение.ВидСтатус.Получить(База.EvalExpr("ТекущаяДата()")).Идентификатор()= Ошибка в выражении!

База.EvalExpr("ТекущаяДата()")="05.01.05"
спрПров2.Движение.ВидСтатус= ОЛЕ
Просто через идентификатор тоже не получается:
спрПров2.Движение.ВидСтатус.Идентификатор()=Ошибка в выражении

спрПров2=База.CreateObject("Справочник.ПроводкиХозОпераций");
   nice
20 - 06.01.05 - 07:51
Если посмотреть значение, то по идее
спрПров2.Движение.ВидСтатус ="Долг за товары принятые"
спрПров.Движение.ВидСтатус.Идентификатор() = "ДолгЗаТоварыПринятые"
   Sh_s
 
21 - 13.01.05 - 14:15
V7    = CreateObject("V77.Application");
//...

Спр    = V7.CreateObject("Справочник.Номенклатура");
//->Выгружаем OLE-товары в табл "Номен". 

СпрМетаданные = V7.EvalExpr("Метаданные.Справочник(""Номенклатура"")");
КолвоРеквизитов = СпрМетаданные.Реквизит(); 

Спр.НайтиПоКоду(Число(Номен.ПолучитьЗначение(Номен.ТекущаяСтрока(),1))); 


Для Н=1 to КолвоРеквизитов Цикл 
    кфгРекв            = СпрМетаданные.Реквизит(Н);
    Идентификатор     = кфгРекв.Идентификатор; 
    Периодический     = кфгРекв.Периодический;
    Тип             = кфгРекв.Тип; 
    Вид             = кфгРекв.Вид;
    
    ЗнРеквизит         = Спр.GetAttrib(Идентификатор);
    
    Если         Тип = "Строка"             Тогда 
        СпрТек.УстановитьАтрибут(Идентификатор,Строка(Спр.ПолучитьАтрибут(Идентификатор))); 
    ИначеЕсли     Тип = "Число"             Тогда 
        СпрТек.УстановитьАтрибут(Идентификатор,Число(Спр.ПолучитьАтрибут(Идентификатор)));     
    ИначеЕсли     Тип = "Дата"             Тогда 
        СпрТек.УстановитьАтрибут(Идентификатор,Дата(Спр.ПолучитьАтрибут(Идентификатор)));
    ИначеЕсли     Тип = "Перечисление"     Тогда
       //....  

       //Так вот для     реквизита "БазоваяЕдиницаИзмерения" Тип = "Перечисление.ЕдиницыИзмерения" 

       //возвращает ЗнРеквизит=OLE, 

       //Реквизит не периодический.

       //Как получить значение OLE перечисления - "ШТ.", "М.", "КГ." и т.п. ????

        
    КонецЕсли;
КонецЦикла;
   Sh_s
 
22 - 13.01.05 - 18:06
Народ напряги пальцы, знаю что некоторые имеют решение для (21).
Подскажите!!!!
   Sh_s
 
23 - 14.01.05 - 10:47
Да не поверю чтобы не знали !!!!
Вы профи и ли где ???



Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует