При разработке печатных форм в среде 1С:Предприятие 7.7 программисты часто сталкиваются с проблемой, когда сформированный штрихкод (ШК) выглядит корректно на экране, но категорически отказывается считываться сканером. Особенно критично это становится при подготовке этикеток для таких маркетплейсов, как Wildberries, где требования к качеству печати и стандартам кодирования крайне высоки. В данной статье мы разберем, почему «простые» шрифты не работают сами по себе, как правильно использовать внешние компоненты и на какие технические нюансы следует обратить внимание в современных операционных системах.
Рассмотрим ситуацию, с которой сталкивается большинство новичков: вы скачиваете шрифт типа EAN-13.ttf, устанавливаете его в систему, назначаете ячейке в таблице 1С этот шрифт и выводите туда 13 цифр кода. На экране появляются полоски, но сканер молчит. Проанализируем причину этой неудачи.
Стандарт EAN-13 — это не просто набор линий, соответствующих цифрам. Это сложная структура, состоящая из:
Если вы просто выводите цифры шрифтом, вы получаете одинаковые по высоте риски, которые не соответствуют логике чередования темных и светлых полос разной толщины. Чтобы шрифт «заработал», строку перед выводом необходимо программно преобразовать в специальную последовательность символов (букв и знаков препинания), которые в данном шрифте отрисованы как правильные комбинации полос. Без функции-конвертера использование TTF-шрифтов бессмысленно.
Наиболее надежным и проверенным временем способом для платформы 1С 7.7 является использование компоненты barcode.ocx. Она поставлялась вместе с типовыми конфигурациями (например, «Торговля и Склад») и позволяет генерировать векторное изображение штрихкода непосредственно в таблице.
Рассмотрим алгоритм внедрения этой компоненты в вашу печатную форму:
barcode.ocx должен быть зарегистрирован в операционной системе. В современных 64-битных ОС (Windows 10, Server 2016) регистрацию нужно проводить через 32-битную версию regsvr32.exe. Путь к ней: C:\Windows\SysWOW64\regsvr32.exe.После того как объект вставлен в таблицу, нам необходимо передать ему данные. Выясним, как это сделать через код. Допустим, у нашего объекта в таблице задан идентификатор ШтрихКод.
// Пример формирования штрихкода в печатной форме
ПечШК = "2000000123456"; // Ваш код EAN13
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Шапка");
// Обращаемся к объекту в таблице
ОбъектШК = Таб.ТекущийОбъект;
Если ТипЗначенияСтр(ОбъектШК) = "OCX" Тогда
// Устанавливаем тип штрихкода (EAN13 обычно соответствует значению 1)
ОбъектШК.ТипКода = 1;
ОбъектШК.Сообщение = ПечШК;
КонецЕсли;
Таб.Показать();
Важный нюанс: В свойствах объекта в таблице (правой кнопкой мыши — «Свойства») на вкладке «Общие» убедитесь, что не стоит галочка «Прозрачный», если штрихкод не выводится на печать (печатается пустая рамка). Также проверьте, чтобы рамка объекта была достаточно широкой, иначе линии могут «слипнуться», и сканер не распознает код.
Если работа с OCX-компонентами кажется вам нестабильной, проанализируем альтернативный вариант — использование внешней библиотеки FormEx или специализированных утилит типа Zint. Эти инструменты позволяют генерировать штрихкод как обычную картинку (BMP или PNG).
Посмотрим на логику работы через генерацию изображения:
КомандаСистемы) и передает ей цифры штрихкода.Загрузить() подтягивается сгенерированный файл.Этот метод гарантирует, что штрихкод будет выглядеть одинаково на любом принтере и в любой операционной системе, так как он не зависит от системных шрифтов и регистрации библиотек в реестре.
Выясним, какие параметры критичны при печати кодов для маркетплейсов. Даже если вы успешно вывели полоски на печать, сканер на складе может их не принять по следующим причинам:
Рассмотрим подробнее программный расчет контрольной суммы для 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.