При работе в операционной кассе с документом ЧекККМ в конфигурации 1С:Управление торговлей 11.4 (а также в смежных решениях, таких как 1С:Розница или 1С:Комплексная автоматизация) пользователи иногда сталкиваются с критической ошибкой. Программа аварийно завершает работу с системным сообщением: "Программа выполнила недопустимую операцию и будет закрыта" (в системном журнале Windows это фиксируется как ошибка APPCRASH в модуле 1cv8c.exe с кодом исключения c0000005 или Access Violation).
Особенность этого сбоя заключается в том, что при сканировании штрихкодов физическим сканером или при перемещении между реквизитами формы с помощью мыши программа работает стабильно. Но стоит кассиру начать вводить артикул, код или наименование товара вручную с клавиатуры (особенно при нажатии клавиш навигации Enter, Tab, Backspace или стрелок), платформа мгновенно закрывается. Очистка кэша 1С и даже простое пересоздание настроек пользователя дают лишь кратковременный эффект, после чего проблема возвращается.
В этой статье мы подробно разберем, почему возникает этот конфликт, как он связан с торговым оборудованием и как навсегда устранить вылеты платформы при ручном наборе данных.
---
Для того чтобы понять природу этой ошибки, проанализируем механизм интеграции торгового оборудования с платформой «1С:Предприятие». Когда сканер штрихкодов подключается к компьютеру, он может работать в одном из двух режимов:
Если ваше оборудование настроено в режиме эмуляции клавиатуры, драйвер сканера (например, стандартная компонента 1С:Сканеры штрихкода, библиотека ScanOpos.dll или внешние компоненты от АТОЛ/Штрих-М) вынужден использовать так называемые клавиатурные перехватчики (хуки, hooks) на уровне операционной системы Windows. Драйвер непрерывно отслеживает абсолютно все нажатия клавиш на компьютере. Он анализирует временные задержки между нажатиями: если символы поступают с микросекундным интервалом, драйвер распознает это как чтение штрихкода сканером, блокирует передачу этих символов в активное поле ввода и генерирует в 1С внешнее событие.
Когда кассир начинает быстро вводить данные вручную (например, ищет номенклатуру по первым буквам), в управляемой форме 1С запускаются механизмы автоподбора, динамические списки начинают фильтровать данные, а фоновые потоки отправляют запросы к СУБД. Если в этот момент пользователь нажимает управляющие клавиши типа Enter или Backspace, клавиатурный хук драйвера сканера пытается обработать незавершенное событие параллельно с потоком интерфейса платформы. Происходит конфликт потоков (Race Condition) в адресном пространстве памяти процесса 1cv8c.exe, библиотека драйвера обращается к защищенному сегменту памяти, и операционная система аварийно закрывает 1С.
При использовании мыши клавиатурные события не генерируются, поэтому вылета не происходит. При сканировании аппаратным устройством поток данных передается мгновенно и монолитно, драйвер корректно отрабатывает событие и освобождает память.
---
Разовый сброс настроек или создание новой учетной записи пользователя в 1С действительно могут на время "замаскировать" проблему. Дело в том, что в архитектуре «1С:Предприятия» настройки торгового оборудования жестко привязаны к справочнику Рабочие места (идентификатор формируется на основе имени компьютера в сети и имени текущего пользователя операционной системы).
При создании нового пользователя или очистке его настроек временная привязка к конкретному рабочему месту сбивается. 1С запускается без инициализированного сканера штрихкодов — соответственно, клавиатурный хук драйвера не загружается в память. Как только системный администратор копирует настройки старого профиля, восстанавливает привязку к оборудованию или заново подключает сканер в режиме клавиатуры, конфликт возобновляется.
---
Рассмотрим комплекс мер, которые позволят полностью исключить падение платформы при ручном вводе.
Самое надежное и технически правильное решение — полностью отказаться от клавиатурного режима работы сканера. Это разгрузит интерфейсный поток 1С от лишней фильтрации нажатий клавиш.
Honeywell USB Serial Device (COM3). Запомните номер выделенного порта.НСИ и администрирование -> РМК и оборудование -> Подключаемое оборудование.COM3).В процессе администрирования баз данных, особенно при миграции пользователей или настройке терминальных серверов, в справочнике оборудования могут скапливаться неактивные дублирующие записи.
Разберем, как навести порядок в списке подключенных устройств:
Подключаемое оборудование.Если по каким-то причинам перевести сканер в режим COM-порта невозможно (например, сканер подключен по физическому PS/2 порту или старая модель не поддерживает виртуальный COM), необходимо обновить саму компоненту интеграции.
Подключаемое оборудование откройте карточку настройки сканера.УТ 11.4.3 поставлялись с устаревшими версиями NativeAPI-компонент, содержащими критические ошибки работы с памятью.1С:Сканеры штрихкода на актуальную версию или переключиться на альтернативный сертифицированный драйвер (например, от компании АТОЛ или Гексагон).1С:Предприятие 8 до актуального стабильного релиза. В новых версиях платформы существенно улучшена изоляция памяти при работе со сторонними внешними компонентами.Иногда конфликт в памяти провоцирует не только драйвер торгового оборудования, но и стороннее программное обеспечение, работающее в фоновом режиме на ПК пользователя.
Проанализируем программное окружение операционной системы:
Punto Switcher).Punto Switcher и клавиатурного драйвера сканера в момент ручного ввода в 1С происходит двойной перехват символов, что неизбежно ведет к падению платформы.1cv8c.exe или 1cv8.exe) в список исключений Punto Switcher либо полностью отключите автопереключение раскладки на рабочих местах кассиров.Применение этих практических рекомендаций позволит полностью решить проблему падения программы 1С при оформлении розничных продаж и гарантирует стабильную работу кассовой зоны.