В работе розничных магазинов на базе программ 1С:Розница (редакции 2.2 и 2.3) нередко возникает критическая ситуация: в журнале «Чеки ККМ» появляются документы, у которых отсутствуют номер чека, номер смены, статус, а время создания установлено в 0:00:00. Такие чеки называют «фантомными» или «зависшими». Они создают серьезные проблемы для учета: остатки товара списываются (или не списываются корректно), а по данным фискального регистратора чек может как пройти, так и остаться непробитым.
В этой статье мы подробно разберем причины возникновения таких документов, проанализируем техническую сторону взаимодействия 1С с торговым оборудованием и составим план действий по устранению и профилактике данной проблемы.
Для начала проанализируем архитектурную особенность работы 1С:Предприятие 8.3 с подключаемым оборудованием. Процесс пробития чека состоит из нескольких этапов, и понимание того, на каком этапе происходит сбой, поможет нам локализовать проблему:
ЧекККМ и присваивает ему внутренний идентификатор (GUID). В этот момент многие реквизиты, такие как номер чека в кассе и номер смены, еще пусты, так как их должна вернуть касса.Суть проблемы: если на этапе 5 или 6 происходит разрыв связи (зависание компьютера, обрыв кабеля, окончание бумаги или сбой электропитания), 1С не получает ответ от кассы. Документ уже создан в базе, но он остается в «промежуточном» состоянии — без фискальных признаков и с нулевым временем, так как транзакция записи финальных данных не была завершена.
Рассмотрим подробнее каждую из причин, выявленных в ходе практики эксплуатации систем 1С:Розница.
Одной из самых частых причин является слишком низкое значение параметра «Таймаут» в настройках подключаемого оборудования. Если касса медленно обрабатывает запрос (например, из-за долгого ответа от серверов ОФД или медленного соединения), 1С «устает» ждать и прерывает операцию по своей инициативе. При этом касса может успешно допечатать чек через секунду после того, как программа уже «забыла» о нем.
Рекомендуется зайти в настройки драйвера (АТОЛ или Штрих-М) через интерфейс 1С и увеличить Таймаут до 10 000–30 000 мс. Это особенно критично, если касса подключена через Ethernet или Wi-Fi.
Как показывают обсуждения, интенсивные обмены данными между магазином и центральным офисом могут блокировать таблицы базы данных. Рассмотрим ситуацию: кассир пробивает чек, и в эту же секунду запускается регламентное задание обмена. Если база файловая, может возникнуть ошибка не удалось заблокировать таблицу. 1С прерывает запись чека, но данные в драйвер могли уже уйти. В результате получаем расхождение между 1С и физическим чеком.
Проанализируем расписание обменов. Если они происходят слишком часто (например, каждые 5 минут), стоит либо увеличить интервал, либо использовать клиент-серверный вариант работы (SQL), который лучше справляется с блокировками.
Выясним, как ведет себя система при окончании бумаги. Если лента заканчивается в середине процесса печати, фискальный регистратор выдает ошибку. Кассир вставляет новый рулон, нажимает «Продолжить» на кассе, но 1С к этому моменту может уже выдать ошибку связи. В итоге в журнале появляется «пустой» чек, а следом кассир пробивает новый, дублируя продажу в системе, хотя физически из кассы вышел один корректный чек и один «обрывок».
В настройках операционной системы Windows часто включена опция «Разрешить отключение этого устройства для экономии энергии» для USB-концентраторов. В момент начала печати касса потребляет пиковый ток. Это может вызвать кратковременную просадку напряжения на шине USB, после чего ОС «засыпает» или перезагружает порт. Связь обрывается, и 1С теряет контекст операции пробития.
Рассмотрим по шагам, что делать, если такие чеки уже появились в вашей базе:
Прежде чем удалять или проводить «пустой» чек, необходимо выяснить, пробился ли он по кассе. Для этого нужно снять X-отчет (отчет без гашения) на фискальном регистраторе или проверить личный кабинет ОФД. Если сумма в отчете сходится с учетом 1С (с учетом «пустого» чека), значит, физически продажа прошла.
Если чек пробит по кассе, но в 1С он «вист» пустым, его нельзя просто удалить, иначе остатки товара на складе не спишутся. Рассмотрим алгоритм действий:
Групповое изменение реквизитов, чтобы принудительно установить поле СтатусЧекаККМ в значение Пробит и заполнить НомерЧекаККМ и НомерСменыККМ.Если вы торгуете алкоголем, ситуация осложняется. Проанализируем логи УТМ. Часто бывает так, что в ЕГАИС уходит сразу два сообщения о продаже: одно от «пустого» чека, другое — от повторно пробитого кассиром. В этом случае необходимо оформить Чек возврата в ЕГАИС на одну из позиций, чтобы избежать зацикливания остатков и проблем с проверками.
Если появление таких чеков носит массовый характер и не связано с лентой или таймаутами, следует выполнить проверку целостности базы данных. Разберем работу с утилитой chdfl.exe:
// Путь к утилите обычно:
// C:\Program Files\1cv8\8.3.x.xxxx\bin\chdfl.exe
Запустите утилиту, выберите файл вашей базы 1Cv8.1CD и установите флаг «Исправлять обнаруженные ошибки». Это поможет, если причина кроется в поврежденных индексах таблиц, из-за чего 1С не может корректно завершить транзакцию записи документа.
Чтобы минимизировать появление «чеков с нулевым временем» в будущем, мы рекомендуем выполнить следующие настройки:
.1CD, .log, .prm).JSON в ответах драйвера — частая причина того, что 1С не «видит» номер чека в ответе.Таким образом, появление пустых чеков в 1С:Розница — это почти всегда признак технического сбоя в цепочке передачи данных. Своевременный мониторинг журнала регистрации 1С и правильная настройка таймаутов оборудования позволяют свести подобные случаи к минимуму, обеспечивая стабильную работу магазина.