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