Как настроить создание и печать штрихкодов в 1С 7.7: подробное руководство

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

Несмотря на то что платформа 1С:Предприятие 7.7 давно снята с активной поддержки, множество предприятий продолжают успешно использовать её для ведения учета, торговли и складских операций. Одной из наиболее частых задач в таких системах является генерация и печать штрихкодов. Будь то стандартный товарный код EAN-13, внутренний Code 128 или современные двухмерные коды вроде QR и DataMatrix (для маркировки «Честный Знак»), программисту приходится искать надежные технические решения.

В этой статье мы подробно разберем все доступные способы интеграции штрихкодов в 1С 7.7, проанализируем сильные и слабые стороны каждого метода и рассмотрим практические примеры программного кода.

Способ №1: Классический метод с использованием ActiveX-компоненты BARCODE.OCX

Этот способ является стандартным для типовых конфигураций (например, «Торговля и Склад 7.7»). Он основан на использовании специализированной библиотеки BARCODE.OCX, разработанной фирмой 1С. Компонента позволяет визуализировать штрихкод непосредственно в печатной форме (таблице) 1С.

Рассмотрим по шагам процесс установки и настройки этой компоненты:

  1. Размещение файла компоненты. Скопируйте файл BARCODE.OCX в системную папку Windows или в каталог базы данных. Традиционно его размещают в папке платформы (например, в BIN) или в каталог C:\Windows\System32.
  2. Регистрация в операционной системе. Это критически важный шаг, на котором часто совершают ошибки. На современных 64-разрядных операционных системах (Windows 10, 11, Windows Server) 32-битную компоненту необходимо регистрировать через утилиту из папки SysWOW64, а не System32. Запустите командную строку от имени Администратора и выполните следующую команду: C:\Windows\SysWOW64\regsvr32.exe "C:\PathToBin\BARCODE.OCX" Если регистрация прошла успешно, операционная система выдаст соответствующее уведомление.
  3. Интеграция в макет 1С 7.7. Откройте макет вашей печатной формы в конфигураторе. Выберите пункт меню «Таблица» -> «Вставить объект». В открывшемся списке выберите элемент «1C:BarCode». Нажмите кнопку «ОК». На листе макета появится графический прямоугольник со штрихкодом.
  4. Программное управление объектом. Чтобы передать значение штрихкода в этот объект во время формирования печатной формы, нам потребуется обратиться к его свойствам через атрибут ТекущийОбъект.

Проанализируем пример кода для вывода штрихкода с использованием ActiveX-компоненты:


Процедура ПечатьЭтикетки()
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Этикетка");
    
    // Получаем значение кода из карточки товара
    ТекКод = СокрЛП(ТекущийЭлемент().Штрихкод);
    
    Если ПустаяСтрока(ТекКод) = 0 Тогда
        Таб.ВывестиСекцию("СтрокаШтрихкода");
        
        // Обращаемся к объекту ActiveX, расположенному в выведенной секции
        Попытка
            Таб.ТекущийОбъект.Text = ТекКод;
            // Установка типа штрихкода (например, 1 - это EAN-13)
            Таб.ТекущийОбъект.ConnectionType = 1;
        Исключение
            Сообщить("Ошибка обращения к ActiveX компоненте BARCODE.OCX! Проверьте ее регистрацию.", "!");
        КонецПопытки;
    КонецЕсли;
    
    Таб.Показать("Печать этикеток");
КонецПроцедуры

Способ №2: Печать штрихкодов с помощью специализированных шрифтов

Если вы не хотите зависеть от внешних библиотек и их регистрации в реестре 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, для которой в свойствах установлен шрифт штрихкода. Сканеры будут без проблем считывать такой код с распечатанного листа.

Способ №3: Использование бесплатного консольного генератора Zint

Что делать, если перед вами стоит задача сформировать сложный двухмерный код (например, QR-код для приема платежей по СБП или DataMatrix для маркировки товаров)? Стандартная компонента BARCODE.OCX этого делать не умеет, а работа со шрифтами для 2D-кодов практически невозможна из-за сложнейшей структуры кодирования.

В этой ситуации лучшим решением является использование консольной утилиты Zint (файл zint.exe). Схема работы выглядит следующим образом:

  1. Из кода 1С вызывается внешняя утилита с параметрами командной строки (тип штрихкода, значение, имя выходного графического файла).
  2. Утилита мгновенно генерирует картинку (BMP, PNG) в фоновом режиме.
  3. 1С загружает полученную картинку в стандартный графический объект на макете и выводит её на печать.

Рассмотрим пример реализации этого современного метода в коде 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!", "!");
    КонецЕсли;
КонецПроцедуры

Способ №4: Альтернативные внешние компоненты

Для разработчиков, которые предпочитают более тесную интеграцию без вызова сторонних консольных программ, существуют специализированные внешние компоненты:

Резюме и рекомендации

Выбор конкретного метода генерации штрихкода в 1С 7.7 зависит от ваших бизнес-задач:

  1. Если вам необходимо печатать простые товарные этикетки EAN-13 на рабочих станциях с одинаковой операционной системой, классический способ с BARCODE.OCX или использование специализированных шрифтов станет самым простым и логичным выбором.
  2. Если система развернута в терминальном режиме (RDP) на современном сервере, где регистрация старых ActiveX-компонент затруднена из-за политик безопасности, оптимальным решением будет внедрение шрифтов.
  3. Для решения задач государственной маркировки (Честный Знак, ЕГАИС) и внедрения СБП используйте связку платформы 1С 7.7 с утилитой Zint или внешней компонентой StrokeScribe. Это гарантирует формирование корректных 2D-кодов, которые легко распознаются любыми современными 2D-сканерами.
← На главную