Почему 1С блокирует кассу Штрих-М при открытии кассовых документов и как это исправить

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе в конфигурации 1С:Управление торговлей 10.3 с онлайн-кассами (в частности, фискальными регистраторами «Штрих-М»), подключенными по интерфейсу RNDIS, пользователи часто сталкиваются с неприятным поведением: при открытии кассовых форм (списка кассовых смен, документов «Чек ККМ», «Приходный кассовый ордер» и др.) касса перестает отвечать на внешние запросы, зависает, а тест драйвера и тест из других окон 1С выдают ошибки связи. При закрытии формы кассового документа связь мгновенно восстанавливается.

Разберем причины такого поведения оборудования и по шагам рассмотрим способы устранения блокировок.

Причина проблемы: монопольный захват канала связи

Проанализируем логику взаимодействия типовой конфигурации с торговым оборудованием:

  1. Монопольный захват сокета ККТ при открытии формы: в архитектуре обычных форм УТ 10.3 в обработчиках событий ПриОткрытии форм документов и журналов вызывается процедура подключения торгового оборудования. Драйвер ККТ инициирует TCP-соединение (по умолчанию порт 7778) и удерживает открытый сокет всё время, пока открыта форма. Микропрограмма касс «Штрих-М» и стек RNDIS не рассчитаны на одновременную работу нескольких сессий, поэтому любая параллельная попытка опросить ККТ блокируется.
  2. Опрос состояния устройства при запуске формы: при инициализации кассовая подсистема выполняет длинные запросы статуса, сверку времени и проверку смены. Если сетевой опрос по RNDIS дает даже небольшую задержку, интерфейс 1С уходит в режим ожидания ответа, создавая эффект полной заморозки.
  3. Зависшие незавершенные транзакции: если предыдущая печать была прервана из-за сбоя, касса может находиться в подрежиме ожидания продолжения печати или открытого документа, что нарушает штатный опрос статуса драйвером.

Способ 1. Оптимизация логики подключения ККТ в коде конфигурации

Наиболее надежное решение проблемы — исключить постоянный захват кассы при простое формы и перенести инициализацию оборудования непосредственно в момент выполнения кассовой операции (пробития чека, снятия X- или Z-отчета).

Рассмотрим, как модифицировать типовой механизм:

  1. Откроем конфигуратор и найдем формы кассовых документов (например, форму документа ЧекККМ или форму списка кассовых смен).
  2. Отключим автоматический вызов функции подключения оборудования в процедуре ПриОткрытии и освободим ресурсы в обработчике закрытия формы.
  3. Перенесем блок подключения кассы непосредственно в процедуры отправки фискальных команд (печать чека, открытие/закрытие смены). Подключение должно выполняться перед формированием фискального чека, а отключение — сразу после завершения печати либо в блоке обработки исключений Исключение ... КонецПопытки.

Посмотрим на пример проверки поддержки видов торгового оборудования в общем модуле работы с ТО:


Функция ПоддерживаетсяВидТО(Вид) Экспорт
    Результат = Ложь;
    Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода
        Или Вид = Перечисления.ВидыТорговогоОборудования.СчитывательМагнитныхКарт
        Или Вид = Перечисления.ВидыТорговогоОборудования.ДисплейПокупателя
        Или Вид = Перечисления.ВидыТорговогоОборудования.ЭлектронныеВесы
        Или Вид = Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор
        Или Вид = Перечисления.ВидыТорговогоОборудования.ТерминалСбораДанных
        Или Вид = Перечисления.ВидыТорговогоОборудования.СчитывательRFIDМеток
        Или Вид = Перечисления.ВидыТорговогоОборудования.ЭквайринговаяСистема 
        Или Вид = Перечисления.ВидыТорговогоОборудования.ККТ Тогда
        Результат = Истина;
    КонецЕсли;
    Возврат Результат;
КонецФункции

Способ 2. Проверка состояния кассы через «Тест драйвера»

Если касса перестала отвечать после аварийного завершения операции, выполним диагностику при полностью закрытой 1С:

  1. Закроем все сеансы 1С:Предприятия, чтобы освободить порт устройства.
  2. Запустим утилиту «Тест драйвера ККТ» (Штрих-М) и перейдем в раздел «Состояние ККТ».
  3. Выполним команду «Длинный запрос» и проверим значения полей Режим и Подрежим.
  4. Если касса находится в режиме «Открытый документ» или «Ожидание команды продолжения печати», перейдем на вкладку «Регистрация» и нажмем «Аннулировать чек» (или «Продолжить печать»).
  5. Выполним синхронизацию системной даты и времени фискального регистратора с компьютером.

Способ 3. Корректировка сетевых настроек и таймаутов RNDIS

Для стабильной работы подключения RNDIS проанализируем параметры сети:

  1. В операционной системе проверим свойства сетевого адаптера RNDIS. Назначим ему статический IP-адрес (например, 192.168.137.1 с маской 255.255.255.0).
  2. Убедимся, что адрес кассы в таблицах сетевых настроек ККТ зафиксирован (например, 192.168.137.111) и не возникает конфликта IP-адресов с локальной сетью предприятия.
  3. В настройках торгового оборудования в 1С уменьшим время таймаута TCP-сокета до 1000–1500 мс. Это предотвратит длительное зависание интерфейса программы при возникновении сетевых задержек.
← На главную