При автоматизации розничной торговли системные администраторы и программисты часто сталкиваются с неприятной ситуацией в режиме рабочего места кассира (РМК). Продавец успешно сканирует товары, формирует чек, отправляет его на печать, фискальный регистратор (например, АТОЛ) корректно печатает документ, но при попытке обслужить следующего покупателя сканер штрихкодов отказывается добавлять позиции в чек. Сканер издает привычный звуковой сигнал успешного считывания, но на экране ничего не происходит. Для возобновления работы кассиру приходится вручную кликать мышкой по экрану или нажимать на сенсорный монитор, чтобы активировать окно программы.
В этой статье мы подробно разберем, почему происходит потеря фокуса (активности) главного окна 1С:Розница после пробития чека в РМК, проанализируем технические корни проблемы взаимодействия платформы «1С:Предприятие» с драйверами торгового оборудования и операционной системой Windows, а также рассмотрим несколько эффективных способов решения этой проблемы.
Для того чтобы понять природу этой ошибки, проанализируем процесс взаимодействия программных и аппаратных компонентов в момент фискализации чека:
1С:Предприятие обращается к драйверу кассового аппарата (например, АТОЛ ДТО 9 или 10) с помощью внешней компоненты. Драйвер выполняет отправку команд на фискальный накопитель и инициализирует печать бумажного чека. Во время этого процесса операционная система Windows может кратковременно запускать фоновые системные потоки или скрытые служебные окна драйвера.1С:Предприятие оказывается в «подвешенном» состоянии — оно визуально отображается на экране, но теряет системный фокус ввода (становится неактивным). Проверить это очень просто: если в этот момент нажать комбинацию клавиш Alt + Tab, активность окна восстанавливается без использования мыши.Очистка кэша, сброс пользовательских настроек и выгрузка/загрузка информационной базы в формат .dt в данном случае абсолютно бесполезны, так как проблема лежит в плоскости взаимодействия платформы, драйвера ККТ и операционной системы.
---
Наиболее простым и надежным методом устранения данной ошибки является обновление конфигурации. В релизе 1С:Розница 2.2.12.30 наблюдался явный системный сбой взаимодействия с торговым оборудованием. Разработчики оперативно исправили поведение механизмов закрытия чека в последующих версиях.
Практика внедрения показывает, что при обновлении конфигурации до релиза 2.2.13.11 или выше проблема с потерей активности окна РМК полностью исчезает. Перед проведением обновления обязательно выполните следующие действия:
---
Если по каким-то причинам оперативно обновить конфигурацию 1С:Розница невозможно (например, база сильно доработана или находится на поддержке у сторонней организации), мы можем полностью решить проблему на уровне настройки оборудования. Для этого необходимо перевести сканер штрихкодов в режим работы через виртуальный COM-порт.
Рассмотрим этот процесс по шагам:
COM3. Проверить это можно в Диспетчере устройств Windows в ветке «Порты (COM и LPT)».COM3. Убедитесь, что используется сертифицированный драйвер 1С:Сканеры штрихкода (NativeApi). Нажмите кнопку «Тест устройства» и проверьте считывание любого штрихкода.Почему это решает проблему: При работе через виртуальный COM-порт данные от сканера передаются непосредственно в платформу через механизм ВнешнееСобытие (асинхронный вызов). Для этого режима программе абсолютно не требуется, чтобы фокус ввода находился на каком-либо текстовом поле формы РМК. Данные гарантированно попадут в обработчик программы даже при свернутом или временно неактивном окне 1С.
---
Для разработчиков и специалистов, имеющих доступ к изменению кода конфигурации (или использующих механизм расширений), существует элегантное программное решение. Мы можем принудительно возвращать фокус ввода на форму РМК после завершения печати чека.
Однако простая активация формы сразу после вызова метода печати ККТ часто не дает результата, так как процессы драйвера в операционной системе еще не успели завершить свою работу. Нам необходимо применить асинхронный вызов с небольшой искусственной задержкой.
Разберем пример реализации этого метода. В модуле формы РМК в процедуре, которая отвечает за завершение пробития чека (после выполнения всех процедур фискализации драйвером), мы подключаем однократный обработчик ожидания с задержкой в 0.1 секунды:
&НаКлиенте
Процедура ПослеПечатиЧека()
// Здесь завершается основной процесс печати документа ККТ
// ...
// Подключаем однократный обработчик ожидания с задержкой 0.1 секунды
ПодключитьОбработчикОжидания("ПринудительноВернутьФокусВРМК", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПринудительноВернутьФокусВРМК()
// Возвращаем фокус на табличную часть с товарами или поле ввода штрихкода
Если ЭтаФорма.Открыта() Тогда
ЭтаФорма.ТекущийЭлемент = Элементы.ТабличнаяЧастьТовары;
// Дополнительно можно активировать саму форму
АктивизироватьОбъект(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
Благодаря использованию механизма ПодключитьОбработчикОжидания с флагом Истина (однократно), процедура выполнится асинхронно сразу после того, как управление вернется к платформе 1С от операционной системы и внешних компонент ККТ. Фокус ввода будет гарантированно возвращен кассиру.
---
В некоторых случаях задержки в интерфейсе и потеря фокуса вызваны избыточным логированием или слишком жесткими таймаутами взаимодействия платформы с драйвером торгового оборудования. Проанализируем настройки драйвера АТОЛ:
%AppData%\Roaming\ATOL\drivers10\fptr10_log.properties. Откройте его любым текстовым редактором и установите уровень логирования (log level) в значение, минимизирующее запись информации (например, только ошибки).---
На специализированных кассовых терминалах и моноблоках, где кассирам запрещен доступ к любым сторонним программам, операционной системе и рабочему столу, можно применить административное решение — настроить запуск платформы 1С вместо стандартного проводника Windows (explorer.exe).
Рассмотрим, как настроить данный режим по шагам:
regedit и нажмите Enter).HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon.Shell (если его нет, создайте его)."C:\Program Files\1cv8\common\1cestart.exe".Поскольку при загрузке операционной системы рабочий стол, панель задач и системный трей Windows запускаться не будут, фокусу ввода будет физически некуда переключиться в момент завершения процессов ККТ. Он гарантированно останется внутри единственного активного приложения — «1С:Предприятие».
Мы подробно проанализировали проблему потери фокуса в 1С:Розница 2.2 после завершения печати чеков на кассовом аппарате АТОЛ. Наиболее технологичным и простым решением является переход на релиз конфигурации 2.2.13.11. Если такой возможности нет, мы настоятельно рекомендуем перевести сканеры штрихкодов в режим эмуляции COM-порта, что навсегда избавит кассиров от необходимости «кликать» по экрану монитора для продолжения работы.