Почему Z-отчет ККТ не сходится с отчетом о розничных продажах в 1С и как это исправить?

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

При автоматизации кассовых узлов периодически возникает критическая ситуация: сумма выручки по данным Z-отчета (суточного отчета с гашением в ККТ/ОФД) не совпадает с итоговой суммой документа ОтчетОРозничныхПродажах в базе 1С. В результате учетные остатки товара списываются некорректно, а данные бухгалтерского и управленческого учета начинают расходиться с фискальными данными налоговой службы.

Рассмотрим детально, почему документы ЧекККМ могут проводиться без фактической печати на фискальном регистраторе, как исправить уже накопленные ошибки и как настроить систему для предотвращения подобных сбоев в будущем.

Причины возникновения расхождений между 1С и ККТ

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

  1. Сетевые таймауты при подключении по TCP/IP. При сетевом подключении ККТ таймаут ожидания ответа часто составляет 5000 мс. Если касса задерживает ответ (например, при передаче пакета в ОФД или долгой записи в фискальный накопитель), 1С прерывает соединение по таймауту и может некорректно зафиксировать результат транзакции.
  2. Аварийный подрежим ККТ. Если фискальный регистратор завис в цикле ожидания команды «продолжить печать» (например, после замятия ленты или обрыва питания при печати клише), он блокирует открытие нового чека. Если в алгоритме РМК отсутствует строгий опрос состояния кассы перед записью, документ может быть проведен программой в фоновом режиме.
  3. Некорректная обработка исключений при фискализации. В ряде конфигураций запись и проведение документа ЧекККМ отделены от отправки фискальных команд. Если касса возвращает ошибку, транзакция проведения не всегда откатывается, оставляя проведенный документ с пустым номером смены и фискального документа.

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

В конфигурациях линейки «1С:Розница» предусмотрен штатный механизм защиты от попадания «зависших» чеков в итоговый отчет. Если кассир оформил чеки во время аварии на ККТ, программа может заблокировать закрытие смены до выяснения причин.

Разберем по шагам, как включить эту проверку:

  1. Перейдем в меню администрирования пользователей: Сервис → Настройка учета → Настройка пользователей (или откроем карточку нужного пользователя/кассира).
  2. Найдем группу параметров, отвечающих за работу с торговым оборудованием и режимом РМК.
  3. Установим флаг для параметра «Проверять непробитые чеки при закрытии смены».

После активации данной опции обработка закрытия кассовой смены при формировании документа ОтчетОРозничныхПродажах анализирует реквизит СтатусЧекаККМ каждого чека за смену. Если среди них будут обнаружены непробитые документы, система выдаст предупреждение и не включит их в итоговую сумму выручки и списания.

Исправление расхождений в уже закрытых сменах

Если сбой уже произошел и документ ОтчетОРозничныхПродажах провелся на завышенную сумму, выполним корректировку данных:

  1. Анализ журнала чеков. Откроем список документов ЧекККМ. Настроим отображение колонок, добавив поле Статус, а также номера фискального чека и смены. Все проблемные чеки не будут иметь фискального номера.
  2. Изменение статуса документов. Используем встроенную обработку ГрупповаяОбработкаСправочниковИДокументов. Для ошибочных чеков установим статус Аннулированный или снимем признак проведения.
  3. Корректировка отчета о продажах. Откроем ОтчетОРозничныхПродажах за проблемную дату, удалим из табличной части строки с товарами, которые фактически не прошли через ККТ, и заново проведем отчет для восстановления правильных остатков на складе.

Важно: Если товар был фактически отдан покупателю и деньги приняты, удалять такие строки из учета нельзя. Согласно требованиям 54-ФЗ, в кассе необходимо пробить Чек коррекции («Приход») на сумму неучтенной выручки, после чего скорректировать данные в учетной системе.

Программный контроль пробития чека и обработка транзакций

Рассмотрим, как устроен механизм фискализации и проверки статуса на программном уровне. Для надежной работы необходимо, чтобы документ записывался и проводился только после успешного ответа от драйвера оборудования.

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


// Выполняем фискализацию чека через драйвер торгового оборудования
ЧекПробитККМ = глФРПечататьЧек(СписокТоваров, Итог("Сумма"), Получено, Скидка.Процент, 
                              ПризнВозврата, Склад.НомерСекции, НомерЧека, УчитыватьНДС);

Если ЧекПробитККМ = 1 Тогда
    // Записываем документ только при успешной печати на ККТ
    ПриЗаписиПерепроводить(0);
    НомерЧекаККМ = НомерЧека;
    Записать();
    ПриЗаписиПерепроводить(1);
    
    // При необходимости открываем денежный ящик
    глДПОткрытьДенежныйЯщик();
Иначе
    // Если касса вернула ошибку, отменяем сохранение чека как фискализированного
    Сообщить("Ошибка фискализации чека на ККТ! Документ не проведен.", СтатусСообщения.Важное);
КонецЕсли;

В режиме РМК конфигурации «1С:Розница» обработка результата записи в блоке попытки выглядит следующим образом:


Если НЕ ЗначениеЗаполнено(ОшибкаТО) Тогда
    СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.Пробитый;
    Попытка
        Записать(РежимЗаписиДокумента.Запись);
    Исключение
        Ответ     = "Не удалось записать документ с установленными параметрами пробитого чека.";
        Отказ     = Истина;
        Результат = Ложь;
        
        Если РежимРМК Тогда
            ТекстОшибки = "Ошибка записи чека!" + Символы.ПС +
                "Не удалось установить признак пробития чека!" + Символы.ПС + 
                "Проверьте состояние фискального регистратора.";
            ВывестиИнформациюОбОшибке(ТекстОшибки);
        КонецЕсли;
    КонецПопытки;
Иначе
    // Обработка ошибки оборудования: чек не должен считаться пробитым
    СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.НеПробитый;
КонецЕсли;

Рекомендации по системной настройке торгового оборудования

Для предотвращения зависания обмена между 1С и ККТ выполним следующие системные настройки:

  1. Увеличение таймаута: В параметрах подключения торгового оборудования в 1С увеличим значение таймаута с 5000 до 10000–15000 мс. Это исключит ложные обрывы соединения при медленном ответе фискального накопителя.
  2. Проверка логов драйвера: При возникновении регулярных сбоев включим подробное логирование в утилите «Тест драйвера ККТ» (файл drvfr.log). Анализ лога покажет, на какой конкретно команде происходит ошибка (открытие чека, регистрация позиции или закрытие чека).
  3. Опрос состояния ККТ: Перед началом формирования чека программно запросим состояние устройства. Если ККТ находится в подрежиме ожидания команды продолжения печати или смена превысила 24 часа, операция должна блокироваться до ручного устранения проблемы на кассе.
← На главную