Как правильно добавить колонку со штрихкодом в отчет 1С на базе СКД

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

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

Определяем место хранения штрихкодов

Прежде чем вносить изменения в структуру отчета, проанализируем, где именно в вашей конфигурации хранятся штрихкоды. В современных решениях на платформе 1С (таких как УТ 11, ERP 2 или КА 2) основным местом хранения является регистр сведений ШтрихкодыНоменклатуры. В более старых редакциях (УТ 10.3 или УПП) это может быть регистр Штрихкоды. Точность этих данных важна, так как на них могут быть завязаны и другие механизмы.

Важно помнить, что штрихкод часто привязан не только к объекту Номенклатура, но и к другим разрезам учета:

  1. Характеристика номенклатуры: если для одного товара используются разные штрихкоды в зависимости от цвета или размера.
  2. Упаковка: штрихкод может быть разным для штучного товара и для целой паллеты.
  3. Серия: в некоторых специфических случаях штрихкод может быть уникальным для конкретной серии.

Добавление штрихкода в запрос СКД

Разберем ситуацию, когда отчет состоит из нескольких запросов. Рассмотрим наиболее эффективный способ получения данных — через левое соединение в основном наборе данных или добавление отдельного набора данных. Если мы правим существующий запрос, нам необходимо присоединить таблицу регистра штрихкодов.

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


ВЫБРАТЬ
    ТоварыНаСкладах.Номенклатура КАК Номенклатура,
    ТоварыНаСкладах.КоличествоОстаток КАК Остаток,
    МАКСИМУМ(Штрихкоды.Штрихкод) КАК Штрихкод
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладах
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
        ПО ТоварыНаСкладах.Номенклатура = Штрихкоды.Номенклатура
        И ТоварыНаСкладах.Характеристика = Штрихкоды.Характеристика
СГРУППИРОВАТЬ ПО
    ТоварыНаСкладах.Номенклатура,
    ТоварыНаСкладах.КоличествоОстаток

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

Как расположить колонку после Номенклатуры

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

  1. Перейдем на закладку «Настройки», затем выберем нужный вариант отчета.
  2. В нижней части окна выберем вкладку «Выбранные поля».
  3. Найдем наше поле Штрихкод. Если оно находится в общем списке, мы можем просто перетащить его мышкой вверх, установив сразу под полем Номенклатура.
  4. Если отчет использует группировки, убедимся, что поле Штрихкод добавлено в выбранные поля конкретной группировки Номенклатура, а не только в общие поля отчета.

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

Устранение проблем с «Итогами»

Если после добавления штрихкода вы заметили, что внизу отчета в строке «Итого» появились непонятные цифры или повторяющийся штрихкод, значит, поле ошибочно попало в список ресурсов. Проанализируем ситуацию: штрихкод — это строковый идентификатор, и суммировать его нет смысла.

Разберем, как это исправить:

  1. Перейдем на закладку «Ресурсы» в схеме компоновки данных.
  2. Найдем в списке поле Штрихкод и удалим его оттуда (нажав на крестик или клавишу Del).
  3. Если поле обязательно должно быть ресурсом для каких-то целей, в колонке «Рассчитывать по...» снимите галочку с пункта «Общий итог».

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

Проблема вывода «единичек» вместо кода

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

Оптимизация: использование связей наборов данных

В сложных отчетах, где уже есть 3 и более запроса, добавление еще одного соединения (Join) может существенно замедлить формирование. Рассмотрим альтернативный вариант — Связи наборов данных.

Создадим отдельный набор данных-запрос «НаборДанныхШтрихкоды»:


ВЫБРАТЬ
    Штрихкоды.Номенклатура КАК Номенклатура,
    Штрихкоды.Штрихкод КАК Штрихкод
ИЗ
    РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды

На закладке «Связи наборов данных» укажем:

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

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

← На главную