При работе с помарочным (побутылочным) учетом алкогольной продукции в программе 1С:Розница (начиная с версий 2.2 и выше) пользователи часто сталкиваются с крайне неприятной ситуацией. В процессе проверки поступившей продукции ЕГАИС, после успешного сканирования всех бутылок, при нажатии на кнопку «Завершить проверку» система внезапно выдает ошибку и блокирует проведение документа. В дереве маркируемой продукции появляется несуществующая (фантомная) коробка со статусом «Требуется переупаковка», а часть отсканированных бутылок автоматически привязывается к ней.
Рассмотрим подробнее, почему возникает этот сбой, как программа интерпретирует входящие данные и какие шаги необходимо предпринять, чтобы полностью решить проблему и не допускать ее повторения в будущем.
Описанная ситуация — это классический признак рассинхронизации передачи данных между двумерным (2D) сканером штрихкодов и базой данных 1С. Новые акцизные марки ЕГАИС представляют собой сложные двухмерные штрихкоды формата DataMatrix или PDF417, содержащие длинную последовательность символов (до 150 знаков).
Если сканер штрихкодов подключен к компьютеру в режиме эмуляции клавиатуры (USB-HID / Keyboard Wedge), передача данных происходит по следующему принципу:
В результате этого разрыва программа 1С не успевает обработать марку как единое целое и делит ее на две части. Первая часть отбрасывается или распознается неверно, а вторая часть (тот самый странный набор заглавных букв и цифр, который обнаружил автор темы в XML-файле накладной) поступает в систему как новое внешнее событие.
Так как этот «обрезок» не соответствует структуре акцизной марки ЕГАИС, встроенные алгоритмы формы Проверка поступившей продукции ЕГАИС автоматически принимают его за штрихкод транспортной упаковки (короба или палеты). Программа создает виртуальную коробку, привязывает к ней последующие отсканированные бутылки, а при завершении проверки сверяет фактическую иерархию с ТТН от поставщика. Поскольку в накладной поставщика никакой коробки нет (товар идет побутылочно), программа выдает ошибку соответствия и требует выполнить переупаковку.
Ниже представлен концептуальный пример кода, иллюстрирующий, как логика программы разделяет входящие потоки данных при возникновении задержки:
// Пример упрощенного алгоритма обработки входящих штрихкодов в форме проверки
Процедура ОбработатьВходныеДанныеСканера(ДанныеСтроки)
// Если строка слишком короткая или не соответствует шаблону марки ЕГАИС
Если СтрДлина(ДанныеСтроки) < 68 Тогда
// Программа предполагает, что это штрихкод групповой тары (коробки)
ЗарегистрироватьНовуюУпаковку(ДанныеСтроки);
Иначе
// Обработка штатной бутылочной марки
ЗарегистрироватьАкцизнуюМарку(ДанныеСтроки);
КонецЕсли;
КонецПроцедуры
Как отметил автор темы на форуме, после закрытия и повторного открытия накладной проверка прошла успешно. Это объясняется тем, что при закрытии формы проверки кэш отсканированных штрихкодов и временно созданные связи очищаются. При повторной сессии сканирования компьютер работал без задержек, марка передалась целиком, и фантомная упаковка не создалась. Однако это лишь временный обходной путь. При очередном сканировании на нагруженном ПК сбой обязательно повторится.
---
Для того чтобы полностью исключить появление фантомных упаковок и ошибки «Требуется переупаковка», необходимо правильно настроить торговое оборудование. Проанализируем основные методы решения этой проблемы.
Это самый надежный и профессиональный способ подключения торгового оборудования в 1С. В режиме виртуального COM-порта (VCOM) сканер не имитирует нажатие клавиш, а передает весь считанный штрихкод целиком в виде единого пакета данных (через внешнее событие драйвера).
Выполним настройку по шагам:
Если перевод в режим эмуляции COM-порта невозможен (например, при работе в облачном сервисе через тонкий клиент или при использовании терминального сервера RDP, где проброс портов затруднен), необходимо настроить чувствительность драйвера в самой 1С.
Разберем процедуру настройки:
Что это дает: Увеличение таймаута заставляет 1С дольше ожидать поступления символов от клавиатуры. Даже если при передаче длинной акцизной марки возникнет микросекундная задержка на стороне сервера, программа «склеит» все пришедшие символы в одну длинную строку, предотвращая разделение марки на обрезки.
Если таймаут в 1С увеличен, но на длинных марках сбои все равно происходят, можно отрегулировать скорость передачи данных на самом сканирующем устройстве.
Для этого в руководстве пользователя сканера найдите раздел Intercharacter Delay (Межсимвольная задержка). С помощью специальных настроечных кодов установите задержку в пределах 10–20 миллисекунд. Это замедлит эмуляцию нажатия клавиш, давая возможность слабым компьютерам и медленным RDP-каналам гарантированно принять каждый символ без потери буфера обмена.
Если сбой уже произошел непосредственно во время приемки большой партии товара, и на экране появилась фантомная упаковка с требованием переупаковки, не обязательно закрывать накладную и начинать работу заново. Выполните следующие действия:
Использование данных методов позволит полностью исключить возникновение логических ошибок при помарочной приемке алкоголя и сбережет время сотрудников склада и кассиров.