Как объединить товары с разными описаниями в одну группу в отчете СКД

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

При разработке отчетов в системе компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда в информационной базе присутствуют позиции, которые логически являются одним и тем же товаром, но из-за различий в описании или из-за ошибок ввода они отображаются в отчете отдельными строками. Рассмотрим подробно, как решить проблему объединения таких позиций, чтобы отчет был информативным и удобным для анализа.

Анализ причины возникновения дублей

Прежде чем приступать к техническому решению в СКД, проанализируем, почему система видит эти товары как разные объекты. В 1С справочник Номенклатура хранит ссылки на объекты. Если в справочнике создано две разные карточки «Стол обеденный», даже с одинаковыми названиями, для системы это два разных уникальных идентификатора (GUID). При группировке по полю Номенклатура СКД будет выводить их отдельными строками. Выясним, какие инструменты компоновки помогут нам «склеить» эти данные.

Способ 1. Группировка по строковому представлению

Самый простой и быстрый способ объединить разные карточки товаров — это изменить поле группировки в настройках отчета. Вместо того чтобы группировать по ссылке (полю Номенклатура), мы будем использовать текстовое поле Наименование. Разберем этот процесс по шагам:

  1. Откроем схему компоновки данных и перейдем на закладку «Настройки».
  2. В структуре отчета найдем текущую группировку по полю Номенклатура.
  3. Заменим ее на Номенклатура.Наименование (или просто Наименование, если оно выведено в набор данных).
  4. Теперь все товары, имеющие идентичное строковое название, схлопнутся в одну строку, а их числовые показатели (остатки, суммы) просуммируются.

Важное ограничение: При таком подходе теряется возможность «расшифровки» (drill-down). Вы не сможете дважды кликнуть по строке и открыть карточку товара, так как группировка идет по строке, а не по ссылке. Чтобы сохранить ссылку, проанализируем следующий метод.

Способ 2. Сохранение расшифровки при группировке по наименованию

Чтобы и объединить товары, и оставить возможность открывать карточку, применим профессиональную хитрость в настройках полей группировки СКД. Рассмотрим подробнее, как это реализовать:

В настройках группировки, в колонке «Поля группировки», выберем наше поле Наименование. В нижней части окна настройки есть закладка «Детальные записи» или возможность указать выражение. Мы можем указать системе, какое значение ссылки использовать для расшифровки этой текстовой группы.

Используем функцию агрегации в выражении детальных записей:

Максимум(Номенклатура)

Это позволит СКД отображать одну строку для всех столов с одинаковым именем, но при попытке расшифровки система возьмет «максимальную» ссылку из группы. Это не идеальный метод для выбора конкретного дубля, но он решает проблему визуального загромождения отчета.

Способ 3. Использование характеристик номенклатуры

Если товары различаются только описанием (например, цветом или размером), то правильным архитектурным решением в 1С является использование механизма характеристик. Разберем ситуацию: вместо создания двух карточек «Стол обеденный (белый)» и «Стол обеденный (черный)», создается одна карточка «Стол обеденный», а цвет выносится в характеристики.

Если характеристики уже включены в конфигурации, нам нужно настроить СКД для их поддержки:

  1. На закладке «Наборы данных» выберем наш запрос.
  2. Перейдем на закладку «Характеристики» (в нижней части конструктора).
  3. Укажем тип объекта (СправочникСсылка.Номенклатура), источник видов характеристик и источник значений.

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

Способ 4. Вычисляемые поля и принудительное объединение

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

Добавим в СКД новое вычисляемое поле с именем ГруппаТоваров. В выражении напишем логику объединения:


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

Теперь в настройках отчета мы будем делать группировку именно по этому полю ГруппаТоваров. Система принудительно объединит все подходящие под условие позиции в одну строку.

Способ 5. Пользовательские поля (решение без программирования)

Если отчет уже сформирован пользователем в режиме «1С:Предприятие», и ему нужно быстро объединить две строки, не прибегая к конфигуратору, можно использовать Пользовательские поля. Посмотрим на алгоритм действий:

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

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

Способ 6. Иерархия номенклатуры

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

В настройках группировки укажем тип: Иерархия. В этом случае отчет сначала выведет название папки («Столы»), где будут просуммированы показатели всех вложенных товаров, а при нажатии на «плюсик» раскроет детальные записи с разными описаниями. Это самый прозрачный метод, который не требует написания сложного кода или условий.

Способ 7. Использование дополнительных реквизитов

В современных конфигурациях на базе БСП (Библиотеки стандартных подсистем) можно добавить к номенклатуре Дополнительный реквизит (например, «Товарная категория для отчетов»). Выясним преимущество этого метода: вы не меняете структуру справочника и не плодите дубли, а просто помечаете разные товары общим признаком.

В СКД этот реквизит будет доступен через точку: Номенклатура.ДополнительныеРеквизиты. Если сделать группировку по этому реквизиту, то все товары с одинаковой категорией объединятся в одну позицию. Это позволяет гибко управлять группировкой данных, просто редактируя свойства карточек товаров в пользовательском режиме.

Резюме и рекомендации

Проанализировав ситуацию, можно сделать вывод: выбор метода зависит от того, является ли дублирование товаров ошибкой или особенностью учета.

  1. Если это ошибка ввода — лучше всего воспользоваться типовой обработкой «Поиск и удаление дублей», объединив карточки на уровне базы данных.
  2. Если это особенности номенклатуры (разные характеристики) — настраиваем вкладку «Характеристики» в СКД.
  3. Если нужно быстрое визуальное объединение — используем группировку по Наименованию или создаем Пользовательское поле.

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

← На главную