При разработке систем складского учета или маркировки в 1С часто возникает задача массовой печати штрихкодов. Использование внешних компонент для генерации графических изображений штрихкодов удобно, но при больших объемах (от 500-1000 этикеток) процесс формирования табличного документа может занимать значительное время — иногда до нескольких минут. Переход на использование специализированных шрифтов (например, Code 128 TTF) позволяет ускорить печать в десятки раз, так как принтеру передается не тяжелая картинка, а текстовая строка. Однако простое изменение шрифта в ячейке 1С не приведет к желаемому результату: сканер не сможет прочитать такой код. Разберем по шагам, как правильно реализовать эту задачу.
Выясним причину основной ошибки новичков. Штрихкод Code 128 — это не прямая замена цифр на «палочки». Это сложный стандарт, который включает в себя:
Modulo 103. Сканер проверяет целостность данных, и если контрольное число не совпадает, код игнорируется.Проанализируем ситуацию: если вы просто напишете в ячейке «229000...» и выберете шрифт Code128, вы увидите полоски, но они не будут содержать ни стартового символа, ни контрольной суммы. Для сканера это будет просто набор «мусора».
Для того чтобы шрифт отобразился корректно, нам необходимо программно подготовить строку. Рассмотрим процесс формирования строки для набора Subset C, который идеально подходит для чисто цифровых данных (как в примере автора: 2290000000001). Этот набор кодирует две цифры одним символом шрифта, что делает штрихкод очень компактным.
Разберем этапы формирования строки:
Посмотрим на пример логики функции преобразования (псевдокод):
Функция СформироватьСтрокуCode128(ИсходныеДанные)
ПеременнаяРезультат = СимволСтартаC; // Например, Символ(211)
КонтрольнаяСумма = ЗначениеСтартаC;
Для Индекс = 1 По СтрДлина(ИсходныеДанные) / 2 Цикл
ПараЦифр = Сред(ИсходныеДанные, (Индекс-1)*2 + 1, 2);
ЧисловоеЗначение = Число(ПараЦифр);
// Добавляем символ в строку
ПеременнаяРезультат = ПеременнаяРезультат + ПолучитьСимволПоКоду(ЧисловоеЗначение);
// Считаем контрольную сумму по алгоритму Modulo 103
КонтрольнаяСумма = КонтрольнаяСумма + (ЧисловоеЗначение * Индекс);
КонецЦикла;
СимволКонтрольнойСуммы = ПолучитьСимволПоКоду(КонтрольнаяСумма % 103);
Возврат ПеременнаяРезультат + СимволКонтрольнойСуммы + СимволСтопа;
КонецФункции
Даже при правильном алгоритме формирования строки, сканер может не считывать код из-за настроек макета 1С или принтера. Проанализируем важные моменты:
1. «Тихие зоны» (Quiet Zones): Штрихкод должен иметь пустые белые поля слева и справа. Если штрихи упираются в рамку ячейки или соседний текст, сканер не сможет их распознать. Рекомендуется добавлять несколько пробелов обычным шрифтом по краям от штрихкода в макете.
2. Масштабирование в 1С: В свойствах ячейки табличного документа параметр РазмещениеТекста должен быть установлен в значение Переносить или Авто, но крайне важно избегать настройки Размещать (сжатие), так как это искажает пропорции тонких и толстых линий. Штрихкод должен выводиться с фиксированным размером (например, 24 или 36 пунктов).
3. Сглаживание и антиалиасинг: При печати через драйвер принтера убедитесь, что отключены функции улучшения текста или сглаживания. Любое размытие краев штрихов превращает черный и белый цвета в оттенки серого, что делает код нечитаемым для лазерного сканера.
Рассмотрим метод проверки без использования принтера. Если вы сформировали строку, скопируйте её из отладчика 1С и вставьте в обычный Блокнот (Notepad). Выделите строку и примените к ней установленный в системе шрифт Code 128. Если ваш сканер поддерживает считывание с экрана монитора, попробуйте считать код. Если с монитора читается, а с бумаги нет — проблема в качестве печати или масштабировании макета. Если не читается даже с экрана — ошибка в алгоритме формирования контрольной суммы или стартовых/стоповых символов.
Важное замечание: Разные файлы шрифтов (например, code128.ttf от разных разработчиков) могут иметь разные карты символов. Всегда используйте алгоритм преобразования, предназначенный именно для вашего файла шрифта. Чаще всего в сообществе 1С используют шрифты, где стартовые символы и контрольные суммы вынесены в расширенную таблицу ASCII (символы с кодами 192–255).
Таким образом, переход на шрифтовую печать — это отличный способ оптимизировать быстродействие системы, если уделить должное внимание математической подготовке выводимой строки.