Имя: Пароль:
1C
1С v8
Получение дерева значений через OLE
,
0 Mihailov Alexandr
 
08.10.14
08:23
Доброго всем дня!
Прошу помощи в решении такой задачи: Необходимо чтобы База1 сходила в Базу2, спросила справочник номенклатуры и показала у себя на форме в виде дерева значений. За основу взял код:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Номенклатура.Наименование,
|    Номенклатура.Код
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|
|УПОРЯДОЧИТЬ ПО
|    Номенклатура.Ссылка ИЕРАРХИЯ";


ДеревоЗначенийОбработка = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЭлементыФормы.ДеревоЗначенийОбработка.СоздатьКолонки();

Он нормально работает, я доработал его:

База = Новый COMObject("V82.Application");
Результат = База.Connect("File=D:\1C\1CBases\Trade;Usr=Администратор;");

Запрос = База.NewObject("Запрос");
Запрос.Текст =
"ВЫБРАТЬ
|    Номенклатура.Наименование,
|    Номенклатура.Код
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|
|УПОРЯДОЧИТЬ ПО
|    Номенклатура.Ссылка ИЕРАРХИЯ";


ДеревоЗначенийОбработка = Запрос.Выполнить().Выгрузить(База.ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЭлементыФормы.ДеревоЗначенийОбработка.СоздатьКолонки();

Этот уже не работает, т.к. тут ДеревоЗначенийОбработка - это уже не дерево значений, а COMОбъект. Как мне его в дерево значений преобразовать?
1 Ненавижу 1С
 
гуру
08.10.14
08:28
обойти это дерево, создав такое же у себя в процессе
2 dk
 
08.10.14
08:42
ЗначениеВСтрокуВнутр
ЗначениеИзСтрокиВнутр
3 Mihailov Alexandr
 
08.10.14
08:42
(1) а есть примеры кода?
4 Mihailov Alexandr
 
08.10.14
08:44
(2) т.е. COMОбъект поместить в ЗначениеВСтрокуВнутр, а потом у себя восстановить ЗначениеИзСтрокиВнутр? А это идея, шас попробую.
5 Banned
 
08.10.14
08:45
(4) Это плохая идея, потому что не заработает.
6 Banned
 
08.10.14
08:45
Хотя, если у тебя только наименование и код - может, и взлетит
7 dk
 
08.10.14
08:56
(0) совет: отделяй в идентификаторах переменных объекты родной базы от объектов OLE базы иначе бардак в коде
8 Mihailov Alexandr
 
08.10.14
08:57
(2) Попробовал как Вы подсказали:
ДеревоЗначенийОбработка = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Запрос.Выполнить().Выгрузить(База.ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)));
ЭлементыФормы.ДеревоЗначенийОбработка.СоздатьКолонки();

Не помогло, дерево вернулось пустое.
9 Mihailov Alexandr
 
08.10.14
08:58
(7) ОК, спасибо! С OLE впервые столкнулся.
10 dk
 
08.10.14
09:00
надо немного иначе
ДеревоЗначенийОбработка = ЗначениеИзСтрокиВнутр(База.ЗначениеВСтрокуВнутр(Запрос.Выполнить().Выгрузить(База.ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)));
11 Mihailov Alexandr
 
08.10.14
09:14
(10) Спасибо, заработало! Вот окончательная версия рабочего кода:

База = Новый COMObject("V82.Application");
Результат = База.Connect("File=D:\1C\1CBases\Тele2RarusTrade;Usr=Администратор;");

Запрос = База.NewObject("Запрос");
Запрос.Текст =
"ВЫБРАТЬ
|    Номенклатура.Наименование,
|    Номенклатура.Код
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|
|УПОРЯДОЧИТЬ ПО
|    Номенклатура.Ссылка ИЕРАРХИЯ";


ДеревоЗначенийОбработка = ЗначениеИзСтрокиВнутр(База.ЗначениеВСтрокуВнутр(Запрос.Выполнить().Выгрузить(База.ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)));
ЭлементыФормы.ДеревоЗначенийОбработка.СоздатьКолонки();