В розничной торговле периодически возникает крайне неприятная ситуация: кассир отпускает товар, покупатель забирает покупку и фискальный чек, данные успешно уходят в ОФД, но в самой программе 1С:Управление торговлей (или 1С:Розница) этот чек бесследно исчезает. Товар остается на остатках, выручка по кассе предприятия не сходится, а при закрытии смены обнаруживается расхождение между данными ОФД и Z-отчетом в системе.
В этой статье мы подробно разберем технические причины этого сбоя, пошагово изучим методы диагностики и рассмотрим три практических способа восстановления учета без риска задвоить выручку в налоговой инспекции.
Для того чтобы понять природу этой проблемы, проанализируем, как именно происходит процесс пробития чека из 1С через подключенное оборудование. Этот процесс состоит из двух последовательных, но раздельных транзакций: фискальной (на стороне ККТ) и информационной (в базе данных 1С).
Давайте пошагово рассмотрим стандартную цепочку действий программы при нажатии кнопки «Оплата»:
1С формирует пакет данных (XML-схему чека) и передает его локальному драйверу ККТ.Чек ККМ на «Пробит», проводит его по всем регистрам (списывая товары и фиксируя выручку) и завершает транзакцию (выполняет Commit).Влияние нестабильного интернета и веб-сервера Apache:
Если база данных 1С расположена на удаленном сервере или обмен между кассовой точкой и центральным офисом организован через веб-сервер (публикация базы на Apache/IIS), критически важным фактором становится стабильность интернет-соединения. Если в микросекундный интервал между шагом 2 и шагом 4 происходит обрыв связи или потеря сетевого пакета, веб-сервер прерывает сессию клиента. Касса Атол уже выполнила свою работу (чек напечатан, данные в ФН записаны), но 1С не получает ответного сигнала об успехе. Для защиты целостности данных СУБД делает автоматический откат (Rollback) транзакции в 1С. Документ Чек ККМ либо удаляется, либо остается в статусе «Отложен/Не проведен», а остатки товаров не списываются.
---
Если смена уже закрыта, а чек пропал из системы, нам необходимо восстановить его точное содержание (особенно если продавался весовой или мерный товар). Проанализируем основные источники информации, где можно найти данные о продаже.
Шаг 1. Личный кабинет ОФД
Самый надежный и быстрый способ узнать точный состав продажи. В личном кабинете вашего оператора фискальных данных найдите операцию по времени и сумме. Там будет представлена полная детализация: наименование номенклатуры, количество (вес), цена, примененные скидки и итоговая сумма.
Шаг 2. Проверка регистра «Очередь чеков ККТ» в 1С
В современных версиях УТ 11 предусмотрен специальный механизм отложенной отправки. Нам необходимо проверить, не застряло ли задание в очереди. Для этого:
ОчередьЧековККТ.Шаг 3. Анализ лог-файла драйвера Атол
Локальный компьютер, к которому подключена касса, ведет подробное логирование. Откроем файл лога драйвера, который обычно располагается по пути: C:\Users\[ИмяПользователя]\AppData\Roaming\Atol\fptr10.log (или в папке ProgramData). Отфильтруем записи по времени чека и найдем XML-пакет, отправленный на ККТ. В нем будет содержаться весь список проданных позиций.
Шаг 4. Считывание документа напрямую из фискального накопителя
Если другие методы недоступны, мы можем извлечь данные непосредственно из памяти ККТ. Для этого выполним следующие действия:
---
Важное правило: Ни в коем случае нельзя просто заново вводить розничный чек и нажимать кнопку «Пробить чек» на подключенной рабочей кассе! Это приведет к повторному физическому пробитию чека в ФНС, задвоению выручки в ОФД и последующим штрафам от налоговых органов при проверке.
Рассмотрим подробные алгоритмы правильного отражения операции в учете.
Этот метод позволяет создать в 1С стандартный документ Чек ККМ, провести его по всем регистрам накопления, списать остатки и корректно включить данные в отчет о розничных продажах за смену, полностью обойдя отправку команды на физический аппарат Атол. При необходимости реализации такого сценария можно применить эмулятор ККМ для УТ 11.5.
Выполним следующие шаги:
НСИ и администрирование — РМК и оборудование — Подключаемое оборудование.1С:Эмулятор ККТ.Чек ККМ со статусом «Пробит».Этот способ применим, если документ Чек ККМ физически создался в базе данных 1С, но из-за сбоя транзакции остался в статусе «Отложен», «Не проведен» или «Черновик». Для безопасной корректировки реквизитов и проведения таких документов можно использовать обработку для редактирования чеков ККМ и кассовых смен.
Для принудительного изменения статуса выполним следующие действия:
НСИ и администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов.Чек ККМ.Статус и установим для него значение Пробит.Проведен и установим значение Да (Истина).Если вы не хотите вмешиваться в механизмы розничного контура или смена уже закрыта, а отчет о розничных продажах сформирован и закрыт для редактирования, можно отразить операцию через оптовую схему. Это полностью компенсирует складские остатки и зафиксирует приход наличных денег.
Шаги для реализации этого метода:
Реализация товаров и услуг. В качестве клиента укажем предопределенного контрагента «Розничный покупатель».Приходный кассовый ордер с видом операции «Поступление оплаты от клиента». Этот документ закроет долг покупателя и оприходует наличные деньги в кассу предприятия.---
Для предотвращения подобных ситуаций системному администратору базы 1С рекомендуется выполнить ряд профилактических настроек веб-сервера Apache и параметров платформы.
Во-первых, проанализируем настройки таймаутов в конфигурационном файле Apache (httpd.conf). При работе с торговым оборудованием рекомендуется увеличить параметры времени ожидания сессии, чтобы микросекундные просадки пинга не приводили к обрыву соединения:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
Timeout 60
Во-вторых, при написании кастомных механизмов интеграции или доработке конфигурации программистам следует использовать транзакционную модель с предварительной проверкой доступности оборудования и статуса фискализации. Посмотрим на пример безопасного алгоритма фискализации:
// Пример безопасного проведения чека с транзакционной проверкой ККТ
ПараметрыПодключения = ПолучитьПараметрыПодключенияККТ();
РезультатСоединения = ПроверитьСвязьСУстройством(ПараметрыПодключения);
Если РезультатСоединения.Доступно Тогда
// Фискализация на стороне оборудования
РезультатФискализации = МенеджерОборудованияКлиент.ВыполнитьОперациюНаККТ(ПараметрыПодключения, ДанныеЧека);
Если РезультатФискализации.Успешно Тогда
// Запись в базу 1С происходит только после успешного физического пробития
НачатьТранзакцию();
Попытка
ДокументОбъект = ДанныеЧека.Ссылка.ПолучитьОбъект();
ДокументОбъект.СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.Пробит;
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
// В случае ошибки записи в 1С фиксируем инцидент в лог для ручного разбора,
// так как физически чек уже пробит на ККТ!
ЗаписатьВЛогСбоев(ДанныеЧека, РезультатФискализации);
КонецПопытки;
КонецЕсли;
КонецЕсли;
Применение предложенных методов диагностики и восстановления учета позволит оперативно устранить последствия сбоя сетевого соединения, сохранить актуальность складских остатков и избежать претензий со стороны контролирующих органов из-за расхождений в отчетности.