Ситуация, когда при нажатии кнопки «Закрыть смену» в интерфейсе РМК (Рабочее место кассира) программа «замирает», не выдает никаких сообщений, но при этом блокирует COM-порт кассового аппарата, является довольно распространенной. Это создает критическую заминку в работе торговой точки. В рамках этой статьи мы подробно разберем, почему возникает эта ошибка, как продиагностировать состояние оборудования и какие шаги предпринять для восстановления корректной работы системы.
Первым делом нам необходимо выяснить, на каком уровне происходит сбой: на уровне операционной системы, драйвера оборудования или логики самой конфигурации 1С. Рассмотрим ситуацию: если 1С сообщает, что «порт занят», это означает, что какой-то процесс уже установил соединение с ККТ и не разорвал его. Проанализируем основные сценарии:
ПриПодключенииОборудования может срабатывать некорректно, захватывая порт в фоновом режиме.Прежде чем вносить изменения в код или настройки базы, нам нужно понять физическое состояние кассы. Посмотрим на алгоритм диагностики:
Запустим «Тест драйвера» (убедившись, что 1С полностью закрыта через диспетчер задач). Перейдем в раздел «Запросы» или «Состояние» и выполним запрос состояния ККТ. Нас интересуют два момента:
Проанализируем специфическую проблему, характерную для второй редакции «Розницы». В некоторых релизах наблюдается ошибка, при которой запрос к базе данных при закрытии смены отрабатывает крайне медленно (иногда до нескольких часов). Внешне это выглядит как полное зависание.
Для обхода этой проблемы рассмотрим следующий алгоритм («костыль»), который часто помогает без вмешательства в код:
В старых редакциях на обычных формах проблема часто кроется в обработках обслуживания (файлы .epf). Если версия платформы обновилась, а обработка осталась старой, метод ЗакрытьСмену() может не возвращать управление программе. Выясним причину через отладчик:
Нам необходимо поставить точку останова в модуле РМК в процедуре, отвечающей за закрытие смены. Проследим по шагам, на каком этапе происходит «замирание». Обычно это вызов функции:
// Пример вызова в общем модуле
Результат = ПолучитьСерверТО().ЗакрытьСмену(Объект, Пароль, НомерЧека, НомерСмены);
Если выполнение кода останавливается на этой строке и не идет дальше, проблема в драйвере или в связи с аппаратом. Если же код проходит дальше, но зависает на формировании Отчета о розничных продажах, следует обратить внимание на следующие моменты:
Рассмотрим дополнительные методы, которые помогают освободить порт и завершить процесс:
1. Очистка кэша пользователя. Битые временные файлы 1С часто мешают корректной работе COM-объектов. Рекомендуется полностью удалить базу из списка и добавить её заново. Это принудительно очистит папки AppData\Local\1C.
2. Перезапуск транспортных служб. Для касс АТОЛ часто помогает перезапуск службы Atol Device Configurator Service (или службы EoU — Ethernet over USB). Эта служба может монополизировать порт для передачи данных в ОФД, не давая 1С завершить сеанс связи.
3. Исключения антивируса. Проанализируем работу защитного ПО. Бывают случаи, когда антивирус блокирует запись во временный лог-файл драйвера в момент формирования Z-отчета. Добавим папку с установленным драйвером и папку с платформой 1С в исключения.
Если вышеописанные методы не помогли, нам стоит обратиться к первичным данным. Посмотрим на логи драйвера. Для АТОЛ это обычно файл fptr10.log. Разберем типичную последовательность записей:
0x44 (Закрытие смены) передана устройству.0 (Ошибок нет).Если в логе мы видим успешный ответ от кассы, но 1С продолжает «висеть», значит, проблема на стороне 1С (ожидание проведения документа или блокировка интерфейса). Если же в логе после команды закрытия идут ошибки связи (timeout), значит, проблема в кабеле, USB-порте или самом драйвере.
Важный совет: Попробуйте сменить USB-порт на системном блоке (желательно использовать порты на задней панели материнской платы) и отключить в настройках электропитания Windows «Временное отключение USB-порта» для экономии энергии. Это предотвратит самопроизвольный разрыв связи в момент длительных операций.