Как вывести код номенклатуры в отдельную колонку в отчете на СКД?

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

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

Шаг 1. Настройка набора данных (запрос)

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

Вариант А: Выборка через точку в настройках. Мы можем выбрать в запросе только ссылку на номенклатуру:


ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.КоличествоОборот КАК Количество
ИЗ
    РегистрНакопления.Продажи.Обороты КАК Продажи

В этом случае СКД позволит нам вытащить Номенклатура.Код прямо в настройках выбранных полей. Система сама «поймет», что нужно обратиться к таблице справочника.

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


ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    Номенклатура.Код КАК КодНоменклатуры,
    Продажи.КоличествоОборот КАК Количество
ИЗ
    РегистрНакопления.Продажи.Обороты КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ 
    Справочник.Номенклатура КАК Номенклатура
ПО 
    Продажи.Номенклатура = Номенклатура.Ссылка

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

Шаг 2. Настройка выбранных полей

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

  1. Найдем в левом списке доступных полей нашу номенклатуру.
  2. Развернем список реквизитов (нажав на «плюсик»).
  3. Перетащим поле Код в правое окно выбранных полей.
  4. Убедимся, что Код и Номенклатура находятся на одном уровне иерархии в списке выбранных полей.

Шаг 3. Управление расположением реквизитов

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

Нам необходимо изменить параметр «Расположение реквизитов». Рассмотрим доступные значения:

Также обратим внимание на настройку «Расположение полей группировок». Если ваша номенклатура является группировкой, установка значения «Отдельно» позволит вынести дополнительные поля этой группировки в самостоятельные колонки.

Шаг 4. Решение проблемы отображения кодов у групп (папок)

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

Разберем способы исправления:

  1. Роли полей: На вкладке «Наборы данных» выберите поле Код. Проверьте, чтобы в колонке «Роль» не стояли ограничения, препятствующие выводу в иерархию.
  2. Добавление в группировку: Вместо того чтобы выводить код как реквизит, попробуйте добавить его в сами поля группировки. Например, создать группировку по полю Номенклатура, Код. В настройках этой группировки установите расположение «Отдельно».
  3. Выражение представления: Если вам нужно очень специфическое отображение, можно использовать выражение представления для поля Номенклатура на закладке «Наборы данных», объединив код и наименование вручную, но этот метод не создаст отдельную колонку.

Шаг 5. Оптимизация и оформление (Вычисляемые поля)

Иногда код в базе данных хранится с лидирующими нулями или префиксами (например, «УТ-0000123»), которые мешают пользователям. Рассмотрим, как очистить эти данные с помощью вычисляемых полей.

Перейдем на закладку «Вычисляемые поля» и добавим новое поле с заголовком «Чистый код». В колонке «Выражение» пропишем функцию:

ПрефиксАвтоматизации.НомерНаПечать(Код)

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

Шаг 6. Итоговая проверка структуры

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

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

Важное замечание по производительности: Помните, что чем больше дополнительных колонок-реквизитов вы выводите в детальные записи, тем больше нагрузка на сервер при компоновке результата. Если в базе миллионы записей, всегда отдавайте предпочтение явному указанию нужных полей в тексте запроса (как в Шаге 1, Вариант Б), чтобы минимизировать количество обращений к таблицам базы данных.

← На главную