Работа с Системой компоновки данных (СКД) в 1С открывает огромные возможности для создания гибких отчетов, однако новички часто сталкиваются с ситуацией, когда дополнительные реквизиты объектов (например, Код или Артикул номенклатуры) «склеиваются» в одной ячейке с основным наименованием или вовсе не отображаются в отдельной колонке. Разберем детально, как решить эту задачу, оптимизировать запрос и настроить корректное отображение данных даже для иерархических справочников. Для ускорения разработки типовых отчетов можно использовать готовый шаблон внешнего отчета на СКД.
Прежде всего, нам необходимо убедиться, что данные о коде номенклатуры доступны системе. Существует два подхода к формированию запроса, и вокруг них часто возникают профессиональные споры. Проанализируем оба варианта.
Вариант А: Выборка через точку в настройках. Мы можем выбрать в запросе только ссылку на номенклатуру:
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
Продажи.КоличествоОборот КАК Количество
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
В этом случае СКД позволит нам вытащить Номенклатура.Код прямо в настройках выбранных полей. Система сама «поймет», что нужно обратиться к таблице справочника.
Вариант Б: Явное указание поля в запросе. Это более строгий подход, который часто рекомендуют для повышения производительности в высоконагруженных системах:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура,
Номенклатура.Код КАК КодНоменклатуры,
Продажи.КоличествоОборот КАК Количество
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ
Справочник.Номенклатура КАК Номенклатура
ПО
Продажи.Номенклатура = Номенклатура.Ссылка
Рассмотрим ситуацию с точки зрения производительности. Если мы выбираем только Ссылка, а затем в настройках СКД добавляем Ссылка.Код, платформа автоматически модифицирует итоговый SQL-запрос, добавляя соединение с таблицей справочника. Однако явный выбор полей (Вариант Б) дает программисту больше контроля и позволяет избежать избыточного получения данных объекта, если вы не планируете использовать саму ссылку в отчете.
После того как поле Код появилось в наборе данных (или стало доступно как реквизит номенклатуры), перейдем на закладку «Настройки», а затем на вложенную вкладку «Выбранные поля».
Код в правое окно выбранных полей.Код и Номенклатура находятся на одном уровне иерархии в списке выбранных полей.Это самый важный этап, на котором решается проблема «склеивания» данных. По умолчанию СКД часто выводит реквизиты в одной колонке с владельцем через запятую (например: «Стол кухонный, 0000045»). Чтобы заставить систему вывести код в отдельный столбец, проанализируем настройки на вкладке «Другие настройки».
Нам необходимо изменить параметр «Расположение реквизитов». Рассмотрим доступные значения:
Также обратим внимание на настройку «Расположение полей группировок». Если ваша номенклатура является группировкой, установка значения «Отдельно» позволит вынести дополнительные поля этой группировки в самостоятельные колонки.
Часто при иерархическом выводе (когда в отчете видны группы товаров) коды отображаются только у конечных элементов, а напротив названий папок стоят пустые ячейки. Выясним причину этого поведения. Это происходит из-за того, что СКД не знает, как агрегировать текстовые данные для группировок.
Разберем способы исправления:
Код. Проверьте, чтобы в колонке «Роль» не стояли ограничения, препятствующие выводу в иерархию.Номенклатура, Код. В настройках этой группировки установите расположение «Отдельно».Номенклатура на закладке «Наборы данных», объединив код и наименование вручную, но этот метод не создаст отдельную колонку.Иногда код в базе данных хранится с лидирующими нулями или префиксами (например, «УТ-0000123»), которые мешают пользователям. Рассмотрим, как очистить эти данные с помощью вычисляемых полей.
Перейдем на закладку «Вычисляемые поля» и добавим новое поле с заголовком «Чистый код». В колонке «Выражение» пропишем функцию:
ПрефиксАвтоматизации.НомерНаПечать(Код)
Или, если мы работаем в универсальной среде без специфических общих модулей, можно воспользоваться строковыми функциями СКД для удаления нулей. После этого новое вычисляемое поле нужно добавить в «Выбранные поля» вместо стандартного кода.
Проанализируем структуру нашего отчета в конце настройки. Она должна выглядеть следующим образом:
Код, Номенклатура, КоличествоОборот.Такой подход гарантирует, что Код всегда будет занимать отдельную позицию в таблице, позволяя пользователям легко сортировать по нему данные или копировать их в сторонние редакторы (например, Excel) без необходимости ручного разделения текста. Для гибкого управления структурой и выводом полей со стороны пользователя можно использовать инструмент для расширенной настройки отчетов на СКД.
Важное замечание по производительности: Помните, что чем больше дополнительных колонок-реквизитов вы выводите в детальные записи, тем больше нагрузка на сервер при компоновке результата. Если в базе миллионы записей, всегда отдавайте предпочтение явному указанию нужных полей в тексте запроса (как в Шаге 1, Вариант Б), чтобы минимизировать количество обращений к таблицам базы данных.