Как реализовать печать QR-кодов на платформе 1С 8.1

Программист IT и автоматизация бизнеса
← На главную

Реализация печати QR-кодов на устаревшей платформе 1С:Предприятие 8.1 является нетривиальной задачей. Основная сложность заключается в том, что современные компоненты от фирмы «1С» и сторонних разработчиков чаще всего создаются с использованием технологии NativeAPI, которую версия 8.1 полноценно не поддерживает. В те времена основным стандартом взаимодействия были технологии COM и ActiveX. В этой статье мы подробно разберем несколько проверенных способов внедрения QR-кодирования в конфигурации на базе 8.1, проанализируем их плюсы и минусы, а также изучим программные примеры реализации.

Метод 1: Использование библиотеки Zint (консольная утилита)

Одним из самых надежных и бесплатных способов является использование генератора штрихкодов Zint. Поскольку это внешнее приложение, нам не нужно регистрировать сложные библиотеки в реестре Windows, достаточно вызвать исполняемый файл с нужными параметрами. Рассмотрим этот процесс подробнее.

Суть метода заключается в том, что 1С формирует текстовую строку, вызывает zint.exe, которая сохраняет изображение QR-кода во временный файл, а затем 1С загружает эту картинку в макет отчета. Разберем программную реализацию:


// Определим пути к утилите и временному файлу
ПутьКZint = "C:\Zint\zint.exe";
ПутьККартинке = КаталогВременныхФайлов() + "qrcode.png";
ТекстДляКодирования = "https://example.com/check/12345";

// Формируем строку запуска для консоли
// -o определяет путь к выходному файлу, -d — данные для кодирования
// --barcode=58 указывает на тип QR-код
СтрокаЗапуска = """" + ПутьКZint + """ -o """ + ПутьККартинке + """ -b 58 -d """ + ТекстДляКодирования + """";

// Вызываем выполнение системной команды
КомандаСистемы(СтрокаЗапуска);

// После выполнения проверяем наличие файла и загружаем его в макет
ФайлКартинки = Новый Файл(ПутьККартинке);
Если ФайлКартинки.Существует() Тогда
    КартинкаQR = Новый Картинка(ПутьККартинке);
    // Здесь код по выводу картинки в ТабличныйДокумент
КонецЕсли;

Преимущества: Полная бесплатность, отсутствие необходимости регистрации DLL, поддержка огромного количества форматов штрихкодов.

Метод 2: Использование специализированных ActiveX-компонент (Ocvita)

Если требуется более тесная интеграция без вызова внешних окон и создания временных файлов, проанализируем использование профессиональных библиотек, таких как Ocvita Barcode. Это COM-объект, который специально создавался для работы в среде 1С старых версий.

Для работы с этим методом необходимо зарегистрировать dll в системе (через regsvr32). После регистрации мы можем обращаться к компоненте напрямую из кода 1С:


Попытка
    КомпонентаQR = Новый COMОбъект("OcvitaBarcode.Barcode.1");
Исключение
    Сообщить("Компонента Ocvita не зарегистрирована в системе!");
    Возврат;
КонецПопытки;

// Настройка параметров кода
КомпонентаQR.BarcodeType = 16; // Константа для QR-кода
КомпонентаQR.Text = "Данные для QR";
КомпонентаQR.Width = 300;
КомпонентаQR.Height = 300;

// Получение картинки напрямую или сохранение
КомпонентаQR.SaveToFile(КаталогВременныхФайлов() + "qr.bmp");

Этот метод считается наиболее "чистым" с точки зрения программирования, так как мы работаем с объектом внутри памяти приложения.

Метод 3: Трансляция NativeAPI в COM (решение для продвинутых)

Существует интересное решение, позволяющее использовать современные компоненты, предназначенные для 1С 8.2 и 8.3, в среде 8.1. Для этого применяется специальная "обертка" (враппер), которая транслирует вызовы COM в NativeAPI. Это позволяет взять стандартную компоненту 1CBarCode из последних версий БП или УТ и запустить ее на 8.1.

Рассмотрим ситуацию: у нас есть макет от версии 8.2, где внутри лежит ZIP-архив с компонентой. Нам нужно извлечь файл .dll, зарегистрировать его через враппер и обращаться к нему как к обычному COM-объекту через Новый COMОбъект.

Метод 4: Генерация через Web-API (без установки ПО)

Если на компьютерах пользователей есть стабильный доступ в интернет, мы можем переложить задачу генерации кода на внешние сервисы. Проанализируем, как отправить запрос и получить результат, используя объект HTTPСоединение.

Выясним последовательность действий:

  1. Формируем URL с параметрами кодирования (текст, размер, уровень коррекции ошибок).
  2. Используем HTTPСоединение для отправки GET-запроса.
  3. Получаем тело ответа в виде двоичных данных и сохраняем как картинку.

Сервер = "api.qrserver.com";
Ресурс = "/v1/create-qr-code/?size=150x150&data=" + СокрЛП(ТекстКода);

Соединение = Новый HTTPСоединение(Сервер);
ВременныйФайл = ПолучитьИмяВременногоФайла("png");

Попытка
    Соединение.Получить(Ресурс, ВременныйФайл);
    КартинкаОбъект = Новый Картинка(ВременныйФайл);
    // Вывод в табличный документ
Исключение
    Сообщить("Ошибка связи с сервером генерации QR-кода");
КонецПопытки;

Важный момент: При использовании этого метода данные передаются на сторонний сервер. Если вы кодируете конфиденциальную информацию (например, персональные данные или ключи доступа), этот метод может быть неприемлем по соображениям безопасности.

Метод 5: Использование HTML-поля и JavaScript

Платформа 8.1 поддерживает элемент управления Поле HTML-документа. Мы можем поместить на форму или в скрытую область макета HTML-код, содержащий JavaScript-библиотеку (например, qrcode.js). Библиотека сгенерирует SVG или Canvas с кодом, который затем можно извлечь или распечатать.

Разберем, как это работает: 1С передает текст в функцию JS, скрипт отрисовывает код в браузере (движок IE, встроенный в Windows), и мы получаем готовое изображение. Плюс этого метода в том, что он полностью автономен и не требует регистрации внешних DLL в реестре системы, что часто запрещено политиками безопасности в крупных организациях.

Рекомендации по выбору решения

Выбор конкретного пути зависит от ваших условий эксплуатации:

  1. Если вам нужно бесплатное и надежное решение для локальной сети — выбирайте Zint. Это "золотой стандарт" для старых систем.
  2. Если важна скорость и отсутствие временных файлов — используйте Ocvita или другие ActiveX-компоненты.
  3. Если разработка должна быть максимально быстрой и есть интернет — Web-API будет самым коротким путем.

При выводе QR-кода в печатную форму помните, что размер картинки должен быть достаточным для считывания сканером (обычно не менее 20x20 мм), а вокруг кода обязательно должна быть "тихая зона" (белое поле) шириной в несколько модулей самого кода. Проанализируйте настройки масштабирования рисунка в макете 1С: лучше всего использовать режим Реальный размер или Пропорционально, чтобы избежать искажения геометрии квадратов кода.

← На главную