Что делать, если чек пробит на ККТ Атол и ушел в ОФД, но пропал в 1С:Управление торговлей 11

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

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

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

Почему это происходит: техническая суть сбоя

Для того чтобы понять природу этой проблемы, проанализируем, как именно происходит процесс пробития чека из 1С через подключенное оборудование. Этот процесс состоит из двух последовательных, но раздельных транзакций: фискальной (на стороне ККТ) и информационной (в базе данных 1С).

Давайте пошагово рассмотрим стандартную цепочку действий программы при нажатии кнопки «Оплата»:

  1. Программа 1С формирует пакет данных (XML-схему чека) и передает его локальному драйверу ККТ.
  2. Драйвер дает команду кассовому аппарату (например, Атол) записать операцию в фискальный накопитель (ФН), напечатать чек на чековой ленте и отправить его в ОФД.
  3. Физическая касса успешно выполняет операцию и возвращает драйверу статус успешного выполнения (код ошибки 0).
  4. Драйвер передает этот статус в 1С.
  5. Получив подтверждение, 1С открывает внутреннюю транзакцию базы данных, меняет статус документа Чек ККМ на «Пробит», проводит его по всем регистрам (списывая товары и фиксируя выручку) и завершает транзакцию (выполняет Commit).

Влияние нестабильного интернета и веб-сервера Apache:

Если база данных 1С расположена на удаленном сервере или обмен между кассовой точкой и центральным офисом организован через веб-сервер (публикация базы на Apache/IIS), критически важным фактором становится стабильность интернет-соединения. Если в микросекундный интервал между шагом 2 и шагом 4 происходит обрыв связи или потеря сетевого пакета, веб-сервер прерывает сессию клиента. Касса Атол уже выполнила свою работу (чек напечатан, данные в ФН записаны), но 1С не получает ответного сигнала об успехе. Для защиты целостности данных СУБД делает автоматический откат (Rollback) транзакции в 1С. Документ Чек ККМ либо удаляется, либо остается в статусе «Отложен/Не проведен», а остатки товаров не списываются.

---

Пошаговая диагностика: как найти состав пропавшего чека

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

Шаг 1. Личный кабинет ОФД

Самый надежный и быстрый способ узнать точный состав продажи. В личном кабинете вашего оператора фискальных данных найдите операцию по времени и сумме. Там будет представлена полная детализация: наименование номенклатуры, количество (вес), цена, примененные скидки и итоговая сумма.

Шаг 2. Проверка регистра «Очередь чеков ККТ» в 1С

В современных версиях УТ 11 предусмотрен специальный механизм отложенной отправки. Нам необходимо проверить, не застряло ли задание в очереди. Для этого:

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

Шаг 3. Анализ лог-файла драйвера Атол

Локальный компьютер, к которому подключена касса, ведет подробное логирование. Откроем файл лога драйвера, который обычно располагается по пути: C:\Users\[ИмяПользователя]\AppData\Roaming\Atol\fptr10.log (или в папке ProgramData). Отфильтруем записи по времени чека и найдем XML-пакет, отправленный на ККТ. В нем будет содержаться весь список проданных позиций.

Шаг 4. Считывание документа напрямую из фискального накопителя

Если другие методы недоступны, мы можем извлечь данные непосредственно из памяти ККТ. Для этого выполним следующие действия:

  1. Запустим утилиту «Тест драйвера ККТ» (версия 10.х).
  2. Установим связь с кассой и поставим флаг «Включено».
  3. Перейдем в раздел «ФН» — «Данные».
  4. Укажем тип документа (Выручка/Приход) и номер фискального документа (его можно посмотреть на бумажном чеке или узнать из ОФД).
  5. Нажмем кнопку «Прочитать фискальный документ». Драйвер выведет на экран точные данные по позициям чека.

---

Три метода восстановления чека в 1С без повторного пробития на кассе

Важное правило: Ни в коем случае нельзя просто заново вводить розничный чек и нажимать кнопку «Пробить чек» на подключенной рабочей кассе! Это приведет к повторному физическому пробитию чека в ФНС, задвоению выручки в ОФД и последующим штрафам от налоговых органов при проверке.

Рассмотрим подробные алгоритмы правильного отражения операции в учете.

Способ А. Использование эмулятора ККТ (Рекомендуемый)

Этот метод позволяет создать в 1С стандартный документ Чек ККМ, провести его по всем регистрам накопления, списать остатки и корректно включить данные в отчет о розничных продажах за смену, полностью обойдя отправку команды на физический аппарат Атол. При необходимости реализации такого сценария можно применить эмулятор ККМ для УТ 11.5.

Выполним следующие шаги:

  1. Перейдем в раздел НСИ и администрирование — РМК и оборудование — Подключаемое оборудование.
  2. Найдем нашу рабочую кассу Атол и временно снимем с нее признак активности (или переименуем ее настройки, чтобы программа ее не задействовала).
  3. Создадим новую карточку подключаемого оборудования. Выберем тип оборудования «ККТ с передачей данных», а в качестве драйвера укажем 1С:Эмулятор ККТ.
  4. Создадим для эмулятора виртуальное рабочее место и настройте его.
  5. Зайдем под кассиром в интерфейс РМК. Создадим новый чек, выберем пропавшие товары (включая точный вес весовых позиций), укажем сумму и вид оплаты (Наличные или Безналичные).
  6. Нажмем кнопку «Пробить». Программа отработает штатно, эмулятор зафиксирует операцию, и в 1С появится полноценно проведенный документ Чек ККМ со статусом «Пробит».
  7. Вернемся в настройки оборудования, отключим или удалим эмулятор ККТ и снова активируем основную рабочую кассу Атол.

Способ Б. Использование обработки «Групповое изменение реквизитов»

Этот способ применим, если документ Чек ККМ физически создался в базе данных 1С, но из-за сбоя транзакции остался в статусе «Отложен», «Не проведен» или «Черновик». Для безопасной корректировки реквизитов и проведения таких документов можно использовать обработку для редактирования чеков ККМ и кассовых смен.

Для принудительного изменения статуса выполним следующие действия:

  1. Перейдем в меню НСИ и администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов.
  2. В поле «Выбирать элементы» укажем объект Чек ККМ.
  3. Добавим отбор по конкретному документу (например, по номеру или времени сбоя), чтобы случайно не изменить другие документы.
  4. Нажмем кнопку «Дополнительные параметры» внизу окна и установим флаг «Показывать служебные реквизиты».
  5. В списке реквизитов найдем поле Статус и установим для него значение Пробит.
  6. Найдем реквизит Проведен и установим значение Да (Истина).
  7. Нажмем кнопку «Изменить реквизиты». Программа перезапишет документ в обход драйвера ККТ, проведет его по регистрам списания товаров и зафиксирует выручку в кассе ККМ.

Способ В. Отражение продажи через оптовую схему (РТУ и ПКО)

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

Шаги для реализации этого метода:

  1. Создадим документ Реализация товаров и услуг. В качестве клиента укажем предопределенного контрагента «Розничный покупатель».
  2. Табличную часть заполним товарами из ОФД. Проведем документ — это спишет весовой товар со склада и зафиксирует дебиторскую задолженность за розничным покупателем.
  3. На основании этой реализации создадим документ Приходный кассовый ордер с видом операции «Поступление оплаты от клиента». Этот документ закроет долг покупателя и оприходует наличные деньги в кассу предприятия.
  4. Внимание: При проведении ПКО не нажимайте кнопку пробития чека на ККТ, так как физический чек у покупателя уже есть.

---

Как обезопасить базу от подобных сбоев в будущем

Для предотвращения подобных ситуаций системному администратору базы 1С рекомендуется выполнить ряд профилактических настроек веб-сервера Apache и параметров платформы.

Во-первых, проанализируем настройки таймаутов в конфигурационном файле Apache (httpd.conf). При работе с торговым оборудованием рекомендуется увеличить параметры времени ожидания сессии, чтобы микросекундные просадки пинга не приводили к обрыву соединения:


KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
Timeout 60

Во-вторых, при написании кастомных механизмов интеграции или доработке конфигурации программистам следует использовать транзакционную модель с предварительной проверкой доступности оборудования и статуса фискализации. Посмотрим на пример безопасного алгоритма фискализации:


// Пример безопасного проведения чека с транзакционной проверкой ККТ
ПараметрыПодключения = ПолучитьПараметрыПодключенияККТ();
РезультатСоединения = ПроверитьСвязьСУстройством(ПараметрыПодключения);

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

Применение предложенных методов диагностики и восстановления учета позволит оперативно устранить последствия сбоя сетевого соединения, сохранить актуальность складских остатков и избежать претензий со стороны контролирующих органов из-за расхождений в отчетности.

← На главную