Как вывести штрихкод номенклатуры в печатную форму 1С?

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

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

Шаг 1: Подготовка макета печатной формы

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

Шаг 2: Выбор метода получения штрихкода

Существует два основных подхода: использование прямого запроса к регистру сведений Штрихкоды или использование встроенных функций типовых конфигураций. Рассмотрим оба варианта.

Вариант 1: Прямой запрос к регистру сведений

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


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

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

Вариант 2: Использование типовых функций (Рекомендуемый способ)

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


// В цикле обхода строк документа
ОбластьМакета.Параметры.Штрихкод = УправлениеРозничнойТорговлей.ПолучитьШтрихКод(
    ВыборкаСтрокТовары.Номенклатура,
    ВыборкаСтрокТовары.ЕдиницаИзмерения
);

Как избежать ошибок и оптимизировать производительность

  1. Избегайте «запросов в цикле»: Всегда лучше заранее выбрать все необходимые данные одним запросом к регистру, используя ЛЕВОЕ СОЕДИНЕНИЕ, а затем заполнять параметры макета в цикле, просто обращаясь к выборке.
  2. Учитывайте несколько штрихкодов: У одной номенклатуры может быть несколько кодов (например, для разных упаковок). Используйте функции агрегации, такие как МАКСИМУМ(Штрихкод), если вам нужно гарантированно получить хотя бы один результат.
  3. Проверка данных: Перед выводом в макет всегда проверяйте, получены ли данные запросом. Если функция Выборка.Следующий() возвращает Ложь, значит, для данного товара штрихкод в системе не задан.
  4. Форматирование: Если ваша цель — не просто вывести цифры, а напечатать сам графический штрихкод, вам потребуется установить специальный шрифт (например, EAN-13) в свойствах ячейки макета. Простой вывод цифр в текстовое поле создаст обычный числовой ряд, который нельзя отсканировать сканером.

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

← На главную