Как реализовать поиск электронного документа в 1С:УТ 11.4 по сгенерированному QR-коду?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В современных складских процессах использование штрихкодирования является стандартом де-факто. Однако классические линейные штрихкоды (например, Code-128) постепенно уступают место более компактным и информативным QR-кодам. Рассмотрим задачу вывода QR-кода на печатную форму «Расходного ордера на товары» с целью последующего быстрого поиска этого документа в информационной базе 1С:Управление торговлей 11.4.

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

Использование типовых механизмов штрихкодирования

В конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), к которым относится и УТ 11.4, основным инструментом для работы с графическими кодами является общий модуль ШтрихкодированиеПечатныхФорм. Проанализируем, почему стоит использовать именно его:

  1. Универсальность: Модуль инкапсулирует работу с внешней компонентой печати штрихкодов, избавляя разработчика от необходимости прямой манипуляции с объектами графики.
  2. Поддержка форматов: Несмотря на то что в типовых решениях часто по умолчанию используется Code-128, функции модуля позволяют без труда переключиться на тип QR.
  3. Стабильность: Использование стандартных процедур гарантирует, что при обновлении платформы или конфигурации логика формирования кода останется рабочей.

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


ПараметрыШтрихкода = ШтрихкодированиеПечатныхФорм.ПараметрыШтрихкода();
ПараметрыШтрихкода.ТипКода = 16; // Соответствует QR-коду
ПараметрыШтрихкода.Содержимое = Строка(СсылкаНаДокумент.УникальныйИдентификатор());
ПараметрыШтрихкода.Ширина = 100;
ПараметрыШтрихкода.Высота = 100;

РезультатШтрихкодирования = ШтрихкодированиеПечатныхФорм.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
Если РезультатШтрихкодирования.Результат Тогда
    Рисунок = ОбластьМакета.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
    Рисунок.Картинка = РезультатШтрихкодирования.Картинка;
КонецЕсли;

Что именно кодировать в QR-код?

Выясним, какие данные лучше всего поместить внутрь QR-кода для обеспечения надежного поиска. Рассмотрим три основных подхода:

1. Уникальный идентификатор (GUID). Это самый простой путь. Мы кодируем UUID ссылки документа. При сканировании система получает строку, которую легко преобразовать обратно в ссылку через метод Документы.РасходныйОрдерНаТовары.ПолучитьСсылку(Новый УникальныйИдентификатор(СчитаннаяСтрока)). Важный нюанс: если вы планируете использовать несколько типов документов, в коде нужно предусмотреть проверку принадлежности GUID конкретному метаданному.

2. Навигационная ссылка (e1cib). Рассмотрим более продвинутый вариант. В 1С существует понятие внутренней ссылки вида e1cib/data/Документ.РасходныйОрдерНаТовары?ref=.... Если закодировать именно её, то при использовании мобильного клиента или интеграции с внешними системами, 1С сможет открыть объект автоматически штатными средствами платформы.

3. Префиксы данных. Чтобы система могла отличить QR-код документа от QR-кода товара или маркировки «Честный Знак», профессионалы рекомендуют добавлять префикс. Например: DOC-RO-00001 или JSON-структуру: {"type":"doc","id":"..."}. Это позволит обработчику внешнего события мгновенно идентифицировать тип данных.

Настройка печати и устойчивость к повреждениям

Проанализируем технические требования к печати. QR-код выгодно отличается от линейных кодов тем, что поддерживает уровни коррекции ошибок (Error Correction Level). В условиях склада бумажные носители часто мнутся или загрязняются. Мы рекомендуем устанавливать уровень коррекции Q (25%) или H (30%) в настройках компоненты 1С:Печать штрихкодов. Это увеличит плотность точек, но позволит считать код даже при частичном повреждении.

Также важно следить за пропорциями. При выводе в ТабличныйДокумент убедитесь, что свойство рисунка «Размер» установлено в значение «Пропорционально». Искажение геометрии квадрата (превращение его в прямоугольник) сделает чтение кода невозможным для большинства сканеров.

Обработка сканирования и поиск объекта

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

Проанализируем алгоритм обработки считанных данных:

  1. Событие перехватывается модулем МенеджерОборудованияКлиент.
  2. Данные передаются в обработчик оповещения.
  3. Программа анализирует префикс или длину строки. Если это GUID, выполняется поиск.

Пример реализации поиска в обработке оповещения:


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

Почему QR-код лучше в данном контексте?

Подводя итог, выделим преимущества, которые мы получим при использовании QR вместо стандартного для 1С Code-128:

Таким образом, реализация поиска по QR-коду в 1С:УТ 11.4 — это эффективное решение, которое легко реализуется с помощью типового общего модуля ШтрихкодированиеПечатныхФорм и стандартных механизмов работы с уникальными идентификаторами объектов.

← На главную