При обновлении платформы 1С:Предприятие 8.3 до версий выше 8.3.20 и конфигурации 1С:Розница до редакции 2.3.13 системные администраторы часто сталкиваются с неприятным явлением: чеки перестают пробиваться автоматически. Программа выдает ошибку «Чек не напечатан на устройстве для печати чеков. Нет доступных ККТ для Фискализации чека». При этом, если зайти в очередь чеков и нажать кнопку пробития вручную, фискализация проходит успешно. Проанализируем причины этой проблемы и разберем по шагам методы её решения.
Прежде всего, разберем, как работает этот процесс в современных версиях «1С:Розница». Когда кассир нажимает кнопку «Пробить чек», запись попадает в специальный регистр сведений РегистрСведений.ОчередьЧековККТ. Далее фоновое задание опрашивает эту очередь и пытается отправить данные на подключенное оборудование — для этого есть инструмент управления очередью чеков ККТ. Ошибка «Нет доступных ККТ» сигнализирует о том, что фоновый процесс не может сопоставить запись в очереди с конкретным экземпляром подключенного оборудования или не имеет к нему физического доступа.
Рассмотрим основные шаги, которые помогут восстановить работоспособность системы, основываясь на практическом опыте специалистов.
Как показывает практика, не всегда самые свежие драйверы работают корректно со старыми прошивками касс АТОЛ. Выясним, какая комбинация настроек является наиболее стабильной:
Проанализируем ситуацию с идентификаторами. В 1С:Розница привязка оборудования идет к справочнику РабочиеМеста. При обновлении платформы или очистке кэша идентификатор рабочего места (ID), который хранится локально на компьютере, может измениться. В результате фоновое задание ищет кассу для «Рабочего места №1», а оборудование в системе теперь числится за «Рабочим местом №2» (дублем).
Для исправления выполним следующие действия:
Поскольку фискализация из очереди — это фоновый процесс, он выполняется от имени определенного пользователя. Рассмотрим критические моменты:
Если используется клиент-серверный вариант работы 1С, убедимся, что пользователь, под которым запущен агент сервера 1С, имеет права доступа к локальным портам (COM/USB) сервера или клиентского места. Однако чаще в «Рознице» используется файловая база. В этом случае фоновое задание запускается в контексте текущего сеанса. Проверим настройки в РегистрСведений.НастройкиОчередиПечатиЧеков (или аналогичном в вашей версии).
Также стоит проверить настройку «Узел для печати чеков». Если это поле не заполнено, система может игнорировать запросы на фискализацию.
Часто причина кроется в энергосбережении USB-портов. Разберем, как это влияет на работу: если ОС Windows на долю секунды «присыпает» порт для экономии энергии, драйвер АТОЛ теряет связь. При ручном пробитии соединение инициализируется заново, и мы не замечаем проблемы. Но фоновое задание работает быстрее и при малейшем сбое выдает ошибку.
Выполним настройку в диспетчере устройств:
Иногда установка самого драйвера в ОС не обновляет компоненту внутри базы 1С. Проанализируем состояние справочника «Драйверы оборудования»:
fptr10_1c_v10.dll из папки, куда был установлен основной драйвер (обычно C:\Program Files\ATOL\Drivers10\...).Это гарантирует, что 1С использует именно ту версию библиотеки, которая соответствует установленному в системе драйверу.
Если база данных сильно нагружена, при записи в очередь чеков могут возникать блокировки. Рассмотрим пример того, как программно проверить состояние очереди. Если количество записей в регистре ОчередьЧековККТ превышает несколько сотен, это может замедлять работу регламентных заданий.
Рекомендуется настроить регламентное задание «Очистка очереди чеков», чтобы удалять успешно пробитые чеки старше нескольких дней. Рассмотрим пример кода, который может использоваться в обработках для принудительной очистки зависших статусов:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОчередьЧеков.НомерЧека,
| ОчередьЧеков.Статус
|ИЗ
| РегистрСведений.ОчередьЧековККТ КАК ОчередьЧеков
|ГДЕ
| ОчередьЧеков.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековВКнигеПродаж.Ошибка)";
Результат = Запрос.Выполнить();
Если вы видите много записей со статусом «Ошибка», их необходимо либо очистить, либо отправить на повторную фискализацию после исправления настроек связи — ускоряет этот процесс обработка для повторной фискализации чеков.
Подводя итог, можно сказать, что проблема чаще всего решается комплексным подходом:
Если после выполнения всех шагов ошибка сохраняется на отдельных точках, попробуйте полностью удалить экземпляр оборудования из справочника «Подключаемое оборудование» и создать его заново, привязав к новому (текущему) рабочему месту. Это принудительно обновит все внутренние идентификаторы связи в базе данных.