Как объединить номенклатурные группы в отчете 1С?

Программист 1С v8.3 (Управляемые формы)
← На главную

Зачастую при работе с отчетами возникает необходимость объединить несколько различных номенклатурных групп в одну общую категорию для более наглядного анализа. Проанализируем типичную ситуацию: у нас есть отчет по продажам, построенный на базе «Универсального отчета», в котором фигурируют три отдельные номенклатурные группы: «Кухонные модули», «Кухонные фасады» и «Фурнитура кухни». Наша задача — сгруппировать их в отчете под единым названием «Кухни». Разберем по шагам все возможные варианты решения этой задачи: от самых простых и «топорных» до методически правильных и гибких.

Вариант 1: Подмена в запросе с помощью конструкции ВЫБОР КОГДА

Первый способ, который часто приходит на ум при модификации отчета в конфигураторе — это прямое прописывание условий в самом запросе. Рассмотрим подробнее этот подход. Мы можем использовать конструкцию ВЫБОР КОГДА, чтобы проверить принадлежность номенклатуры к определенной группе и задать для нее новое имя группировки.

Посмотрим на пример кода, который поможет реализовать такую логику:


ВЫБОР 
    КОГДА ТаблицаРегистра.Номенклатура.Родитель.Наименование ПОДОБНО "%Кухн%" 
        ТОГДА "Кухни" 
    КОГДА ТаблицаРегистра.Номенклатура.Родитель.Наименование ПОДОБНО "%Гостиные%" 
        ТОГДА "Корпусная мебель" 
    ИНАЧЕ ТаблицаРегистра.Номенклатура.Родитель.Наименование 
КОНЕЦ КАК ГруппаКорпус

Важный нюанс: обратите внимание на использование оператора ПОДОБНО и символов процента % по краям строки поиска. Они позволяют искать вхождение слова в наименовании, что страхует от мелких опечаток или лишних пробелов.

Однако выясним причину, почему такой подход считается «костылем» (hardcode). Если завтра появится новая группа, например, «Столешницы для кухни», которая не попадет под условие, или изменится название существующей группы, отчет перестанет выводить корректные данные. Нам придется снова лезть в конфигуратор и переписывать запрос. Это негибко и требует постоянного вмешательства программиста.

Вариант 2: Использование пользовательских полей СКД

Поскольку современные версии «Универсального отчета» построены на Системе компоновки данных (СКД), мы можем решить проблему максимально элегантно прямо в пользовательском режиме предприятия. Разберем этот способ, так как он оставляет управление настройками в руках самих пользователей.

  1. Откройте нужный отчет и нажмите кнопку «Настройки», затем перейдите в расширенный режим.
  2. Перейдите на вкладку «Пользовательские поля».
  3. Создайте новое поле и выберите тип Пользовательское поле - Выбор.
  4. Задайте условия отбора, например: Если «Номенклатурная группа» В СПИСКЕ (Кухонные модули, Кухонные фасады, Фурнитура) -> Тогда значение «Кухни».
  5. Для остальных случаев можно добавить условие Иначе -> Значение поля «Номенклатурная группа».
  6. Сохраните настройку и добавьте созданное пользовательское поле в структуру группировок вашего отчета (в самый верх).

Этот метод идеален, так как при добавлении новой номенклатурной группы пользователю достаточно будет просто отредактировать список в настройках отчета без написания кода.

Вариант 3: Реструктуризация справочника Номенклатурные группы

Самый простой и логичный вариант с точки зрения архитектуры стандартной 1С — это использование встроенной иерархии справочников. Если элементы концептуально относятся к одной макрогруппе, создайте для них папку (группу) прямо в справочнике номенклатурных групп.

Назовите новую группу «Кухни» и перенесите в нее элементы «Кухонные модули», «Кухонные фасады» и «Фурнитура кухни». После этого в отчете достаточно будет настроить группировку по полю Иерархия или выводить родителя номенклатурной группы. Однако, этот вариант не всегда подходит, если текущая иерархия справочника жестко завязана на другие бизнес-процессы или обмены данными, и ломать ее ради одного отчета нельзя.

Вариант 4: Добавление дополнительного реквизита

Если конфигурация у вас самописная (или есть возможность использовать типовой механизм дополнительных реквизитов и сведений), мы можем расширить структуру справочника.

Создадим новый реквизит для справочника номенклатурных групп, назовем его, к примеру, КатегорияДляОтчетов или Макрогруппа (тип данных — Строка или ссылка на новый справочник). Затем в карточках нужных нам групп заполним этот реквизит значением «Кухни». В настройках универсального отчета мы сможем развернуть поле номенклатурной группы по плюсику, выбрать наш новый реквизит Макрогруппа и сделать группировку именно по нему.

Вариант 5: Создание регистра сведений для соответствий (Маппинг)

Если вмешиваться в структуру справочника категорически запрещено, проанализируем еще один профессиональный метод — создание непериодического регистра сведений. Назовем его НастройкиГруппировокОтчетов.

  1. Добавим в регистр измерение НоменклатурнаяГруппа (тип — СправочникСсылка.НоменклатурныеГруппы).
  2. Добавим ресурс СводнаяГруппа (тип — Строка).
  3. В режиме предприятия пользователь сам заполнит этот регистр, указав, что фасадам и фурнитуре соответствует сводная группа «Кухни».
  4. В запросе отчета настроим левое соединение (LEFT JOIN) основной таблицы с нашим новым регистром сведений. Сгруппируем данные по ресурсу СводнаяГруппа.

Подводя итог, можно сказать, что решение с конструкцией ВЫБОР КОГДА оправдано только как очень быстрое, временное решение. Для создания надежной и масштабируемой системы мы рекомендуем использовать пользовательские поля СКД или механизмы дополнительных реквизитов/регистров сведений.

← На главную