Имя: Пароль:
1C
 
Не могу получить значение поля, являющегося перечисленем
0 RomanXXX
 
07.07.04
09:18
Не могу получить значение поля, являющегося перечисленем. Например Справочник.Сотрудники.ХарактерРаботы = Перечисление.ХарактерРаботы.ТрудовойДоговор, При выгрузке справочника Сотрудники из бухгалтерии в Зарплату с помощью OLE не могу получить значение Справочник.Сотрудники.ХарактерРаботы - выгружаемый объект.
1 Gavrila
 
07.07.04
09:37
(0) Если не можешь получить в базе ОЛЕ, то вот:
БазаОЛЕ.EvalExpr("Перечисление.ПолучитьАтрибут(""" + ВидПеречисления + """)").ЗначениеПоИдентификатору(ИдентификаторПеречисления);
где ВидПеречисления - строка с названием вида перечисления, а ИдентификаторПеречисления - строка с идентификатором значения перечисления
2 RomanXXX
 
07.07.04
10:09
Спасибо за совет, сейчас попробую, но сомневаюся что это поможет, результат сообщю.
3 RomanXXX
 
07.07.04
10:18
V77M.EvalExpr("Перечисление.ПолучитьАтрибут(""" + "ХарактерРаботы" + """)").ЗначениеПоИдентификатору(V77M.Перечисление.ХарактерРаботы.ТрудовойДоговор) = OLE
Не конает, еще есть предложения
4 Gavrila
 
07.07.04
10:25
БазаОЛЕ.EvalExpr("Перечисление.ХарактерРаботы.ТрудовойДоговор"); - возвращает значение перечисления базы ОЛЕ, чтобы получить идентификатор этого перечисления
БазаОЛЕ.EvalExpr("Перечисление.ХарактерРаботы.ТрудовойДоговор.Идентификатор()");
5 Gavrila
 
07.07.04
10:29
+(4) Уточни "могу получить значение поля, являющегося перечисленем" где не можешь получить в локальной базе или в базе ОЛЕ?
6 RomanXXX
 
07.07.04
10:35
Проблема состоит в том, чтобы выяснить к какому перечислению относится сотрудник (Сотрудник.ХарактерРаботы равен ли  Перечисление.ХарактерРаботы.ТрудовыеОтношения все происходит  в ОЛЕ базе)
7 RomanXXX
 
07.07.04
10:36
8 RomanXXX
 
07.07.04
10:36
в ОЛЕ
9 Gavrila
 
07.07.04
10:48
Попробуй так
Если Сотрудник.ХарактерРаботы.Идентификатор() = БазаОЛЕ.EvalExpr("Перечисление.ХарактерРаботы.ТрудовыеОтношения.Идентификатор()") Тогда
// Принадлежит ...
КонецЕсли;
10 RomanXXX
 
07.07.04
10:53
Если Сотрудник.ХарактерРаботы.Идентификатор() = БазаОЛЕ.EvalExpr("Перечисление.ХарактерРаботы.ТрудовыеОтношения.Идентификатор()") Тогда
// Принадлежит ...
КонецЕсли;
Сотрудник.ХарактерРаботы.Идентификатор()-Объект ОЛЕ, тип переменной ХарактерРаботы является Перечисление.ХарактерРаботы.ТрудовыеОтношения
В том то и дело , что Сотрудник.ХарактерРаботы не доступен
11 Gavrila
 
07.07.04
11:08
(10)Что значит "Сотрудник.ХарактерРаботы не доступен" ? Ошибку выдает? или ничего не выдает или хрень какую-то выдает?
12 RomanXXX
 
07.07.04
11:29
Нет доступа к значению Сотрудник.ХарактерРаботы.ТрудовыеОтношения
в отладчике передается значение следующие
Сотрудник.ХарактерРаботы.ТрудовыеОтношения=ОЛЕ
13 Gavrila
 
07.07.04
12:05
(12) А что возвращает Сотрудник.ХарактерРаботы.Идентификатор() или СокрЛП(Сотрудник.ХарактерРаботы.Идентификатор())?
14 RomanXXX
 
07.07.04
12:09
СокрЛП(Сотрудник.ХарактерРаботы)="OLE"
а СокрЛП(Сотрудник.ХарактерРаботы.Идентификатор()) = Ошибка в выражении!
15 Gavrila
 
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 Цикл
       Сообщить("К:" + СокрЛП(СпрОле.Код) + ", Н:" + СокрЛП(СпрОле.Наименование) + ", Вид:" + СокрЛП(СпрОле.ВидКонтрагента.Идентификатор()));
   КонецЦикла;
   
КонецПроцедуры
16 RomanXXX
 
07.07.04
12:38
Я конечно благодарен тебе за твою помощь, спасибо, но результат остается прежний, может твой способ не работает потому что Сотрудник.ХарактерРаботы периодический?
Спр.ХарактерРаботы.Идентификатор()=неизвестный объект Идентификатор()
Спр.ХарактерРаботы = "OLE"
17 Gavrila
 
07.07.04
12:42
(16) естесственно
Попробуй так
Если Сотрудник.ХарактерРаботы.Получить(Необходимая_Дата).Идентификатор() = БазаОЛЕ.EvalExpr("Перечисление.ХарактерРаботы.ТрудовыеОтношения.Идентификатор()") Тогда
// Принадлежит ...
КонецЕсли;
18 RomanXXX
 
07.07.04
12:49
Спасибо, сработало, я пытался .Получить(РабочаяДата()), на без .Идентификатор
Спасибо огромное, выручил!!!
Обращайся если что мое мыло есть!
19 nice
 
06.01.05
07:48
Хотелось бы поднять тему, т.к. у меня не помогает метод Получить:
спрПров2.Движение.ВидСтатус.Получить(База.EvalExpr("ТекущаяДата()")).Идентификатор()= Ошибка в выражении!

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

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

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


Для Н=1 to КолвоРеквизитов Цикл
   кфгРекв            = СпрМетаданные.Реквизит(Н);
   Идентификатор    = кфгРекв.Идентификатор;
   Периодический    = кфгРекв.Периодический;
   Тип            = кфгРекв.Тип;
   Вид            = кфгРекв.Вид;
   
   ЗнРеквизит        = Спр.GetAttrib(Идентификатор);
   
   Если        Тип = "Строка"            Тогда
       СпрТек.УстановитьАтрибут(Идентификатор,Строка(Спр.ПолучитьАтрибут(Идентификатор)));
   ИначеЕсли    Тип = "Число"            Тогда
       СпрТек.УстановитьАтрибут(Идентификатор,Число(Спр.ПолучитьАтрибут(Идентификатор)));    
   ИначеЕсли    Тип = "Дата"            Тогда
       СпрТек.УстановитьАтрибут(Идентификатор,Дата(Спр.ПолучитьАтрибут(Идентификатор)));
   ИначеЕсли    Тип = "Перечисление"    Тогда
       //....  
       //Так вот для    реквизита "БазоваяЕдиницаИзмерения" Тип = "Перечисление.ЕдиницыИзмерения"
       //возвращает ЗнРеквизит=OLE,
       //Реквизит не периодический.
       //Как получить значение OLE перечисления - "ШТ.", "М.", "КГ." и т.п. ????
       
   КонецЕсли;
КонецЦикла;
22 Sh_s
 
13.01.05
18:06
Народ напряги пальцы, знаю что некоторые имеют решение для (21).
Подскажите!!!!
23 Sh_s
 
14.01.05
10:47
Да не поверю чтобы не знали !!!!
Вы профи и ли где ???
AdBlock убивает бесплатный контент. 1Сергей