Как правильно вывести штрихкод EAN13 в печатной форме 1С 7.7 и обеспечить его читаемость

Программист 1С v7.7 Торговля и дистрибуция
← На главную

При разработке печатных форм в среде 1С:Предприятие 7.7 программисты часто сталкиваются с проблемой, когда сформированный штрихкод (ШК) выглядит корректно на экране, но категорически отказывается считываться сканером. Особенно критично это становится при подготовке этикеток для таких маркетплейсов, как Wildberries, где требования к качеству печати и стандартам кодирования крайне высоки. В данной статье мы разберем, почему «простые» шрифты не работают сами по себе, как правильно использовать внешние компоненты и на какие технические нюансы следует обратить внимание в современных операционных системах.

Почему обычный шрифт не формирует валидный штрихкод

Рассмотрим ситуацию, с которой сталкивается большинство новичков: вы скачиваете шрифт типа EAN-13.ttf, устанавливаете его в систему, назначаете ячейке в таблице 1С этот шрифт и выводите туда 13 цифр кода. На экране появляются полоски, но сканер молчит. Проанализируем причину этой неудачи.

Стандарт EAN-13 — это не просто набор линий, соответствующих цифрам. Это сложная структура, состоящая из:

  1. Левой защитной зоны (две тонкие линии).
  2. Левой части данных (6 цифр), кодируемых по разным правилам (сеты A и B) в зависимости от первой цифры кода.
  3. Центрального разделителя (удлиненные линии в середине).
  4. Правой части данных (6 цифр), кодируемых по сету C.
  5. Правой защитной зоны.
  6. Контрольного числа (13-я цифра), которое рассчитывается по алгоритму.

Если вы просто выводите цифры шрифтом, вы получаете одинаковые по высоте риски, которые не соответствуют логике чередования темных и светлых полос разной толщины. Чтобы шрифт «заработал», строку перед выводом необходимо программно преобразовать в специальную последовательность символов (букв и знаков препинания), которые в данном шрифте отрисованы как правильные комбинации полос. Без функции-конвертера использование TTF-шрифтов бессмысленно.

Использование внешней компоненты 1C:BarCode (barcode.ocx)

Наиболее надежным и проверенным временем способом для платформы 1С 7.7 является использование компоненты barcode.ocx. Она поставлялась вместе с типовыми конфигурациями (например, «Торговля и Склад») и позволяет генерировать векторное изображение штрихкода непосредственно в таблице.

Рассмотрим алгоритм внедрения этой компоненты в вашу печатную форму:

  1. Регистрация компоненты: Файл barcode.ocx должен быть зарегистрирован в операционной системе. В современных 64-битных ОС (Windows 10, Server 2016) регистрацию нужно проводить через 32-битную версию regsvr32.exe. Путь к ней: C:\Windows\SysWOW64\regsvr32.exe.
  2. Вставка объекта в таблицу: Откройте печатную форму (таблицу) в конфигураторе. Перейдите в меню «Вставить» — «Объект». В списке должен появиться «1C:BarCode». Если его нет (частая проблема для новых ОС), воспользуйтесь обходным путем.
  3. Метод «Копипаста»: Откройте любую типовую обработку, где уже есть штрихкод (например, «Печать этикеток» в конфигурации ТиС). Скопируйте объект штрихкода из этой таблицы и вставьте в свою. Это самый стабильный метод, если объект не отображается в общем списке доступных для вставки.

Программное управление компонентой BarCode

После того как объект вставлен в таблицу, нам необходимо передать ему данные. Выясним, как это сделать через код. Допустим, у нашего объекта в таблице задан идентификатор ШтрихКод.


// Пример формирования штрихкода в печатной форме
ПечШК = "2000000123456"; // Ваш код EAN13
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Шапка");

// Обращаемся к объекту в таблице
ОбъектШК = Таб.ТекущийОбъект;
Если ТипЗначенияСтр(ОбъектШК) = "OCX" Тогда
    // Устанавливаем тип штрихкода (EAN13 обычно соответствует значению 1)
    ОбъектШК.ТипКода = 1; 
    ОбъектШК.Сообщение = ПечШК;
КонецЕсли;

Таб.Показать();

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

Решение проблемы через FormEx и генерацию картинок

Если работа с OCX-компонентами кажется вам нестабильной, проанализируем альтернативный вариант — использование внешней библиотеки FormEx или специализированных утилит типа Zint. Эти инструменты позволяют генерировать штрихкод как обычную картинку (BMP или PNG).

Посмотрим на логику работы через генерацию изображения:

  1. Программа вызывает внешнюю утилиту (через КомандаСистемы) и передает ей цифры штрихкода.
  2. Утилита сохраняет картинку во временную папку.
  3. В 1С в таблицу вставляется пустой объект «Картинка», в который методом Загрузить() подтягивается сгенерированный файл.

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

Требования к штрихкодам для Wildberries

Выясним, какие параметры критичны при печати кодов для маркетплейсов. Даже если вы успешно вывели полоски на печать, сканер на складе может их не принять по следующим причинам:

Рассмотрим подробнее программный расчет контрольной суммы для EAN13 на языке 1С 7.7:


Функция РассчитатьКонтрольныйСимволEAN13(Код12)
    Четные = 0; Нечетные = 0;
    Для х = 1 По 12 Цикл
        Цифра = Число(Сред(Код12, х, 1));
        Если х % 2 = 0 Тогда
            Четные = Четные + Цифра;
        Иначе
            Нечетные = Нечетные + Цифра;
        КонецЕсли;
    КонецЦикла;
    Сумма = Четные * 3 + Нечетные;
    Остаток = Сумма % 10;
    Если Остаток = 0 Тогда
        Возврат 0;
    Иначе
        Возврат 10 - Остаток;
    КонецЕсли;
КонецФункции

Подведем итог: для гарантированного результата в 1С 7.7 лучше всего использовать barcode.ocx, скопированный из типовой конфигурации, либо метод генерации ШК во внешнюю картинку. При использовании шрифтов обязательно внедряйте функцию преобразования строки, так как прямой вывод цифр не является валидным способом формирования штрихкода EAN13.

← На главную