Почему QR-код с несколькими значениями не сканируется в 1С и как это исправить?

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

Часто при автоматизации складских процессов возникает задача кодирования в одном QR-коде сразу нескольких параметров, например, артикула и кода номенклатуры. Однако на практике программисты сталкиваются с тем, что сканер либо не считывает код, либо 1С некорректно обрабатывает полученную строку. Давайте разберем, как правильно подойти к этой задаче и на что стоит обратить внимание.

Диагностика проблемы: проверка оборудования

Прежде чем менять алгоритм кодирования, необходимо исключить аппаратные ошибки. Если ваш ТСД (терминал сбора данных) не «видит» код, выполните следующие шаги:

  1. Откройте любой текстовый редактор (например, «Блокнот» на ТСД) и отсканируйте код. Если текст отображается корректно, значит, проблема не в самом сканере и не в физическом качестве печати QR-кода.
  2. Проверьте, не блокируется ли ввод данных настройками самой конфигурации 1С.
  3. Если в 1С данные приходят, но система не находит товар, значит, проблема кроется в алгоритме обработки события считывания.

Решение проблемы с кодировкой

Как показывает практика, одной из самых частых причин сбоев является использование кириллических символов при генерации QR-кода. Если в данных присутствует русский текст, сканер может передавать их в 1С в неверной кодировке (например, вместо «Товар» приходят «кракозябры»).

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

Правильная передача нескольких значений

Когда вам нужно передать несколько значений в одном коде, важно выбрать правильный разделитель. Использование символа ; допустимо, но иногда он может конфликтовать с системными настройками разделителей в 1С или сканере. Попробуйте заменить его на менее распространенные символы, такие как _ (подчеркивание) или уникальную последовательность символов, например, zzz.

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

Рассмотрим пример того, как можно разобрать полученную строку в коде 1С:


// Предположим, мы считали строку "Артикул_Код"
ДанныеСтроки = СчитанныеДанные; 
МассивДанных = СтрРазделить(ДанныеСтроки, "_", Ложь);

Если МассивДанных.Количество() >= 2 Тогда
    Артикул = МассивДанных[0];
    КодНоменклатуры = МассивДанных[1];
    
    // Дальнейший поиск номенклатуры по полученным данным
    Номенклатура = Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры);
КонецЕсли;

Настройка обработчика в 1С

Основная причина «нерабочего» сканирования в 1С заключается в том, что обработчик событий ожидает данные определенного формата. Если вы просто считываете QR-код, 1С воспринимает его как обычный ввод с клавиатуры.

Чтобы система «понимала» структуру вашего QR-кода, необходимо:

  1. Убедиться, что в Мобильном клиенте или на ТСД установлены драйверы, которые корректно перехватывают событие сканирования (внешнее событие).
  2. Проверить, что сканер не добавляет суффиксы (например, символ Enter), которые могут приводить к преждевременному завершению ввода данных до того, как обработчик успеет выполнить СтрРазделить.
  3. Добавить логирование (ЗаписьЖурналаРегистрации) в момент считывания, чтобы увидеть, какая именно строка попадает в 1С. Часто при отладке выясняется, что считывается совсем не то, что вы ожидали (например, добавляются лишние управляющие символы).

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

← На главную