Как добавить колонку «Штрихкод» в отчет внешней обработки 1С:Управление торговлей 10.3?

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

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

Анализ структуры данных

Прежде чем приступать к изменениям в коде, важно понять, как данные хранятся в системе. В УТ 10.3 сведения о штрихкодах хранятся в Регистре сведений.Штрихкоды. Особенность этого регистра заключается в том, что один товар может иметь несколько штрихкодов — для разных единиц измерения (например, «штука», «упаковка», «коробка»).

Наша задача — получить только один штрихкод, который относится к Базовой единице измерения номенклатуры. Если просто присоединить таблицу регистра к основному запросу без условий, отчет может начать дублировать строки для одного и того же товара, что приведет к неверным результатам.

Реализация вывода штрихкода в запросе

Для решения задачи мы будем использовать Консоль запросов или прямое редактирование текста запроса во внешней обработке через Конфигуратор. Разберем основные этапы:

  1. Откройте внешнюю обработку в Конфигураторе.
  2. Перейдите к процедуре, которая формирует отчет (обычно это процедура с кодом Сформировать или ПриКомпоновкеРезультата).
  3. Найдите основной запрос, который получает данные номенклатуры.
  4. Добавьте в запрос левое соединение с Регистром сведений.Штрихкоды.

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


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

Почему фильтр по базовой единице критически важен

Как мы проанализировали ранее, использование связи Номенклатура.БазоваяЕдиницаИзмерения = Штрихкоды.ЕдиницаИзмерения позволяет нам сфокусироваться на основном коде товара. Без этого условия система может вернуть несколько записей, если для номенклатуры заведены штрихкоды и для базовой единицы, и для упаковок. Это создаст избыточные строки в отчете.

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

Альтернативный подход: Вывод после формирования

Если вы опасаетесь усложнять основной запрос или замечаете, что отчет начал работать медленно, рассмотрите альтернативный вариант. Можно сначала сформировать основную таблицу данных, а затем, при обходе результата выборки, заполнять колонку Штрихкод отдельным запросом к регистру:


// Пример логики в коде обработки
Для Каждого СтрокаОтчета Из РезультатТаблица Цикл
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ Штрихкод ИЗ РегистрСведений.Штрихкоды 
    | ГДЕ Владелец = &Номенклатура И ЕдиницаИзмерения = &БазоваяЕдиница";
    Запрос.УстановитьПараметр("Номенклатура", СтрокаОтчета.Номенклатура);
    Запрос.УстановитьПараметр("БазоваяЕдиница", СтрокаОтчета.Номенклатура.БазоваяЕдиницаИзмерения);
    РезультатШК = Запрос.Выполнить().Выбрать();
    Если РезультатШК.Следующий() Тогда
        СтрокаОтчета.Штрихкод = РезультатШК.Штрихкод;
    КонецЕсли;
КонецЦикла;

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

Заключение и рекомендации

Мы рассмотрели два основных пути решения задачи: модификацию основного запроса через ЛЕВОЕ СОЕДИНЕНИЕ и дополнение данных в цикле после выборки. Для стабильной работы отчета всегда проверяйте:

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

← На главную