8.х Заполнение справочника номенклатуры по иерархии

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Adminspb, 6 фев 2009.

  1. TopicStarter Overlay
    Adminspb
    Offline

    Adminspb Опытный в 1С

    Регистрация:
    18 дек 2006
    Сообщения:
    116
    Симпатии:
    0
    Баллы:
    26
    Цель обработки - заполнение справочника номенклатуры по 3м уровням иерархии.
    т.е. 1,2,3 уровень иерархии - это название групп которые должны быть созданы
    в указанной группе ГруппаНоменклатуры
    1,2,3 уровеньт иерарзии - название групп
    ГруппаНоменклатуры - Это ссылка на эту группу в которой создавать иерархию.

    После создания 3 го уровня в нем должна быть создана номенклатурная позиция.

    Данные 1,2,3 уровня иерархии в цикле берутся из файла exel где в столбцах указаны их названия.
    ГруппаНоменклатуры - выбирается в форме обработки.

    Словом....Вот текс внешней обработки



    Код:
    Для й = 1 По КолСтрок Цикл 
    
    ЭлементНоменклатуры  = ЭлементНоменклатуры +1;
    
    //= Формат (Перем, "ЧГ=0")
    
    СкладЗаказ            = ТекЛист.Cells(й, Столбец +  1).Value;
    Описание              = ТекЛист.Cells(й, Столбец +  2).Value;
    Код                   = ТекЛист.Cells(й, Столбец +  3).Value;
    НовыйКод              = ТекЛист.Cells(й, Столбец +  4).Value;
    МинПоставка              = ТекЛист.Cells(й, Столбец +  5).Value;
    ЕИ                       = ТекЛист.Cells(й, Столбец +  6).Value;
    ЦенаБезНДС            = ТекЛист.Cells(й, Столбец +  7).Value;
    СтоимостьБезНДС       = ТекЛист.Cells(й, Столбец +  8).Value;
    ДатаЦены              = ТекЛист.Cells(й, Столбец +  9).Value;
    ГрЦенМатериала        = ТекЛист.Cells(й, Столбец + 10).Value;
    НоваяГрЦенМатериала   = ТекЛист.Cells(й, Столбец + 11).Value;
    ПервыйУровеньИерархии = ТекЛист.Cells(й, Столбец + 12).Value;
    ВторойУровеньИерархии = ТекЛист.Cells(й, Столбец + 13).Value;
    ТретийУровеньИерархии = ТекЛист.Cells(й, Столбец + 14).Value;
    Статус                = ТекЛист.Cells(й, Столбец + 15).Value;
    ДатаНачалаСтатуса     = ТекЛист.Cells(й, Столбец + 16).Value;
    КодЗамены             = ТекЛист.Cells(й, Столбец + 17).Value;
    НовыйКодЗамены        = ТекЛист.Cells(й, Столбец + 18).Value;
    ИзменениеСтатуса      = ТекЛист.Cells(й, Столбец + 19).Value;
    НовыйМатериал         = ТекЛист.Cells(й, Столбец + 20).Value;
    ИзменениеЦены         = ТекЛист.Cells(й, Столбец + 21).Value;
    ИзменениеИерархии     = ТекЛист.Cells(й, Столбец + 22).Value;
    
    //=====================================================================================        
    //               Проверка существования иерархии в группе родителя                   
    //=====================================================================================        
    //                             1-й уровень иерархии
    
    Запрос1 =  Новый Запрос("ВЫБРАТЬ
    |    Номенклатура.Ссылка,
    |    Номенклатура.Наименование,
    |    Номенклатура.ПометкаУдаления,
    |    Номенклатура.Родитель,
    |    Номенклатура.ЭтоГруппа,
    |    Номенклатура.Код,
    |    Номенклатура.Артикул
    |{ВЫБРАТЬ
    |    Ссылка.*,
    |    ЭтоГруппа,
    |    Наименование,
    |    Родитель.*,
    |    Код}
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.Родитель = &Родитель
    |    И Номенклатура.ЭтоГруппа = &Истина
    |    И Номенклатура.Наименование = &УровеньИерархии
    |АВТОУПОРЯДОЧИВАНИЕ"); 
    
    
    
    Запрос1.УстановитьПараметр("Истина"       , Истина );
    Запрос1.УстановитьПараметр("Родитель"     , ГруппаНоменклатуры );
    Запрос1.УстановитьПараметр("УровеньИерархии",Строка(ПервыйУровеньИерархии) );
    
    Результат1 = Запрос1.Выполнить(); 
    //        ВыборкаРезультат1 = Результат1.Выбрать();                
    ВыборкаРезультат1 = Результат1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    //        ВыборкаРезультат1 = Результат1;                
    
    Если Результат1.Пустой() = Истина Тогда
    //    Создаем группу с наименованием 1й уровень иерархии
    
    Группа1 = Справочники.Номенклатура.СоздатьГруппу();
    Группа1.Родитель = ГруппаНоменклатуры; //Справочники.Номенклатура.НайтиПоНаименованию(РодительВ);
    Группа1.Наименование = ПервыйУровеньИерархии;
    
    Группа1.Записать();
    
    Родитель1 = Группа1.Ссылка;    
    иначе
    
    // Проблема тут - никак не могу получит ссылку на найденную группу - возникает 
    сообщение    об ошибке.. именно поэтому не работает код. Может...ошибка в запросе:?:::
    
    Родитель1 = ВыборкаРезультат1.Получить(); 
    
    КонецЕсли;    
    //=====================================================================================        
    //               Проверка существования иерархии в группе родителя                   
    //=====================================================================================        
    //                             2-й уровень иерархии
    
    Запрос2 = Новый Запрос; 
    Запрос2.Текст = "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Ссылка,
    |    Номенклатура.ПометкаУдаления,
    |    Номенклатура.Родитель КАК Родитель,
    |    Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |    Номенклатура.Код КАК Код,
    |    Номенклатура.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.ЭтоГруппа = &Истина
    |    И Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)
    |    И Номенклатура.Наименование = &УровеньИерархии
    |ИТОГИ ПО
    |    Ссылка ИЕРАРХИЯ,
    |    ЭтоГруппа,
    |    Код,
    |    Родитель ИЕРАРХИЯ,
    |    Наименование";
    
    
    Запрос2.УстановитьПараметр("Истина"       , Истина );
    Запрос2.УстановитьПараметр("Родитель"     , Родитель1 );
    Запрос2.УстановитьПараметр("УровеньИерархии", ВторойУровеньИерархии );
    
    Результат2 = Запрос2.Выполнить(); 
    
    ВыборкаРезультат2 = Результат2.Выбрать();                
    //        ВыборкаРезультат2 = Результат2;                
    
    
    Если Результат2.Пустой() = Истина Тогда
    //    Создаем группу с наименованием 2й уровень иерархии
    
    Группа2 = Справочники.Номенклатура.СоздатьГруппу();
    Группа2.Родитель =  Родитель1; 
    Группа2.Наименование = ВторойУровеньИерархии;
    
    Группа2.Записать();
    
    Родитель2= Группа2.Ссылка;                                
    иначе
    // Проблема тут - никак не могу получит ссылку на найденную группу - возникает 
    сообщение    об ошибке.. именно поэтому не работает код. Может...ошибка в запросе:?:::
    
    //            Сообщить ("Уровень 2 существвет",СтатусСообщения.БезСтатуса);
    //Родитель2 = Справочники.Номенклатура.НайтиПоКоду(ВыборкаРезультат2.Код);
    Родитель2 = Справочники.Номенклатура.НайтиПоКоду(Строка(ВыборкаРезультат2.Код));
    ///            Родитель2 =  Результат2.Колонки.Получить("Ссылка");;
    
    КонецЕсли;    
    //=====================================================================================        
    //               Проверка существования иерархии в группе родителя                   
    //=====================================================================================        
    //                             3-й уровень иерархии
    
    Запрос3 = Новый Запрос; 
    Запрос3.Текст = "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Ссылка,
    |    Номенклатура.ПометкаУдаления,            
    |    Номенклатура.Родитель КАК Родитель,
    |    Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |    Номенклатура.Код КАК Код,
    |    Номенклатура.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.ЭтоГруппа = &Истина
    |    И Номенклатура.Родитель = &Родитель
    |    И Номенклатура.Наименование = &УровеньИерархии
    |ИТОГИ ПО
    |    Ссылка ИЕРАРХИЯ,
    |    ЭтоГруппа,
    |    Код,
    |    Родитель ИЕРАРХИЯ,
    |    Наименование";
    
    Запрос3.УстановитьПараметр("Истина"       , Истина );
    Запрос3.УстановитьПараметр("Родитель"     , Родитель2 );
    Запрос3.УстановитьПараметр("УровеньИерархии", ТретийУровеньИерархии );
    
    Результат3 = Запрос3.Выполнить(); 
    ВыборкаРезультат3 = Результат3.Выбрать();                
    //        ВыборкаРезультат3 = Результат3;                
    
    
    Если Результат3.Пустой() = Истина Тогда
    //    Создаем группу с наименованием 3й уровень иерархии
    
    Группа3 = Справочники.Номенклатура.СоздатьГруппу();
    Группа3.Родитель =  Родитель2; 
    Группа3.Наименование = ТретийУровеньИерархии;
    
    Группа3.Записать();                              
    
    Родитель3 = Группа3.Ссылка;            
    иначе
    // Проблема тут - никак не могу получит ссылку на найденную группу - возникает 
    сообщение    об ошибке.. именно поэтому не работает код. Может...ошибка в запросе:?:::
    
    //            Сообщить ("Уровень 3 существвет",СтатусСообщения.БезСтатуса);
    //            Родитель3 = Справочники.Номенклатура.НайтиПоКоду(ВыборкаРезультат3.Код);
    Родитель3 = Справочники.Номенклатура.НайтиПоКоду(Строка(ВыборкаРезультат3.Код));
    
    //            Родитель3 =  ВыборкаРезультат3;
    
    КонецЕсли;    
    
    
    
    //=====================================================================================        
    //               Проверка существования элемента номенклатуры
    //=====================================================================================        
    
    ЗапросН = Новый Запрос; 
    ЗапросН.Текст = "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Ссылка,
    |    Номенклатура.ПометкаУдаления,
    |    Номенклатура.Родитель КАК Родитель,
    |    Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |    Номенклатура.Код КАК Код,
    |    Номенклатура.Наименование КАК Наименование,
    |    Номенклатура.Артикул
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.ЭтоГруппа = &Истина
    |    И Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)
    |    И Номенклатура.Артикул = &Артикул
    |ИТОГИ ПО
    |    Ссылка,
    |    ЭтоГруппа,
    |    Код,
    |    Родитель,
    |    Наименование";
    
    ЗапросН.УстановитьПараметр("Истина"         , Ложь );
    ЗапросН.УстановитьПараметр("Родитель"       , Родитель3 );
    //        ЗапросН.УстановитьПараметр("УровеньИерархии", ТретийУровеньИерархии );
    ЗапросН.УстановитьПараметр("Артикул"        , НовыйКод );
    
    РезультатН = ЗапросН.Выполнить(); 
    ВыборкаРезультатН = РезультатН.Выбрать();                
    //        ВыборкаРезультатН = РезультатН;                
    
    Если РезультатН.Пустой() = Истина Тогда
    // Проблема тут - никак не могу получит ссылку на найденную группу - возникает 
    //  сообщение    об ошибке.. именно поэтому не работает код. Может...ошибка в       
    // запросе:?::: 
    
    
    ЭлементН = Справочники.Номенклатура.СоздатьЭлемент();
    ЭлементН.Родитель =  Родитель3; 
    
    ///  и т.д.....
    КонецЕсли;    
    
    
    КонецЦикла; 
    xl.Application.Quit(); 
    xl = 0;  
    Предупреждение("Импорт завершен!");    
    
    
    =====================================================
    Подскажите пожалуйста - ггде я допускаю ошибку и как ее исправить?
    Почему вместо данных и ссылки я получаю.....ошибку чтения значения?
    ...если группа родитель создана и записана?
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    А прочитать справку?

  3. TopicStarter Overlay
    Adminspb
    Offline

    Adminspb Опытный в 1С

    Регистрация:
    18 дек 2006
    Сообщения:
    116
    Симпатии:
    0
    Баллы:
    26

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

    Проблема не решается
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
  5. TopicStarter Overlay
    Adminspb
    Offline

    Adminspb Опытный в 1С

    Регистрация:
    18 дек 2006
    Сообщения:
    116
    Симпатии:
    0
    Баллы:
    26
    ПОсле замены на рекомендуемое

    Код:
    Для й = 1 По КолСтрок Цикл 
    
    ЭлементНоменклатуры  = ЭлементНоменклатуры +1;
    
    //= Формат (Перем, "ЧГ=0")
    
    СкладЗаказ            = ТекЛист.Cells(й, Столбец +  1).Value;
    Описание              = ТекЛист.Cells(й, Столбец +  2).Value;
    Код                   = ТекЛист.Cells(й, Столбец +  3).Value;
    НовыйКод              = ТекЛист.Cells(й, Столбец +  4).Value;
    МинПоставка	          = ТекЛист.Cells(й, Столбец +  5).Value;
    ЕИ 			          = ТекЛист.Cells(й, Столбец +  6).Value;
    ЦенаБезНДС            = ТекЛист.Cells(й, Столбец +  7).Value;
    СтоимостьБезНДС       = ТекЛист.Cells(й, Столбец +  8).Value;
    ДатаЦены              = ТекЛист.Cells(й, Столбец +  9).Value;
    ГрЦенМатериала        = ТекЛист.Cells(й, Столбец + 10).Value;
    НоваяГрЦенМатериала   = ТекЛист.Cells(й, Столбец + 11).Value;
    ПервыйУровеньИерархии = ТекЛист.Cells(й, Столбец + 12).Value;
    ВторойУровеньИерархии = ТекЛист.Cells(й, Столбец + 13).Value;
    ТретийУровеньИерархии = ТекЛист.Cells(й, Столбец + 14).Value;
    Статус                = ТекЛист.Cells(й, Столбец + 15).Value;
    ДатаНачалаСтатуса     = ТекЛист.Cells(й, Столбец + 16).Value;
    КодЗамены             = ТекЛист.Cells(й, Столбец + 17).Value;
    НовыйКодЗамены        = ТекЛист.Cells(й, Столбец + 18).Value;
    ИзменениеСтатуса      = ТекЛист.Cells(й, Столбец + 19).Value;
    НовыйМатериал         = ТекЛист.Cells(й, Столбец + 20).Value;
    ИзменениеЦены         = ТекЛист.Cells(й, Столбец + 21).Value;
    ИзменениеИерархии     = ТекЛист.Cells(й, Столбец + 22).Value;
    
    //=====================================================================================		
    //               Проверка существования иерархии в группе родителя				   
    //=====================================================================================		
    //                             1-й уровень иерархии
    
    Запрос1 =  Новый Запрос("ВЫБРАТЬ
    |	Номенклатура.Ссылка,
    |	Номенклатура.Наименование,
    |	Номенклатура.ПометкаУдаления,
    |	Номенклатура.Родитель,
    |	Номенклатура.ЭтоГруппа,
    |	Номенклатура.Код,
    |	Номенклатура.Артикул
    |{ВЫБРАТЬ
    |	Ссылка.*,
    |	ЭтоГруппа,
    |	Наименование,
    |	Родитель.*,
    |	Код}
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.Родитель = &Родитель
    |	И Номенклатура.ЭтоГруппа = &Истина
    |	И Номенклатура.Наименование = &УровеньИерархии
    |АВТОУПОРЯДОЧИВАНИЕ"); 
    
    
    
    Запрос1.УстановитьПараметр("Истина"       , Истина );
    Запрос1.УстановитьПараметр("Родитель"     , ГруппаНоменклатуры );
    Запрос1.УстановитьПараметр("УровеньИерархии",Строка(ПервыйУровеньИерархии) );
    
    Результат1 = Запрос1.Выполнить(); 
    ВыборкаРезультат1 = Результат1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    
    Если Результат1.Пустой() = Истина Тогда
    //	Создаем группу с наименованием 1й уровень иерархии
    
    Группа1 = Справочники.Номенклатура.СоздатьГруппу();
    Группа1.Родитель = ГруппаНоменклатуры; //Справочники.Номенклатура.НайтиПоНаименованию(РодительВ);
    Группа1.Наименование = ПервыйУровеньИерархии;
    
    Группа1.Записать();
    
    Родитель1 = Группа1.Ссылка;	
    иначе
    
    Родитель1 = ВыборкаРезультат1.Получить(); 
    
    КонецЕсли;	
    //=====================================================================================		
    //               Проверка существования иерархии в группе родителя				   
    //=====================================================================================		
    //                             2-й уровень иерархии
    
    Запрос2 = Новый Запрос; 
    Запрос2.Текст = "ВЫБРАТЬ
    |	Номенклатура.Ссылка КАК Ссылка,
    |	Номенклатура.ПометкаУдаления,
    |	Номенклатура.Родитель КАК Родитель,
    |	Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |	Номенклатура.Код КАК Код,
    |	Номенклатура.Наименование КАК Наименование
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.ЭтоГруппа = &Истина
    |	И Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)
    |	И Номенклатура.Наименование = &УровеньИерархии
    |ИТОГИ ПО
    |	Ссылка ИЕРАРХИЯ,
    |	ЭтоГруппа,
    |	Код,
    |	Родитель ИЕРАРХИЯ,
    |	Наименование";
    
    
    Запрос2.УстановитьПараметр("Истина"       , Истина );
    Запрос2.УстановитьПараметр("Родитель"     , Родитель1 );
    Запрос2.УстановитьПараметр("УровеньИерархии", ВторойУровеньИерархии );
    
    Результат2 = Запрос2.Выполнить(); 
    
    ВыборкаРезультат2 = Результат2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    
    
    Если Результат2.Пустой() = Истина Тогда
    //	Создаем группу с наименованием 2й уровень иерархии
    
    Группа2 = Справочники.Номенклатура.СоздатьГруппу();
    Группа2.Родитель =  Родитель1; 
    Группа2.Наименование = ВторойУровеньИерархии;
    
    Группа2.Записать();
    
    Родитель2= Группа2.Ссылка;								
    иначе
    
    Родитель2 = ВыборкаРезультат2.Получить(); 
    
    КонецЕсли;	
    //=====================================================================================		
    //               Проверка существования иерархии в группе родителя				   
    //=====================================================================================		
    //                             3-й уровень иерархии
    
    Запрос3 = Новый Запрос; 
    Запрос3.Текст = "ВЫБРАТЬ
    |	Номенклатура.Ссылка КАК Ссылка,
    |	Номенклатура.ПометкаУдаления,            
    |	Номенклатура.Родитель КАК Родитель,
    |	Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |	Номенклатура.Код КАК Код,
    |	Номенклатура.Наименование КАК Наименование
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.ЭтоГруппа = &Истина
    |	И Номенклатура.Родитель = &Родитель
    |	И Номенклатура.Наименование = &УровеньИерархии
    |ИТОГИ ПО
    |	Ссылка ИЕРАРХИЯ,
    |	ЭтоГруппа,
    |	Код,
    |	Родитель ИЕРАРХИЯ,
    |	Наименование";
    
    Запрос3.УстановитьПараметр("Истина"       , Истина );
    Запрос3.УстановитьПараметр("Родитель"     , Родитель2 );
    Запрос3.УстановитьПараметр("УровеньИерархии", ТретийУровеньИерархии );
    
    Результат3 = Запрос3.Выполнить(); 
    ВыборкаРезультат3 = Результат3.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);		   
    
    
    
    Если Результат3.Пустой() = Истина Тогда
    //	Создаем группу с наименованием 3й уровень иерархии
    
    Группа3 = Справочники.Номенклатура.СоздатьГруппу();
    Группа3.Родитель =  Родитель2; 
    Группа3.Наименование = ТретийУровеньИерархии;
    
    Группа3.Записать();          					
    
    Родитель3 = Группа3.Ссылка;			
    иначе
    
    Родитель3 = ВыборкаРезультат3.Получить(); 
    
    КонецЕсли;	
    
    
    
    //=====================================================================================		
    //               Проверка существования элемента номенклатуры
    //=====================================================================================		
    
    ЗапросН = Новый Запрос; 
    ЗапросН.Текст = "ВЫБРАТЬ
    |	Номенклатура.Ссылка КАК Ссылка,
    |	Номенклатура.ПометкаУдаления,
    |	Номенклатура.Родитель КАК Родитель,
    |	Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |	Номенклатура.Код КАК Код,
    |	Номенклатура.Наименование КАК Наименование,
    |	Номенклатура.Артикул
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.ЭтоГруппа = &Истина
    |	И Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)
    |	И Номенклатура.Артикул = &Артикул
    |ИТОГИ ПО
    |	Ссылка,
    |	ЭтоГруппа,
    |	Код,
    |	Родитель,
    |	Наименование";
    
    ЗапросН.УстановитьПараметр("Истина"         , Ложь );
    ЗапросН.УстановитьПараметр("Родитель"       , Родитель3 );
    ЗапросН.УстановитьПараметр("Артикул"        , НовыйКод );
    
    РезультатН = ЗапросН.Выполнить(); 
    ВыборкаРезультатН = РезультатН.Выбрать(); 			   
    
    Если РезультатН.Пустой() = Истина Тогда
    
    ЭлементН = Справочники.Номенклатура.СоздатьЭлемент();
    ЭлементН.Родитель =  Родитель3; 
    
    
    

    Возникает ошибка

    Недостаточно фактических параметров
    Родитель1 = ВыборкаРезультат1.Получить();
  6. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Еще раз читает это сообщение и думаем.
  7. TopicStarter Overlay
    Adminspb
    Offline

    Adminspb Опытный в 1С

    Регистрация:
    18 дек 2006
    Сообщения:
    116
    Симпатии:
    0
    Баллы:
    26
    А можно поподробнее и с примером?

    Написал Вот так:

    Код:
    //=====================================================================================		
    //               Проверка существования иерархии в группе родителя				   
    //=====================================================================================		
    //                             1-й уровень иерархии
    
    Запрос1 =  Новый Запрос("ВЫБРАТЬ
    |	Номенклатура.Ссылка,
    |	Номенклатура.Наименование,
    |	Номенклатура.ПометкаУдаления,
    |	Номенклатура.Родитель,
    |	Номенклатура.ЭтоГруппа,
    |	Номенклатура.Код,
    |	Номенклатура.Артикул
    |{ВЫБРАТЬ
    |	Ссылка.*,
    |	ЭтоГруппа,
    |	Наименование,
    |	Родитель.*,
    |	Код}
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.Родитель = &Родитель
    |	И Номенклатура.ЭтоГруппа = &Истина
    |	И Номенклатура.Наименование = &УровеньИерархии
    |АВТОУПОРЯДОЧИВАНИЕ"); 
    
    
    
    Запрос1.УстановитьПараметр("Истина"       , Истина );
    Запрос1.УстановитьПараметр("Родитель"     , ГруппаНоменклатуры );
    Запрос1.УстановитьПараметр("УровеньИерархии",Строка(ПервыйУровеньИерархии) );
    
    Результат1 = Запрос1.Выполнить(); 
    ВыборкаРезультат1 = Результат1.Выбрать();
    
    Если Результат1.Пустой() = Истина Тогда
    //	Создаем группу с наименованием 1й уровень иерархии
    
    Группа1 = Справочники.Номенклатура.СоздатьГруппу();
    Группа1.Родитель = ГруппаНоменклатуры; //Справочники.Номенклатура.НайтиПоНаименованию(РодительВ);
    Группа1.Наименование = ПервыйУровеньИерархии;
    
    Группа1.Записать();
    
    Родитель1 = Группа1.Ссылка;	
    иначе
    
    Родитель1 = ВыборкаРезультат1;
    
    КонецЕсли;	
    //=====================================================================================		
    //               Проверка существования иерархии в группе родителя				   
    //=====================================================================================		
    //                             2-й уровень иерархии
    
    Запрос2 = Новый Запрос; 
    Запрос2.Текст = "ВЫБРАТЬ
    |	Номенклатура.Ссылка КАК Ссылка,
    |	Номенклатура.ПометкаУдаления,
    |	Номенклатура.Родитель КАК Родитель,
    |	Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |	Номенклатура.Код КАК Код,
    |	Номенклатура.Наименование КАК Наименование
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.ЭтоГруппа = &Истина
    |	И Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)
    |	И Номенклатура.Наименование = &УровеньИерархии
    |ИТОГИ ПО
    |	Ссылка ИЕРАРХИЯ,
    |	ЭтоГруппа,
    |	Код,
    |	Родитель ИЕРАРХИЯ,
    |	Наименование";
    
    
    Запрос2.УстановитьПараметр("Истина"       , Истина );
    Запрос2.УстановитьПараметр("Родитель"     , Родитель1 );
    Запрос2.УстановитьПараметр("УровеньИерархии", ВторойУровеньИерархии );
    
    Результат2 = Запрос2.Выполнить(); 
    
    ВыборкаРезультат2 = Результат2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    
    
    Если Результат2.Пустой() = Истина Тогда
    //	Создаем группу с наименованием 2й уровень иерархии
    
    Группа2 = Справочники.Номенклатура.СоздатьГруппу();
    Группа2.Родитель =  Родитель1; 
    Группа2.Наименование = ВторойУровеньИерархии;
    
    Группа2.Записать();
    
    Родитель2= Группа2.Ссылка;								
    иначе
    
    Родитель2 = ВыборкаРезультат2;
    
    
    КонецЕсли;	
    //=====================================================================================		
    //               Проверка существования иерархии в группе родителя				   
    //=====================================================================================		
    //                             3-й уровень иерархии
    
    Запрос3 = Новый Запрос; 
    Запрос3.Текст = "ВЫБРАТЬ
    |	Номенклатура.Ссылка КАК Ссылка,
    |	Номенклатура.ПометкаУдаления,            
    |	Номенклатура.Родитель КАК Родитель,
    |	Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |	Номенклатура.Код КАК Код,
    |	Номенклатура.Наименование КАК Наименование
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.ЭтоГруппа = &Истина
    |	И Номенклатура.Родитель = &Родитель
    |	И Номенклатура.Наименование = &УровеньИерархии
    |ИТОГИ ПО
    |	Ссылка ИЕРАРХИЯ,
    |	ЭтоГруппа,
    |	Код,
    |	Родитель ИЕРАРХИЯ,
    |	Наименование";
    
    Запрос3.УстановитьПараметр("Истина"       , Истина );
    Запрос3.УстановитьПараметр("Родитель"     , Родитель2 );
    Запрос3.УстановитьПараметр("УровеньИерархии", ТретийУровеньИерархии );
    
    Результат3 = Запрос3.Выполнить(); 
    ВыборкаРезультат3 = Результат3.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);		   
    
    
    
    Если Результат3.Пустой() = Истина Тогда
    //	Создаем группу с наименованием 3й уровень иерархии
    
    Группа3 = Справочники.Номенклатура.СоздатьГруппу();
    Группа3.Родитель =  Родитель2; 
    Группа3.Наименование = ТретийУровеньИерархии;
    
    Группа3.Записать();          					
    
    Родитель3 = Группа3.Ссылка;			
    иначе
    
    Родитель3 = ВыборкаРезультат3;
    
    КонецЕсли;	
    
    
    
    
    Но тоже вылетает ошибка.
    Можно более подробне с примером кода применительно к моему показать где я не прав?
    А не только ссылкой не HELP ?
  8. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Да уж... легкие пути не для нас: три запроса в цикле - ты вообще опасный!

    Код:
    	// третий параметр означает, что ищем в верхнем уровне справочника
    Родитель1 = Справочники.Номенклатура.НайтиПоНаименованию(ПервыйУровеньИерархии,,Справочники.Номенклатура.ПустаяСсылка());
    
    Если Родитель1.Пустая() Тогда
    // не нашли - делаем контрагента
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/иначе')">	Иначе	</span>
    // нашли - все в экстазе
    КонецЕсли; 
    
    // ищем вторую группу подчиненную первой, передаем ссылку на родителя из кода выше
    Родитель2 = Справочники.Номенклатура.НайтиПоНаименованию(ВторойУровеньИерархии,,Родитель1);
    Если Родитель2.Пустая() Тогда
    // не нашли - делаем контрагента
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/иначе')">	Иначе	</span>
    // нашли - все в экстазе
    КонецЕсли; 
    
    // и т.д.
    
    

Поделиться этой страницей