Несмотря на то что платформа 1С:Предприятие 7.7 давно снята с активной поддержки, множество предприятий продолжают успешно использовать её для ведения учета, торговли и складских операций. Одной из наиболее частых задач в таких системах является генерация и печать штрихкодов. Будь то стандартный товарный код EAN-13, внутренний Code 128 или современные двухмерные коды вроде QR и DataMatrix (для маркировки «Честный Знак»), программисту приходится искать надежные технические решения.
В этой статье мы подробно разберем все доступные способы интеграции штрихкодов в 1С 7.7, проанализируем сильные и слабые стороны каждого метода и рассмотрим практические примеры программного кода.
Этот способ является стандартным для типовых конфигураций (например, «Торговля и Склад 7.7»). Он основан на использовании специализированной библиотеки BARCODE.OCX, разработанной фирмой 1С. Компонента позволяет визуализировать штрихкод непосредственно в печатной форме (таблице) 1С.
Рассмотрим по шагам процесс установки и настройки этой компоненты:
BARCODE.OCX в системную папку Windows или в каталог базы данных. Традиционно его размещают в папке платформы (например, в BIN) или в каталог C:\Windows\System32.SysWOW64, а не System32. Запустите командную строку от имени Администратора и выполните следующую команду:
C:\Windows\SysWOW64\regsvr32.exe "C:\PathToBin\BARCODE.OCX"
Если регистрация прошла успешно, операционная система выдаст соответствующее уведомление.ТекущийОбъект.Проанализируем пример кода для вывода штрихкода с использованием ActiveX-компоненты:
Процедура ПечатьЭтикетки()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Этикетка");
// Получаем значение кода из карточки товара
ТекКод = СокрЛП(ТекущийЭлемент().Штрихкод);
Если ПустаяСтрока(ТекКод) = 0 Тогда
Таб.ВывестиСекцию("СтрокаШтрихкода");
// Обращаемся к объекту ActiveX, расположенному в выведенной секции
Попытка
Таб.ТекущийОбъект.Text = ТекКод;
// Установка типа штрихкода (например, 1 - это EAN-13)
Таб.ТекущийОбъект.ConnectionType = 1;
Исключение
Сообщить("Ошибка обращения к ActiveX компоненте BARCODE.OCX! Проверьте ее регистрацию.", "!");
КонецПопытки;
КонецЕсли;
Таб.Показать("Печать этикеток");
КонецПроцедуры
Если вы не хотите зависеть от внешних библиотек и их регистрации в реестре Windows, отличным решением станет использование шрифтов TrueType (файлы с расширением .ttf). Этот метод работает чрезвычайно быстро и стабильно, поскольку операционная система воспринимает штрихкод как обычный текст, просто отображаемый специфическими символами.
Для простых линейных кодов, таких как Code 39, этот метод реализуется элементарно. Вам достаточно установить в операционную систему шрифт (например, Code39.ttf), а в ячейке таблицы 1С, где должен выводиться код, выбрать этот шрифт. Единственное требование формата Code 39 — кодируемая строка должна быть обрамлена звездочками с обеих сторон (например, "*12345*").
С популярным форматом EAN-13 ситуация сложнее. Просто применить шрифт к строке цифр нельзя, поскольку стандарт EAN-13 требует расчета контрольной суммы (13-й символ) и преобразования исходных цифр в специальные буквенные символы левой и правой частей кода. Разберем алгоритм расчета контрольной суммы и подготовки строки для шрифта EAN-13:
Функция СформироватьСтрокуДляШрифтаEAN13(ИсходныйКод12)
// Функция ожидает на вход 12 цифр штрихкода
Если СтрДлина(ИсходныйКод12) <> 12 Тогда
Возврат "";
КонецЕсли;
// Вычисляем контрольный 13-й символ по алгоритму EAN
Четные = 0;
Нечетные = 0;
Для х = 1 По 12 Цикл
Цифра = Число(Сред(ИсходныйКод12, х, 1));
Если х % 2 = 0 Тогда
Четные = Четные + Цифра;
Иначе
Нечетные = Нечетные + Цифра;
КонецЕсли;
КонецЦикла;
Сумма = Четные * 3 + Нечетные;
Остаток = Сумма % 10;
КонтрольныйСимвол = ?(Остаток = 0, 0, 10 - Остаток);
ПолныйКод = ИсходныйКод12 + Строка(КонтрольныйСимвол);
// Далее пишется алгоритм преобразования строки цифр в символы
// в соответствии со спецификацией используемого шрифта EAN13.ttf.
// Каждой цифре в зависимости от ее позиции сопоставляется буква.
ПреобразованнаяСтрока = ПреобразоватьПоТаблицеШрифта(ПолныйКод);
Возврат ПреобразованнаяСтрока;
КонецФункции
После получения преобразованной строки мы выводим её в ячейку таблицы 1С 7.7, для которой в свойствах установлен шрифт штрихкода. Сканеры будут без проблем считывать такой код с распечатанного листа.
Что делать, если перед вами стоит задача сформировать сложный двухмерный код (например, QR-код для приема платежей по СБП или DataMatrix для маркировки товаров)? Стандартная компонента BARCODE.OCX этого делать не умеет, а работа со шрифтами для 2D-кодов практически невозможна из-за сложнейшей структуры кодирования.
В этой ситуации лучшим решением является использование консольной утилиты Zint (файл zint.exe). Схема работы выглядит следующим образом:
Рассмотрим пример реализации этого современного метода в коде 1С 7.7:
Процедура СгенерироватьИВывести2DКод(ТекстКода)
ПутьКZint = КаталогИБ() + "ExtFiles\zint.exe";
ИмяФайлаКартинки = КаталогВременныхФайлов() + "qr_temp.png";
// Формируем параметры запуска.
// Параметр -b 58 задает генерацию QR-кода (для DataMatrix используется код 71)
КомандаЗапуска = """" + ПутьКZint + """ -b 58 -d """ + ТекстКода + """ -o """ + ИмяФайлаКартинки + """";
// Запускаем через Windows Script Host в скрытом режиме с ожиданием завершения
WshShell = СоздатьОбъект("WScript.Shell");
КодВозврата = WshShell.Run(КомандаЗапуска, 0, 1);
Если КодВозврата = 0 Тогда
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("МакетСКартинкой");
Таб.ВывестиСекцию("Шапка");
// Позиционируемся на объекте рисунка и загружаем картинку
Попытка
Таб.ТекущийОбъект.Загрузить(ИмяФайлаКартинки);
Исключение
Сообщить("Не удалось загрузить картинку в макет!", "!");
КонецПопытки;
Таб.Показать("Печать QR-кода");
Иначе
Сообщить("Ошибка при генерации штрихкода утилитой Zint!", "!");
КонецЕсли;
КонецПроцедуры
Для разработчиков, которые предпочитают более тесную интеграцию без вызова сторонних консольных программ, существуют специализированные внешние компоненты:
BARCODE.OCX, но предоставляет значительно больше возможностей.FNC1 и разделители групп данных GS), что крайне важно для успешного прохождения проверок на кассовом оборудовании.Выбор конкретного метода генерации штрихкода в 1С 7.7 зависит от ваших бизнес-задач:
BARCODE.OCX или использование специализированных шрифтов станет самым простым и логичным выбором.Zint или внешней компонентой StrokeScribe. Это гарантирует формирование корректных 2D-кодов, которые легко распознаются любыми современными 2D-сканерами.