Справочники и Данные · 9 мин
1С: как выбрать номенклатуру из группы
Как выбрать номенклатуру из группы в 1С: отбор в списке, подбор в документы и запрос с учётом иерархии. Примеры кода, проверка результата, типичные ошибки.
Задача выбрать номенклатуру из конкретной группы возникает в 1С постоянно: менеджеру нужно подобрать товары только из папки «Крепёж», бухгалтеру — сформировать отчёт по одной товарной категории, разработчику — получить в запросе все позиции, входящие в группу, включая вложенные подгруппы. Способ решения зависит от того, где вы работаете: в пользовательском режиме списка, при подборе в документ или в коде на встроенном языке.
Главная тонкость — иерархия справочника «Номенклатура». Группа может содержать не только элементы, лежащие в ней напрямую, но и целое дерево подгрупп. Если отобрать только по прямому родителю, часть позиций «потеряется», и отчёты с документами разойдутся. Ниже разобраны рабочие способы для типовых конфигураций (УТ, ERP, Бухгалтерия, УНФ) и примеры кода с контролем результата.
Как устроена иерархия номенклатуры и почему это важно
Справочник «Номенклатура» в типовых конфигурациях — иерархический, с иерархией групп и элементов. Группа — это папка, которая сама не является товаром: у неё нет остатков, цен и единиц измерения, она служит только для классификации. Каждый элемент хранит ссылку на родителя в поле «Родитель».
Глубина вложенности не ограничена жёстко: группа «Материалы» может содержать «Металлопрокат», внутри которого лежит «Листовой прокат». Поэтому фраза «выбрать номенклатуру из группы» имеет два разных смысла: только элементы, лежащие непосредственно в папке, или всё содержимое папки с учётом подгрупп. Перед настройкой отбора решите, какой вариант нужен — от этого зависит конструкция запроса и корректность итогов.
Выбор группы в списке номенклатуры (пользовательский режим)
Самый простой сценарий — открыть список и перейти в нужную папку. В форме списка номенклатуры обычно есть панель дерева групп слева: щёлкните по группе, и справа отобразятся её позиции. Если дерево скрыто, включите его кнопкой «Иерархия» или через меню «Ещё» — название команды зависит от конфигурации.
Обратите внимание на режим показа. Во многих конфигурациях при выборе группы список показывает содержимое с учётом подгрупп, а в некоторых — только прямые элементы. Проверить легко: выберите группу, внутри которой точно есть подпапка с товарами, и посмотрите, видны ли её позиции в списке.
Для точного отбора используйте настройку списка: «Ещё → Настроить список» (в Бухгалтерии — кнопка «Ещё → Настроить список» или панель отбора). Добавьте условие «Родитель» → вид сравнения «В группе» или «В иерархии» → укажите нужную папку. Такой отбор сохраняется и работает независимо от видимости дерева.
- 1Откройте справочник «Номенклатура» через раздел «Справочники» или «НСИ и администрирование».
- 2Если дерево групп скрыто, включите его командой показа иерархии.
- 3Щёлкните по нужной группе — справа появятся её позиции.
- 4Для строгого отбора откройте «Ещё → Настроить список», добавьте условие по полю «Родитель» с видом сравнения «В группе».
- 5Проверьте, попали ли в список позиции из вложенных подгрупп.
Подбор номенклатуры из группы в документ
При заполнении табличной части документа (реализация, поступление, счёт) удобнее работать через форму подбора: кнопка «Подбор» или «Добавить → Подбор из номенклатуры» над табличной частью. В открывшейся форме есть дерево групп — выберите папку, и в списке останутся только её товары, которые можно переносить в документ двойным щелчком или кнопкой переноса.
В форме подбора доступны дополнительные отборы: по остаткам, ценам, свойствам. Это удобно, когда из группы нужны, например, только позиции с положительным остатком на конкретном складе. Учтите, что состав отборов и их названия отличаются между конфигурациями — ориентируйтесь на панель «Отборы» в форме подбора.
Если группа большая, комбинируйте отбор по группе с поиском по наименованию или артикулу: сначала выберите папку, затем введите часть названия в строку поиска. Это быстрее, чем листать сотни позиций.
Выбор номенклатуры из группы запросом
Для отчётов, обработок и проведения документов используется запрос. Ключевая конструкция — оператор «В ИЕРАРХИИ», который возвращает элементы группы и всех её подгрупп любой вложенности:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура,
Номенклатура.Родитель КАК Группа
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель В ИЕРАРХИИ(&Группа)
И НЕ Номенклатура.ПометкаУдаления
Параметр «&Группа» передаётся как ссылка на элемент справочника: Запрос.УстановитьПараметр("Группа", ГруппаСсылка);. Если нужны только элементы, лежащие непосредственно в папке без подгрупп, замените условие на Номенклатура.Родитель = &Группа.
Частая ошибка — сравнивать саму номенклатуру с группой через «В ИЕРАРХИИ»: условие Номенклатура.Ссылка В ИЕРАРХИИ(&Группа) тоже работает и захватывает подгруппы, но по полю «Родитель» запрос обычно читабельнее. Дополнительно отсекайте помеченные на удаление позиции, иначе они попадут в отчёт и исказят итоги.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура
|ГДЕ Родитель В ИЕРАРХИИ(&Группа) И НЕ ПометкаУдаления";
Запрос.УстановитьПараметр("Группа", ГруппаСсылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// обработка позиции
КонецЦикла;Программный перебор без запроса
Если запрос избыточен (например, нужно просто обойти элементы папки в обработке), используйте метод Выбрать() менеджера справочника:
Выборка = Справочники.Номенклатура.Выбрать(ГруппаСсылка);
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
// работа с элементом
КонецЦикла;
Здесь есть два подвоха. Первый: метод Выбрать() с указанным родителем возвращает только прямых потомков — элементы вложенных подгрупп не попадут в выборку, их придётся обходить рекурсивно. Второй: в выборку могут попасть сами группы, поэтому проверка ЭтоГруппа обязательна, иначе обработка попытается работать с папкой как с товаром.
Способы выбора — что использовать
Для ручной работы пользователя. Не требует кода, но не подходит для автоматизации и отчётов.
Для отчётов и обработок. Захватывает подгруппы, работает быстро, но требует правильного параметра-ссылки.
Для простого перебора в коде. Только прямые потомки, нужна проверка ЭтоГруппа и рекурсия для подгрупп.
Проверка результата и типичные ошибки
После настройки отбора или выполнения запроса сверьте количество полученных позиций с ожидаемым. Быстрый способ — открыть группу в списке, включить показ с подгруппами и сравнить число строк с результатом запроса. Расхождение почти всегда означает одну из ошибок ниже.
Отдельный риск — дубли групп. Если справочник вели неаккуратно, папок «Материалы» может быть несколько, и товары размазаны между ними. Перед массовой обработкой найдите дубли по наименованию и объедините их штатной обработкой поиска и удаления дублей, иначе любой отбор будет неполным.
Особые случаи: отбор по нескольким группам и по свойствам
Если нужна номенклатура из нескольких групп сразу, передайте в параметр список значений или массив ссылок и оставьте условие «В ИЕРАРХИИ(&Группы)» — запрос корректно обработает список. В настройке списка то же самое делается видом сравнения «В списке» с перечислением папок.
Когда классификация по группам не подходит (один товар логически относится к нескольким категориям), используйте дополнительные реквизиты, виды номенклатуры или иерархические группы в УНФ. Отбор по свойству настраивается в форме списка так же, как по родителю, но не зависит от структуры папок.
Что важно запомнить
Определите, нужны ли подгруппы: «В ИЕРАРХИИ» — со всеми вложенными папками, «= &Группа» — только прямые элементы. В списке и подборе используйте отбор по полю «Родитель». Всегда исключайте помеченные на удаление, проверяйте ЭтоГруппа при переборе и сверяйте количество позиций с ожидаемым.
Частые вопросы
Почему запрос «В ИЕРАРХИИ» возвращает пустой результат?
Чаще всего в параметр передана строка с названием группы вместо ссылки на элемент справочника, либо ссылка указывает на элемент, а не на группу. Проверьте тип параметра и убедитесь, что группа не пуста: откройте её в списке и посмотрите наличие позиций.
Как выбрать элементы, которые лежат прямо в корне справочника, без группы?
Используйте условие «Номенклатура.Родитель = &ПустаяГруппа», где параметр — пустая ссылка справочника: Справочники.Номенклатура.ПустаяСсылка(). В настройке списка выберите вид сравнения «Не заполнено» для поля «Родитель».
Можно ли в подборе документа видеть остатки только по своему складу?
Да, в типовых формах подбора есть отбор по складу и настройка показа остатков. Откройте панель отборов формы подбора, укажите склад и включите отображение только позиций с остатками. Состав настроек зависит от конфигурации.
Как перенести все позиции из одной группы в другую?
Выделите нужные элементы в списке (Ctrl+A после установки отбора по группе) и используйте команду перемещения в группу — обычно через «Ещё» или контекстное меню. Перед массовым переносом сделайте резервную копию базы: вернуть прежнюю структуру вручную трудоёмко.
Отчёт по группе и отбор в списке дают разное количество позиций. Почему?
Скорее всего, отчёт использует «В ИЕРАРХИИ» (с подгруппами), а список показывает только прямые элементы, либо в одном из вариантов не отфильтрованы помеченные на удаление. Сравните условия отбора и проверьте наличие дублей групп с одинаковым названием.