Как сгенерировать штрихкод или QR-код в мобильном приложении 1С:Предприятие

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Вопрос генерации графических кодов (EAN-13, QR-код, Code128 и др.) в мобильной среде 1С часто встает перед разработчиками, когда необходимо обеспечить автономную работу складских или торговых приложений. В отличие от настольной версии, мобильная платформа имеет свои ограничения по использованию внешних компонент (ActiveX недоступны), однако современные инструменты позволяют решить эту задачу эффективно. Рассмотрим основные способы реализации этого функционала, начиная от штатных средств и заканчивая программной отрисовкой.

Способ 1. Использование встроенного метода «РисоватьШтрихкод» в табличном документе

Начиная с версии платформы 8.3.10, разработчики 1С значительно упростили жизнь программистам, добавив встроенную поддержку генерации штрихкодов. Этот метод работает и в мобильном клиенте, и в мобильном приложении. Основное преимущество — полная автономность и отсутствие необходимости в сторонних библиотеках.

Проанализируем процесс создания кода через объект ТабличныйДокумент. Мы можем программно создать рисунок на листе табличного документа и установить его тип как штрихкод. Разберем пример кода:


// Создаем новый табличный документ
ТабДок = Новый ТабличныйДокумент;

// Добавляем рисунок типа Штрихкод
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Штрихкод);
Рисунок.Текст = "4601234567890"; // Значение кода
Рисунок.ТипШтрихкода = ТипШтрихкода.EAN13;
Рисунок.ОтображатьТекст = Истина;

// Устанавливаем размеры (в мм)
Рисунок.Верх = 0;
Рисунок.Лево = 0;
Рисунок.Ширина = 50;
Рисунок.Высота = 30;

// Теперь изображение можно вывести в поле на форме или сохранить

Этот метод поддерживает наиболее популярные форматы: EAN8, EAN13, Code39, Code128 и QR. Важно помнить, что результат работы метода — это графический объект внутри табличного документа. Если вам нужно просто показать код на экране, достаточно разместить ПолеТабличногоДокумента на форме.

Способ 2. Использование механизмов Библиотеки подключаемого оборудования (БПО)

Если вы разрабатываете решение на базе типовой конфигурации (например, «1С:УНФ» или «1С:Розница»), в вашем распоряжении уже есть готовые механизмы. В составе БПО существуют общие модули, предназначенные специально для мобильной печати.

Проанализируем ситуацию, описанную в обсуждении: использование модуля МенеджерОборудованияКлиент. В мобильных конфигурациях, таких как «Мобильная касса», реализована логика формирования текстовых команд для принтеров чеков, которые платформа умеет интерпретировать и преобразовывать в изображение.

Пример формирования текста для печати или отображения:


ТекстДляПечати = "";
ТекстДляПечати = ТекстДляПечати + "|ШтрихКод|QR|" + "https://1c.ru";
// Далее этот текст передается в метод печати БПО
МенеджерОборудованияКлиент.ВыполнитьПечатьТекста(Команда, ТекстДляПечати);

Этот подход удобен тем, что логика формирования корректных контрольных сумм (например, для EAN-13) уже заложена в модулях библиотеки. Выясним причину популярности этого метода: он стандартизирован и гарантирует корректное считывание сканерами.

Способ 3. Генерация через HTML и JavaScript (Offline-метод)

Когда требуется гибкое управление визуализацией кода (например, изменение цвета, стилизация QR-кода) непосредственно в интерфейсе формы, отличным решением станет использование поля HTML-документа. Мобильная платформа 1С отлично работает с JavaScript, что позволяет генерировать коды на стороне клиента без обращения к серверу.

Рассмотрим по шагам, как это реализовать:

  1. Скачайте легковесную JS-библиотеку (например, JsBarcode для линейных кодов или qrcode.js для QR-кодов).
  2. Сохраните текст библиотеки в макет конфигурации (тип макета — Текст или Двоичные данные).
  3. Сформируйте HTML-шаблон, который будет принимать данные из 1С и отрисовывать код.

Посмотрим на пример формирования HTML-строки:


ТекстБиблиотеки = ПолучитьМакет("qrcode_js").ПолучитьТекст();
ДанныеКода = "Hello from 1C Mobile";

HTML_Код = "
|<html>
|<head>
|    <script>" + ТекстБиблиотеки + "</script>
|</head>
|<body>
|    <div id='qrcode'></div>
|    <script>
|        new QRCode(document.getElementById('qrcode'), '" + ДанныеКода + "');
|    </script>
|</body>
|</html>";

ЭтаФорма.ПолеHTML = HTML_Код;

Данный метод работает молниеносно, не требует интернет-соединения и позволяет отображать штрихкод в любом месте формы, где есть контейнер для HTML.

Способ 4. Использование внешних HTTP-сервисов (Online-метод)

Если наличие интернета на мобильном устройстве гарантировано, можно пойти по пути наименьшего сопротивления и использовать облачные API для генерации изображений. Одним из самых известных является Google Charts API.

Разберем ситуацию, когда нам нужно получить картинку QR-кода одной командой:


// Настройка соединения
Соединение = Новый HTTPСоединение("chart.googleapis.com",,,,,Новый ЗащищенноеСоединениеOpenSSL());

// Параметры запроса: chs (размер), cht (тип - qr), chl (данные)
ПутьКЗапросу = "chart?chs=300x300&cht=qr&chl=" + ДанныеДляКодирования;
Запрос = Новый HTTPЗапрос(ПутьКЗапросу);

// Получение ответа
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
    КартинкаШтрихкода = Ответ.ПолучитьТелоКакДвоичныеДанные();
    // Теперь картинку можно записать в реквизит с типом СправочникСсылка.Картинка или вывести на форму
КонецЕсли;

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

Способ 5. Алгоритмическая отрисовка в Табличном документе

Для энтузиастов и в случаях жестких ограничений (например, старые версии платформы без РисоватьШтрихкод), существует метод «ручной» отрисовки. Мы знаем, что штрихкод — это последовательность черных и белых полос определенной ширины.

Проанализируем алгоритм:

  1. Рассчитываем двоичную последовательность штрихов по спецификации (например, для EAN-13).
  2. Создаем табличный документ, где ширина колонок устанавливается в минимально возможное значение (например, 0.1 мм).
  3. Проходим циклом по нашей последовательности: если «1» — закрашиваем колонку черным цветом фона, если «0» — оставляем белой.

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

Выводы и рекомендации

При выборе способа генерации ориентируйтесь на следующие критерии:

Таким образом, генерация штрихкодов в мобильном приложении 1С сегодня — это не «мечты», а повседневная реальность, имеющая множество надежных инструментов реализации.

← На главную