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

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

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

Анализ структуры данных и постановка задачи

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

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

Способ 1: Создание внешней печатной формы (рекомендуемый)

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

  1. Выгрузка стандартного макета: Откроем конфигуратор, найдем документ УстановкаЦенНоменклатуры, перейдем на вкладку «Макеты» и сохраним стандартную печатную форму во внешний файл .ert или .mxl (или создадим новую внешнюю обработку).
  2. Модификация макета: В макете добавим новую колонку «Штрихкод». Назначим области (строке) новый параметр, например, ШтрихкодТекстом.
  3. Написание запроса к данным: В модуле обработки нам необходимо изменить алгоритм формирования таблицы. Разберем пример кода для получения штрихкода по конкретной номенклатуре:

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

Проанализируем этот код: мы используем конструкцию ВЫБРАТЬ ПЕРВЫЕ 1, чтобы избежать дублирования строк, если у товара несколько кодов. В реальной задаче желательно добавить условие по единице измерения, чтобы сканер находил именно ту упаковку, цена на которую установлена в документе.

Способ 2: Использование расширений конфигурации (для платформы 8.3)

Если ваша база работает на платформе 8.3, даже при использовании «обычных форм», можно задействовать механизм расширений. Это позволит добавить колонку прямо в экранную форму документа, чтобы продавцы видели штрихкод в интерфейсе 1С.

Разберем, как это сделать:

  1. Создадим новое расширение и добавим в него документ УстановкаЦенНоменклатуры.
  2. В расширении добавим новую колонку в табличную часть «Товары» (тип: Строка).
  3. В модуле формы документа перехватим событие ПриВыводеСтроки (для обычных форм) или воспользуемся обработчиком ПриЧтенииНаСервере для заполнения данных.

Посмотрим на пример кода для обработчика ПриВыводеСтроки:


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

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

Способ 3: Вывод графического штрихкода для сканирования

Если задача стоит именно в том, чтобы «пикать» сканером в лист бумаги, недостаточно просто вывести цифры (например, 4601234567890). Сканер не считывает текст, ему нужна графическая «зебра». Выясним, что для этого требуется:

Во-первых, в макет печатной формы нужно вставить объект Рисунок с типом 1С:Печать штрихкодов. Если эта компонента не установлена на компьютере, система выдаст ошибку.

Во-вторых, необходимо программно передать значение штрихкода в этот объект при выводе каждой строки. Рассмотрим пример логики:


ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
// Заполняем текстовые параметры
ОбластьСтрока.Параметры.Товар = ТекущаяСтрока.Номенклатура;
ОбластьСтрока.Параметры.Цена = ТекущаяСтрока.Цена;

// Работаем с графическим объектом штрихкода
РисунокШтрихкод = ОбластьСтрока.Рисунки.Штрихкод;
РисунокШтрихкод.Объект.Сообщение = ПолучитьШтрихкодТовара(ТекущаяСтрока.Номенклатура);
РисунокШтрихкод.Объект.ТипКода = 1; // Например, EAN13

ТабДок.Вывести(ОбластьСтрока);

Совет: Если установка компоненты 1C:BarCode на все компьютеры затруднительна, можно использовать специализированные шрифты, такие как EAN13.ttf. В этом случае штрихкод выводится в обычную ячейку как текст, но для этой ячейки устанавливается данный шрифт. Это значительно упрощает поддержку решения.

Альтернативные варианты решения

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

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

← На главную