Часто при автоматизации складских процессов возникает задача кодирования в одном QR-коде сразу нескольких параметров, например, артикула и кода номенклатуры. Однако на практике программисты сталкиваются с тем, что сканер либо не считывает код, либо 1С некорректно обрабатывает полученную строку. Давайте разберем, как правильно подойти к этой задаче и на что стоит обратить внимание.
Прежде чем менять алгоритм кодирования, необходимо исключить аппаратные ошибки. Если ваш ТСД (терминал сбора данных) не «видит» код, выполните следующие шаги:
Как показывает практика, одной из самых частых причин сбоев является использование кириллических символов при генерации QR-кода. Если в данных присутствует русский текст, сканер может передавать их в 1С в неверной кодировке (например, вместо «Товар» приходят «кракозябры»).
При генерации QR-кода в 1С убедитесь, что вы используете принудительную кодировку UTF-8. Если вы используете штатные или сторонние библиотеки для генерации, проверьте настройки параметров объекта генерации. Если после смены кодировки проблема сохранилась, попробуйте исключить кириллицу из QR-кода, используя только латиницу и цифры, чтобы подтвердить влияние кодировки.
Когда вам нужно передать несколько значений в одном коде, важно выбрать правильный разделитель. Использование символа ; допустимо, но иногда он может конфликтовать с системными настройками разделителей в 1С или сканере. Попробуйте заменить его на менее распространенные символы, такие как _ (подчеркивание) или уникальную последовательность символов, например, zzz.
Важно помнить, что после передачи строки в 1С вам необходимо программно разобрать её. Для этого в процедуре обработки ВнешнееСобытие используйте функцию СтрРазделить.
Рассмотрим пример того, как можно разобрать полученную строку в коде 1С:
// Предположим, мы считали строку "Артикул_Код"
ДанныеСтроки = СчитанныеДанные;
МассивДанных = СтрРазделить(ДанныеСтроки, "_", Ложь);
Если МассивДанных.Количество() >= 2 Тогда
Артикул = МассивДанных[0];
КодНоменклатуры = МассивДанных[1];
// Дальнейший поиск номенклатуры по полученным данным
Номенклатура = Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры);
КонецЕсли;
Основная причина «нерабочего» сканирования в 1С заключается в том, что обработчик событий ожидает данные определенного формата. Если вы просто считываете QR-код, 1С воспринимает его как обычный ввод с клавиатуры.
Чтобы система «понимала» структуру вашего QR-кода, необходимо:
событие сканирования (внешнее событие).Enter), которые могут приводить к преждевременному завершению ввода данных до того, как обработчик успеет выполнить СтрРазделить.ЗаписьЖурналаРегистрации) в момент считывания, чтобы увидеть, какая именно строка попадает в 1С. Часто при отладке выясняется, что считывается совсем не то, что вы ожидали (например, добавляются лишние управляющие символы).Помните, что каждый случай уникален, и если ваш QR-код успешно считывается телефоном, значит, проблема исключительно в программной среде обработки данных на стороне вашего терминала. Начните с анализа того, какая именно строка попадает в функцию ВнешнееСобытие, и вы сразу увидите, где происходит ошибка парсинга.