Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 13:28

Как программно сделать иерархию групп и элементов

Автор MKozzlik, 10 окт 2011, 10:04

0 Пользователей и 1 гость просматривают эту тему.

MKozzlik

Нет, это была вторая часть кода, а вот весь. Я подсоединяюсь ко второй базе через com соединение

База = Новый COMобъект("V82.COMConnector");
   
   Попытка
      Connector = База.Connect("File=""c:\Базы_1С\КомплАвтоматизация\ArAutomation (dataNOT_ALL)"";");
      Сообщить("Получилось");
   Исключение
      Сообщить("база не открыта");
   Возврат;
КонецПопытки;

СправочникУстановка = Connector.Справочники.Номенклатура;
Если СправочникУстановка.НайтиПоНаименованию("Номенклатура") = Неопределено Тогда
   Сообщить("Возврат");
   Возврат;
КонецЕсли;
Запрос = Connector.NewObject("Запрос");
Запрос.Текст =  "ВЫБРАТЬ
                |   Номенклатура.Код,
                |   Номенклатура.Наименование,
                |   Номенклатура.Ссылка,
                |   Номенклатура.Родитель,
                |   Номенклатура.ЭтоГруппа,
                |   Номенклатура.Родитель.Ссылка КАК РодительСсылка
                |ИЗ
                |   Справочник.Номенклатура КАК Номенклатура
                |ГДЕ
                |   (НЕ Номенклатура.ПометкаУдаления)";
            
Результат = Запрос.Выполнить().Выгрузить();
Для каждого Стр Из Результат Цикл
   Если Стр.ЭтоГруппа Тогда
      НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу();
      НоваяГруппа.Код = Стр.Код;
      НоваяГруппа.Наименование = Стр.Наименование;
      НоваяГруппа.Записать();
   Иначе
      НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
      НовыйЭлемент.Код = Стр.Код;
      НовыйЭлемент.Наименование = Стр.Наименование;
      НовыйЭлемент.Записать();
   КонецЕсли;   
   
           
КонецЦикла;

Klyacksa

Ээээ... Если выбираем номенклатуру всю подряд - то на момент создания дочернего элемента, родительский может быть еще не записан. Возможно, дело в этом? И ссылка на родительский в новой базе не равна ссылке на родительский в старой...

Попробуйте получить результат запроса в виде дерева, и обрабатывать его последовательно, начиная с верхних элементов, и устанавливая родителя из новой базы.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

MKozzlik


MKozzlik

А получить результат в виде дерева это примерно так: Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)?

Klyacksa

Да, примерно так, только еще в запросе нужно делать выборку с иерархией.
И выгрузить в дерево, а не в таблицу значений.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск