Переход на новую версию платформы 1С:Предприятие 8.3 и обновление типовых конфигураций, таких как «Управление торговлей 10.3», часто сопровождается неожиданными «сюрпризами». Типичная ситуация: в чеках ККМ и реализациях сканер штрихкодов продолжает исправно работать, а в специфических документах, например, Установка скидок номенклатуры, внешнее событие перестает обрабатываться. Рассмотрим подробно, почему это происходит и как восстановить работоспособность оборудования.
Когда мы сталкиваемся с тем, что сканер не реагирует на считывание штрихкода, первым делом мы открываем модуль формы документа и ищем процедуру ВнешнееСобытие. Проанализируем стандартный код, который встречается в большинстве документов УТ 10.3:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Не ВводДоступен() Тогда
Возврат;
КонецЕсли;
ПолучитьСерверТО().ОбработатьВнешнееСобытие(Событие, Данные, ЭтаФорма);
КонецПроцедуры
Здесь многие разработчики попадают в ловушку при использовании отладчика. Если поставить точку останова на строке Если Не ВводДоступен() и начать пошаговое выполнение, метод ВводДоступен() всегда будет возвращать Ложь. Это происходит потому, что в момент остановки фокус приложения переходит в конфигуратор, и форма 1С перестает быть активной для ввода.
Важно: Для проверки работы этого участка кода на платформе 8.3 лучше использовать ЗаписьЖурналаРегистрации или вывод сообщений через Сообщить(), чтобы убедиться, что событие вообще «долетает» до формы.
Выясним причину возможного сбоя на уровне драйвера. В современных реалиях 1С часто использует драйверы NativeApi. Рассмотрим ситуацию, когда сканер передает данные, но система их не распознает. Проанализируем настройки торгового оборудования (ТО):
#13 (перенос каретки CR). Если в тесте устройства вы видите строку вида 8681749417865 #13, значит, сканер настроен верно."СканерШтрихкода", а в новых — "Сканер штрихкода" (с пробелом). Разница в один символ в общем модуле ТОСервер может привести к тому, что событие будет проигнорировано.Проанализируем ситуацию глубже. В документе Установка скидок номенклатуры работа со сканером реализована через механизм транзитного подбора. Когда ТОСервер обрабатывает событие, он инициирует процедуру ОбработкаПодбора. Проблема заключается в том, что в обновленных релизах УТ 10.3 изменились строковые идентификаторы команд.
Рассмотрим код процедуры в модуле формы документа, который часто становится виновником проблемы:
Процедура ОбработкаПодбора(ТабличнаяЧасть, ЗначениеВыбора) Экспорт
// Старый код, который перестает работать
Если ЗначениеВыбора.Команда = "ПодборВТабличнуюЧастьТовары" Тогда
// Логика добавления товара
КонецЕсли;
КонецПроцедуры
Выясним причину: при использовании новых обработок обслуживания или при определенных изменениях в логике типовой конфигурации, структура ЗначениеВыбора может содержать команду с другим именем, например, просто "ПодборВТабличнуюЧасть" без уточнения имени таблицы.
Чтобы исправить этот «косяк» обновления, нам необходимо расширить условие проверки команды. Выполним следующие действия:
УстановкаСкидокНоменклатуры.ОбработкаПодбора.Рассмотрим исправленный вариант кода:
Процедура ОбработкаПодбора(ТабличнаяЧасть, ЗначениеВыбора) Экспорт
// Проверяем наличие команды в структуре выбора
Если ЗначениеВыбора.Команда = "ПодборВТабличнуюЧастьТовары"
ИЛИ ЗначениеВыбора.Команда = "ПодборВТабличнуюЧасть" Тогда
// Здесь выполняется стандартная обработка полученных данных
// Например, поиск номенклатуры по штрихкоду и добавление в ТЧ
ОбработатьРезультатПодбора(ЗначениеВыбора);
КонецЕсли;
КонецПроцедуры
Почему это помогает? Платформа 8.3 более чувствительна к типам объектов и именованию свойств в структурах, передаваемых между формами. Добавление оператора ИЛИ позволяет корректно отрабатывать событие вне зависимости от того, какой именно драйвер или версия модуля ТОСервер сформировали структуру подбора.
Если после внесения изменений сканирование все равно работает нестабильно, проанализируем еще несколько моментов:
1. Использование Врег() для имен источников. Если вы дорабатываете общие модули торгового оборудования, всегда приводите строку источника к верхнему регистру при сравнении. Это застрахует вас от ошибок, связанных с разным написанием слова «Сканер» в разных версиях драйверов.
2. Режим работы сканера. Для платформы 8.3 в режиме обычного приложения наиболее стабильным является режим COM-эмуляции. Режим клавиатуры может конфликтовать с раскладкой (русская/английская) или перехватываться другими элементами управления формы до того, как событие попадет в ВнешнееСобытие.
3. Обновление обработок обслуживания. Убедитесь, что в справочнике «Обработки обслуживания торгового оборудования» загружены актуальные .epf файлы, совместимые с версией 8.3. Старые обработки, написанные под 8.2, могут некорректно формировать структуру ЗначениеВыбора, что и приводит к описанным выше симптомам в документе установки скидок.
Таким образом, основная проблема чаще всего кроется не в поломке самого механизма сканирования, а в изменении внутренних строковых идентификаторов, которые 1С использует для передачи данных между подсистемой торгового оборудования и экранными формами документов.