При разработке или модификации отчетов в системе 1С:Предприятие 8.3 часто возникает задача вывода дополнительных данных, которые не предусмотрены в типовом решении. Одной из самых популярных задач является добавление штрихкода в отчет «Ведомость по товарам на складах» или аналогичные складские отчеты. Рассмотрим подробнее, как реализовать эту задачу, используя систему компоновки данных (СКД), и разберем сопутствующие технические сложности.
Прежде чем вносить изменения в структуру отчета, проанализируем, где именно в вашей конфигурации хранятся штрихкоды. В современных решениях на платформе 1С (таких как УТ 11, ERP 2 или КА 2) основным местом хранения является регистр сведений ШтрихкодыНоменклатуры. В более старых редакциях (УТ 10.3 или УПП) это может быть регистр Штрихкоды. Точность этих данных важна, так как на них могут быть завязаны и другие механизмы.
Важно помнить, что штрихкод часто привязан не только к объекту Номенклатура, но и к другим разрезам учета:
Разберем ситуацию, когда отчет состоит из нескольких запросов. Рассмотрим наиболее эффективный способ получения данных — через левое соединение в основном наборе данных или добавление отдельного набора данных. Если мы правим существующий запрос, нам необходимо присоединить таблицу регистра штрихкодов.
Выясним причину, по которой у одного товара может быть несколько штрихкодов. Если мы просто присоединим таблицу, строки в отчете могут «размножиться» (продублироваться). Чтобы этого избежать, используем агрегатную функцию МАКСИМУМ. Посмотрим на пример кода запроса:
ВЫБРАТЬ
ТоварыНаСкладах.Номенклатура КАК Номенклатура,
ТоварыНаСкладах.КоличествоОстаток КАК Остаток,
МАКСИМУМ(Штрихкоды.Штрихкод) КАК Штрихкод
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладах
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
ПО ТоварыНаСкладах.Номенклатура = Штрихкоды.Номенклатура
И ТоварыНаСкладах.Характеристика = Штрихкоды.Характеристика
СГРУППИРОВАТЬ ПО
ТоварыНаСкладах.Номенклатура,
ТоварыНаСкладах.КоличествоОстаток
Такой подход гарантирует, что для каждой позиции будет выведен только один штрихкод (самый последний по алфавитному или числовому порядку). Если же бизнес-логика требует вывода всех штрихкодов, проанализируем использование функции СКД СоединитьСтроки() в поле выражения на закладке «Вычисляемые поля». Для более сложных программных манипуляций можно использовать специальные обертки над объектной моделью СКД.
Часто программисты сталкиваются с тем, что новая колонка добавляется в самый конец отчета. Чтобы сместить штрихкод и зафиксировать его положение сразу после колонки Номенклатура, выполним следующие шаги в настройках СКД:
Штрихкод. Если оно находится в общем списке, мы можем просто перетащить его мышкой вверх, установив сразу под полем Номенклатура.Штрихкод добавлено в выбранные поля конкретной группировки Номенклатура, а не только в общие поля отчета.Также рассмотрим профессиональный прием: создание группы выбранных полей. Нажмем правой кнопкой мыши в окне «Выбранные поля» — «Сгруппировать поля». Добавим туда номенклатуру и штрихкод, установив тип расположения «Вместе». Это позволит визуально связать эти данные.
Если после добавления штрихкода вы заметили, что внизу отчета в строке «Итого» появились непонятные цифры или повторяющийся штрихкод, значит, поле ошибочно попало в список ресурсов. Проанализируем ситуацию: штрихкод — это строковый идентификатор, и суммировать его нет смысла.
Разберем, как это исправить:
Штрихкод и удалим его оттуда (нажав на крестик или клавишу Del).После удаления из ресурсов штрихкод перестанет отображаться в подвале отчета и в итогах по группировкам, оставаясь только в детальных записях.
Если вместо реального кода (например, 2000000123456) в отчете выводятся единицы, проверим тип данных. Выясним причину: часто это происходит, если в запросе вместо строкового поля Штрихкод выбрано числовое поле (например, количество или тип штрихкода). Убедитесь, что в наборе данных для поля Штрихкод установлен тип Строка или соответствующий ссылочный тип, если штрихкоды хранятся в справочнике.
В сложных отчетах, где уже есть 3 и более запроса, добавление еще одного соединения (Join) может существенно замедлить формирование. Рассмотрим альтернативный вариант — Связи наборов данных.
Создадим отдельный набор данных-запрос «НаборДанныхШтрихкоды»:
ВЫБРАТЬ
Штрихкоды.Номенклатура КАК Номенклатура,
Штрихкоды.Штрихкод КАК Штрихкод
ИЗ
РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
На закладке «Связи наборов данных» укажем:
Номенклатура = Номенклатура.Такой подход, который также применяется в отчетах по движениям товаров, позволяет платформе 1С оптимизировать обращение к базе данных, получая штрихкоды только для тех товаров, которые попали в итоговый результат по остаткам.
Используя эти инструкции, мы сможем не только добавить штрихкод в отчет, но и сделать его удобным для пользователя, сохранив высокую производительность системы.