Имя: Пароль:
1C
1C 7.7
v7: OLE и периодические реквизиты
,
0 Virtmon
 
04.06.12
10:45
Есть функция получения значений справочников. никак не получается побороть периодические реквизиты:

Док = БазаОЛЕ.CreateObject("Документ");
ОбщИдент = Метаданные.ОбщийРеквизитДокумента(Счетчик).Идентификатор
ЗначСправ = Док.ПолучитьАтрибут(ОбщИдент)

Для Счетчик = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл
   Если Метаданные.ОбщийРеквизитДокумента(Счетчик).Тип = "Справочник" Тогда
       ЗначСправ = Док.ПолучитьАтрибут(ОбщИдент);
       значАтр = ПолучитьЗначениеСправочника(ОбщАттр,ЗначСправ);
       Попытка
           ТекДок.УстановитьАтрибут(ОбщИдент,значАтр);
       Исключение
               Сообщить("Ошибка = "+ОписаниеОшибки());
       КонецПопытки;
   КонецЕсли;        
КонецЦикла;

Функция ПолучитьЗначениеСправочника(ОбщАттр,ЗначСправ)
   Для Счетчик2 = 1 По Метаданные.Справочник(ВидСпр).Реквизит() Цикл
       Справ = Метаданные.Справочник(ВидСпр).Реквизит(Счетчик2);
       Если Справ.Периодический = 1 Тогда
           ТекДата = ТекущаяДата();
           НачДата = "01.01.80";
           ПериодОЛЕ = БазаОЛЕ.CreateObject("Периодический");
           ПериодОЛЕ.UseObject(Справ,ЗначСправ);
           ПериодОЛЕ.ВыбратьЗначения(НачДата,ТекДата);
           Пока ПериодОЛЕ.ПолучитьЗначение()=1 Цикл
               Сообщить(Строка(ПериодОле.ДатаЗнач) + " " + Строка(ПериодОле.Значение));
           КонецЦикла;
       КонецЕсли;
   КонецЦикла;
КонецФункции
Выдает ошибку: Плохой тип переменной
1 Virtmon
 
04.06.12
10:48
Забыл сказать где тормозится: на строке ПериодОЛЕ.UseObject(Справ,ЗначСправ);
2 butterbean
 
04.06.12
10:49
дык Справ не пролазит через OLE
3 butterbean
 
04.06.12
10:50
(2)+ его надо "там" получать
4 Zmich
 
04.06.12
10:53
(0). Попробуй ПериодОЛЕ.UseObject(Справ.Идентификатор,ЗначСправ);
5 Virtmon
 
04.06.12
10:56
Я думал там просто наименование реквизита надо поставить. В любом случае: получил его там - эффект тот же
6 1Сергей
 
04.06.12
10:58
ПериодОЛЕ.UseObject(Справ.Идентификатор,ЗначСправ.ТекущийЭлемент());
7 Virtmon
 
04.06.12
10:59
Реквизит = ДолжностьРуководителя типа = Строка вида =
........ 21 Элемент периодический = 1
ЗначСправ.Наименование = ООО "ПродИнвест"
ВидСпр = СвоиЮрЛица
Справ = Руководитель
ЗначСправ = OLE
8 Virtmon
 
04.06.12
11:02
Справ нормально получает, ТекущийЭлемент() в OLE не прокатывает
9 Virtmon
 
04.06.12
11:03
Может у кого-то есть решение как получить данные по периодическому элементу из OLE?
10 Ёпрст
 
04.06.12
11:03
(8) еще как прокатывает
11 Ёпрст
 
04.06.12
11:04
(9) как в (6) чем не устраивает ?
12 Virtmon
 
04.06.12
11:08
Хм, действительно прокатило. Просто я читал статью и там было написано что не прокатывает. Извиняюсь.
13 1Сергей
 
04.06.12
11:10
(12) удали эту статью нафиг. Всегда про ОЛЕ в 77 писали, что всё что в обычном режиме работает "по-умолчанию", в ОЛЕ надо прописывать явно
14 Virtmon
 
04.06.12
11:16
Там так и было написано, но при этом было написано: "Гарантированно не будут работать методы ТекущийЭлемент() и ТекущийДокумент() (ошибки V7 не будет, но и результат работы будет нулевой)."
15 ЧеловекДуши
 
04.06.12
11:19
(14)На заборе тоже много пишут из 3-ёх букв :)

...так то 1С само пишет много, что работает совсем по другому ;)
16 ЧеловекДуши
 
04.06.12
11:21
+(14) В свое время я реализовал работу через функцию: ExecuteBatch и переменные глУсловие1..глУсловие12 (из БД ОЛЕ)
И выполнял код в базе ОЛЕ, а результат передавай через глобальные переменные.
17 Virtmon
 
08.06.12
14:08
Может кто подскажет как через эту же функцию установить реквизит справочника типа"справочник". Остальные реквизиты получаются нормально. Пытаюсь сделать так:

Справ1 = Справ;
Если Справ.Периодический = 1 Тогда
   
Иначе
   СправИдент = Справ.Идентификатор;
   ЗначАтр2 = СпрОЛЕ.ПолучитьАтрибут(СправИдент);
   ПолучЗначАтр2 = ПолучитьЗначениеАттрибута(Справ1,ЗначАтр2);
   Попытка
       ТекСправ.УстановитьАтрибут(СправИдент,ПолучЗначАтр2);
   Исключение
   КонецПопытки;
КонецЕсли;


Не получается
18 ЧеловекДуши
 
08.06.12
14:15
(17)ТекущийЭлемент()
19 Virtmon
 
08.06.12
14:32
Куда его вставить?)
20 Virtmon
 
13.06.12
08:42
Никто не подскажет?
21 Virtmon
 
13.06.12
15:55
Разобрался, всем спасибо. ТекущийЭлемент() не понадобился)