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

Определить принадлежность номенклатуры к конкретной группе справочника

Автор 1cka, 16 янв 2015, 15:03

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

1cka

8.2
Как определить в иерархическом справочнике принадлежность номенклатуры к самому верхнему уровню?
есть ТЗ, хотелось бы условием исключить из нее ненужные позиции     

Для Каждого Строка Из ТаблицаИсходныеК Цикл
//Если Тогда
   //Сообщить("Группа - " + Строка.Номенклатура.ПринадлежитЭлементуГруппы);//так определяет соответственно не самую верхнюю группу
//КонецЕсли;
КонецЦикла;
   

LexaK

самое простое,
в иерархическом справочнике у элемента есть реквизит Родитель, это есть ссылка на ту группу в которую входит текущий элемент, Родитель в свою очередь имеет тоже поле Родитель, и так далее, пока Поле Родитель не будет пустым - это самая верхняя группа!

вот Функция (правда не самый оптимальный вариант) (для оптимального варианта надо делать все в одном запросе, но это сложнее)


Функция ПерваяГруппа(Номенклатура)

лкГруппа = Номенклатура;
Пока Не лкГруппа.Родитель.Пустая() Цикл
лкГруппа = лкГруппа.Родитель;
КонецЦикла;

Возврат лкГруппа;

КонецФункции




Добавлено: 16 янв 2015, 16:04


таким образом ваш цикл будет выглядеть так

Для Каждого Строка Из ТаблицаИсходныеК Цикл
    Сообщить("Группа - " + ПерваяГруппа(Строка.Номенклатура));
КонецЦикла;
если помогло нажмите: Спасибо!

ilyay

Предложенное решение - стресс-тест для базы данных. Количество запросов, равное уровню иерархии, на каждом этапе цикла!
Нужно делать одним запросом. Загрузить ТЗ (типизированную) в запрос и использовать следующие условия: выбрать НоменклатураВерхнегоУровня.ссылка поместить НоменклатураВерхнегоУровня из справочник.номенклатура как НоменклатураВерхнегоУровня где НоменклатураВерхнегоУровня.родитель = Значение(Справочник.Номенклатура.ПустаяСсылка) И НоменклатураВерхнегоУровня.ЭтоГруппа и не НоменклатураВерхнегоУровня.ПометкаУдаления // если не используются группы, то ЭтоГруппа не нужно
затем выборка с условием номенклатура_тз.ссылка в Иерархии(выбрать ссылка из НоменклатураВерхнегоУровня)

1cka

у меня получилось так:
Если (Строка.Номенклатура.ПринадлежитЭлементу(Справочники.Номенклатура.НайтиПоКоду("0001")) = ЛОЖЬ) Тогда

LexaK

ilyay,
Цитата: ilyay от 19 янв 2015, 00:24

Цитировать
затем выборка с условием номенклатура_тз.ссылка в Иерархии(выбрать ссылка из НоменклатураВерхнегоУровня)

                     
ваше условие, всегда будет Истина для товаров в группах,
но где здесь имя самой верхней группы?

например такая схема группировок, где Группа1,2,3 это Родитель(и), а цифры это уровень вложенности.

Товар1 - Группа3 - Группа2 - Группа1 - Группа0
Товар2 - Группа2 - Группа1 - Группа0
Товар3 - Группа3 - Группа2 - Группа1 - Группа0
Товар4 - Группа1 - Группа0
и т.д. вложенность группировок может быть различной и безграничной

как вашим запросом получить такой результат

Товар1, Группа0
Товар2, Группа0
Товар3, Группа0
Товар4, Группа0
и т.д.


         
                  
                                       
                        
                     
                        Сообщить модератору 
                                       
                        
                           
                              
                           
                           
                              Re: Определить принадлежность номенклатуры к конкретной группе справочника
                           
                           « Ответ #2: Сегодня в 00:24 »
                           
                        
                     
                     
                        Предложенное решение - стресс-тест для базы данных. Количество запросов, равное уровню иерархии, на каждом этапе цикла!Нужно делать одним запросом. Загрузить ТЗ (типизированную) в запрос и использовать следующие условия: выбрать НоменклатураВерхнегоУровня.ссылка поместить НоменклатураВерхнегоУровня из справочник.номенклатура как НоменклатураВерхнегоУровня где НоменклатураВерхнегоУровня.родитель = Значение(Справочник.Номенклатура.ПустаяСсылка) И НоменклатураВерхнегоУровня.ЭтоГруппа и не НоменклатураВерхнегоУровня.ПометкаУдаления // если не используются группы, то ЭтоГруппа не нужнозатем выборка с условием номенклатура_тз.ссылка в Иерархии(выбрать ссылка из НоменклатураВерхнегоУровня

если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск