проблема с ОЛЕ

Новая тема
v77. ОЛЕ-перенос документов. хочу сделать универсальный перенос, стоб не обрабатывать реквизиты по именам. Но при переносе плей для субконто возникает вопрос: как определить тип реквизита? В метаданных стоит "Неопределённый".
Что бы подсказать, напишите фрагмент модуля
" ПланОЛЕ = v7.CreateObject("Документ");  

.....................................
//сам перенос
ПланОЛЕ.НайтиПоНомеру(ТЗ.НомерДок, ТЗ.ДатаДок,ТЗ.Вид);
Док = СоздатьОбъект("Документ."+ТЗ.Вид);
Если Есть = 0 Тогда
Док.Новый();
............................................
КонецЕсли;          

МетаДок = Метаданные.Документ(ТЗ.Вид);

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

//шапка документов
Для ном = 1 По МетаДок.РеквизитШапки() Цикл
МетаРекв = МетаДок.РеквизитШапки(ном);  
РеквТип = МетаРекв.Тип;
Если РеквТип = "Неопределенный" Тогда
вот здесь заморочка. в основном это - всяческие субконто к счёту. но могут быть быть поля ввода-справочники
   РеквТип = v7.ТипЗначенияСтр(ПланОЛЕ.ПолучитьАтрибут(МетаРекв.Идентификатор));
КонецЕсли;
Значение = ПолучитьРеквизит(РеквТип,ПланОЛЕ.ПолучитьАтрибут(МетаРекв.Идентификатор));
Док.УстановитьАтрибут(МетаРекв.Идентификатор, Значение);
КонецЦикла;
Док.НомерДок = ТЗ.НомерДокНов;
Док.ДатаДок  = ТЗ.ДатаДок;
Док.Записать();
"
в процедуре ПолучитьРеквизит() отрабатываются неагрегатные типы, справочник, перечисление, счёт. документы пока не трогаю, но как воздух нужно отработать субконто
Я бы, наверное, сделал через Попытка-исключение. То есть пробуем создать объект, далее ищем по коду или наименованию, если находим, то в переменную передаем тип значения...Если не находим...вот тут ступор, либо новый создавать, либо переходить к следующему виду объектов метаданных...Может что то в этом духе?
"> Я бы, наверное, сделал через Попытка-исключение. То есть пробуем создать объект, далее ищем по коду или наименованию, если находим, то в переменную передаем тип значения...Если не находим...вот тут ступор, либо новый создавать, либо переходить к следующему виду объектов метаданных...Может что то в этом духе?

КАКОЙ объект создаём? всё создано до нас! моя задача - определить тип конкретного ОЛЕ объекта, чтобы потом назначить этот тип соотв. реквизиту документа уже местной базы. Или же как-то вызвать процедуру ПриИзмененииСчета, благо она практически везде одинаково называется (хотя это неверное решение). пыталась использовать конструкцию:

Если РеквТип = "Неопределенный" Тогда
   Наим =  ПланОЛЕ.ПолучитьАтрибут(МетаРекв.Идентификатор).Наименование;
   Идент = ПланОЛЕ.ПолучитьАтрибут(МетаРекв.Идентификатор).Идентификатор();
   ВидСубк = ВидыСубконто.ЗначениеПоИдентификатору(Идент);
   РеквТип = v7.ТипЗначенияСтр(ПланОЛЕ.ПолучитьАтрибут(МетаРекв.Идентификатор));
КонецЕсли;
но Наим - Наименование конкретнго элемента конкретного справочника, Идент = """" стабильно.

ЗЫ. прошу прощения за эмоции
"
Один косяк нашла: в ОЛЕ базе все встроенные функции пишутся почему-то в англоязычном виде, т.е. надо писать не v7.ТипЗначенияСтр(), а v7.ValueTypeStr(). Сейчас проверяю эту мысль (хотя бы не ругается на отсутствие такого поля у v7)
"Вдруг кому-то пригодится...
выкрутилась так:

Если (РеквТип = "Неопределенный") и (v7.EmptyValue(ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор))=0) Тогда
Файлик = КаталогИБ()+"ExtForms\Админ\temp.txt";
v7.ValueToFile(Файлик,ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор),0);
Темп.Открыть(Файлик);
Строчка1 = Темп.ПолучитьСтроку(1);
Строчка1 = СтрЗаменить(Строчка1,"{","""");
Строчка1 = СтрЗаменить(Строчка1,"}","""");
Список = СоздатьОбъект("СписокЗначений");
Список.ИзСтрокиСРазделителями(Строчка1);
РеквТип = Список.ПолучитьЗначение(1);  
РеквВид = Список.ПолучитьЗначение(2);
Док.НазначитьТип(МетаРеквизит.Идентификатор,РеквТип+"."+РеквВид);
КонецЕсли;
Значение = ПолучитьРеквизит(РеквТип,ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор));
Док.УстановитьАтрибут(МетаРеквизит.Идентификатор, Значение);

если кто придумает красивее - напишите, буду рада
"
"Через любую глобальную переменную. Например, глРасшифровка - есть в любых типовых конфигурациях на сей день.

Если (РеквТип = "Неопределенный") и (v7.EmptyValue(ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор))=0) Тогда
  V77.глРасшифровка=ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор);
  Сообщить(V77.EvalExpr("ТипЗначенияСтр(глРасшифровка)"));
...
"
"Через любую глобальную переменную. Например, глРасшифровка - есть в любых типовых конфигурациях на сей день.

Если (РеквТип = "Неопределенный") и (v7.EmptyValue(ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор))=0) Тогда
  V77.глРасшифровка=ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор);
  Сообщить(V77.EvalExpr("ТипЗначенияСтр(глРасшифровка)"));
...
"
Читают тему
(гостей: 1)

Быстрый переход