Имя: Пароль:
1C
1C 7.7
v7: OLE + метаданные.
0 ЗЫ5
 
06.06.12
19:45
Написал простую обработку по переносу групп теперь нужно добавить перенос элементов справочника контрагенты.
   Этап = "Начальная инициализация";
   АктТранз = 0;
   Ном=0;
   Этап = "Открытие ИБ";
   MyTrans = СоздатьОбъект("V77.Application");          
   ПутьКИБ = "\\тралала\";
   Сообщить("Открытие ИБ: "+"("+ПутьКИБ+")...");
   
   Ok = MyTrans.Initialize(MyTrans.RMTrade,"/D"+СокрЛП(ПутьКИБ)+" /Ntest8 /P03081980", "NO_SPLASH_SHOW");
   Сообщить(?((Ok=-1),"ИБ : открыта.","Ошибка открытия ИБ:"));
   
   ВКонтра = MyTrans.CreateObject("Справочник.Контрагенты");
   ТекРодитель = СоздатьОбъект("Справочник.Контрагенты");
   
   ТекРОД = СоздатьОбъект("Справочник.Контрагенты");
   ТекТовар = СоздатьОбъект("Справочник.Контрагенты");
   
   Ном=0;    
   АктТранз = 1;                                      
   ВКонтра.ВыбратьЭлементы();
   Пока ВКонтра.ПолучитьЭлемент()=1 Цикл
       Если (ВКонтра.ЭтоГруппа()=1) или (ВКонтра.ПометкаУдаления()=1) или (ВКонтра.Уровень()=1)  Тогда
           Продолжить;
       КонецЕсли;
       Если Найти(ВКонтра.ПолноеНаименование(),"Покупатели и комиссионеры") = 0 Тогда
           Продолжить;
       КонецЕсли;    
       
       Если ТекРодитель.НайтиПоРеквизиту("GUID",ВКонтра.Родитель.GUID,1)=1 Тогда
           Если ТекРОД.НайтиПоРеквизиту("GUID",ВКонтра.GUID,1)=0 Тогда
       
               ТекТовар.Новый();
               
               ТекТовар.Родитель = ТекРодитель.ТекущийЭлемент();
               ТекТовар.GUID = ВКонтра.GUID;
               
               ТекТовар.Наименование = ВКонтра.Наименование;
               
               
               
               ТекТовар.Записать();

           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры
1 ЗЫ5
 
06.06.12
19:46
Вопрос как прикрутить сюда кусок этого кода обход по реквизитам
кфгСпрСотр = Метаданные.Справочник("Контрагенты");
КолвоРеквизитов = кфгСпрСотр.Реквизит();
Для Ном=1 to КолвоРеквизитов Цикл
кфгРекв = кфгСпрСотр.Реквизит(Ном);
Идентификатор = кфгРекв.Идентификатор();
ПолныйИдентификатор = кфгРекв.ПолныйИдентификатор();
Синоним = кфгРекв.Синоним();
Комментарий = кфгРекв.Комментарий();
Тип = кфгРекв.Тип(); //"Строка", "Число", "Справочник"
Вид = кфгРекв.Вид(); //напр. "Сотрудники"
Длина = кфгРекв.Длина();
Точность = кфгРекв.Точность();
Периодический = кфгРекв.Периодический();

КонецЦикла;
2 ЗЫ5
 
06.06.12
19:48
Т.е вопрос как фактически прочитать метаданные реквизитов определенного элемента справочник через ОЛЕ?
3 Креатив
 
07.06.12
06:48
(2) MyTransМетаданные.Справочник("Контрагенты") не прокатывает?
А по опыту работы с ОЛЕ могу предложить другую методику.
Пишешь нормальный отчёт, который выдаёт в СЗ или ТЗ все данные, которые тебе нужны.
Открываешь его по ОЛЕ модально, передаёшь туда необходимые параметры.
Пользуешься полученными данными.
4 smaharbA
 
07.06.12
06:54
(2) так же как и не оле
5 ЧеловекДуши
 
07.06.12
07:36
(2)Только если ты будешь читать на строне ОЛЕ
Примерно так:

   ИБПр.глУсловие11 = "ПоступлениеМатериалов";
   ИБПр.ExecuteBatch("глУсловие12 = Метаданные.Документ(глУсловие11).ДлинаНомера;");
   ДлинНомПМ = Число(ИБПр.глУсловие12);
6 smaharbA
 
07.06.12
09:05
(5) это чо за фигня ?

МетаОЛЕ=БазаОле.Метаданные;
Для Сч=1 По МетаОЛЕ.Документ() Цикл
   Сообщить(МетаОЛЕ.Документ(Сч).ПолныйИдентификатор());
КонецЦикла;
Ошибка? Это не ошибка, это системная функция.