Как вывести данные X-отчета на экран в 1С и исправить ошибки расхождения с ОФД

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

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

Природа X-отчета: аппаратный vs программный

Прежде всего, проанализируем, что такое X-отчет. Это отчет без гашения, который формируется непосредственно внутренней памятью фискального регистратора (ККТ). Традиционно команда из 1С лишь инициирует процесс печати этого отчета на бумаге. Большинство стандартных драйверов и конфигураций (например, Альфа-Авто, УТ 10.3) настроены именно на физическую печать.

Рассмотрим типовой код вызова X-отчета, который часто встречается в конфигурациях на базе 1С:


// Пример вызова печати X-отчета через компоненту Рарус в Альфа-Авто
КодОшибки = Рарус_Компонента.ЗаказатьВыполнениеДействияСинхронно(GUID_ФР, "Х_Отчет",, ТаймаутФР);
Если НЕ РезультатРаботыСОборудованием("Фискальный регистратор", КодОшибки, Рарус_Компонента.ОписаниеОшибки) Тогда
    ЗаписатьВФайлЛога("Снять X-отчет", КодОшибки, "Операция не выполнена", GUID_ФР, 1);
КонецЕсли;

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

Создание «Виртуального X-отчета» на экране 1С

Если мы работаем удаленно и не имеем возможности посмотреть на бумажный чек, нам необходимо получить данные из регистров ККТ программно. Современные драйверы (например, АТОЛ 10.х или Штрих-М) позволяют считывать значения счетчиков из памяти кассы без печати.

Разберем, как это можно реализовать для оборудования Штрих-М. Мы можем обратиться к конкретным регистрам денежных ящиков:


// Пример получения суммы наличных из регистра для Штрих-М
ОбъектДрайвера.RegisterNumber = 148; // Номер регистра наличности
ОбъектДрайвера.GetCashReg(); 
СуммаНаличных = ОбъектДрайвера.ContentsOfCashRegister;
Сообщить("Наличность в кассе (данные ФР): " + СуммаНаличных);

Для оборудования АТОЛ при использовании драйвера 10-й версии можно использовать методы получения итогов смены. Проанализируем логику: вместо команды печати отчета мы запрашиваем объект данных и перебираем его свойства. Это позволяет построить форму в 1С, которая будет имитировать X-отчет, сравнивая данные из БД с реальными суммами в кассе.

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

Исправление ошибок: лишний чек возврата в ОФД

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

  1. Для ФФД 1.05: В этой версии протокола «Чек коррекции» используется только для оформления неучтенной выручки. Для исправления ошибочного чека (в нашем случае — лишнего возврата) необходимо пробить обычный чек с признаком расчета Приход. Этот чек должен полностью дублировать состав товаров ошибочного возврата. Таким образом, лишний минус перекроется новым плюсом.
  2. Для ФФД 1.1 и выше: Здесь предусмотрен механизм чеков коррекции для любых исправлений. Для нейтрализации «Возврата прихода» формируется «Чек коррекции возврата прихода» (обратная операция).

В случае автора (ФФД 1.05) правильным алгоритмом будет пробитие встречного чека Приход. После этого в 1С такой документ можно пометить на удаление или не проводить, чтобы не дублировать выручку в управленческом учете, так как там она уже корректна.

Решение проблемы «Порт занят» (Ошибка -14)

Часто при попытке достучаться до кассы через Тест драйвера ККТ или программно из 1С возникает ошибка (-14) Порт занят. Проанализируем основные причины:

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

Сверка данных через API ОФД

Чтобы не гадать, что именно записано в кассе, можно воспользоваться интеграцией с личным кабинетом ОФД через API. Рассмотрим на примере Такском или СБИС:

Программист может написать небольшую обработку, которая по расписанию подключается к серверу ОФД, скачивает список фискальных признаков (ФП) чеков за день и сверяет их с документами в 1С. Если найден ФП, которого нет в базе 1С — это сигнал о критической ошибке, которую нужно исправить до закрытия смены и снятия Z-отчета. Это снимает необходимость физически видеть X-отчет, так как данные ОФД являются «эталонными» для проверяющих органов.

Подведем итог: полноценный вывод X-отчета на экран возможен только через низкоуровневые запросы к регистрам драйвера. Для исправления ошибок в ОФД при ФФД 1.05 используйте встречные чеки того же типа, а при возникновении проблем с доступом к порту — проверяйте фоновые службы передачи данных.

← На главную