При работе торговых точек часто возникают расхождения между данными в информационной базе 1С и фактически пробитыми чеками на контрольно-кассовой технике (ККТ). Ошибки кассиров (например, когда безналичный расчет ошибочно пробивают как наличные), вопросы по ведению учета подарочных сертификатов и технические сложности с получением фискальных признаков документов для сверки с ОФД — стандартные вызовы, с которыми сталкиваются программисты 1С и системные администраторы. В этой статье мы подробно разберем, как решить эти задачи при работе с кассами марки Атол (на примере популярной модели Атол-30Ф) и драйверами ДТО 8/10.
Рассмотрим частый вопрос кассиров: можно ли распечатать все чеки за смену одной лентой напрямую из кассы? Напрямую фискальный накопитель (ФН) такую операцию не поддерживает. Это ограничение заложено на уровне архитектуры ФН и требований законодательства, чтобы исключить нецелевой расход чековой ленты и защитить конфиденциальные данные.
Тем не менее, решить задачу сверки или печати копий документов можно несколькими способами:
Способ А. Печать копии конкретного чека по его номеру
Если вам требуется восстановить конкретный утерянный чек, мы можем воспользоваться бесплатной утилитой «Тест драйвера ККТ» (актуальной 10-й версии). Разберем этот процесс по шагам:
Способ Б. Выгрузка всех чеков на компьютер для автоматической сверки
Для того чтобы сопоставить документы в базе 1С с фактически отправленными в налоговую данными, ручной поиск неэффективен. Компания Атол предоставляет специализированную «Утилиту чтения документов из ФН» (FNDocReader.exe / FNArc.exe), которая поставляется вместе с Драйвером ККТ 10. Посмотрим, как использовать эту возможность:
Получив такой файл, программист 1С может легко написать обработку, которая сопоставит номера документов, суммы и типы оплат из ФН с документами ЧекККМ или ОтчетОРозничныхПродажах в базе 1С. Это позволит мгновенно локализовать ошибки кассиров, путающих наличный и безналичный расчет.
Чтобы оперативно контролировать состояние кассы без закрытия смены, мы можем использовать снятие X-отчета (отчета без гашения) или делать прямые запросы к регистрам ККТ.
В «Тесте драйвера ККТ» во вкладке «Запросы» или «Регистры» вы можете получить детальную информацию о текущем состоянии ККТ. Например, за сумму наличных денег в кассе отвечает регистр №24. Программно через интерфейс драйвера Атол ДТО 10 значение этого регистра можно получить следующим образом:
// Пример получения суммы наличных в кассе через ДТО 10
ОбъектККТ = Новый COMОбъект("Atol.AtolDevice"); // или использование Native-компоненты
ОбъектККТ.setParam(ОбъектККТ.LIBFP_PORT, 1); // Настройка порта
// ... установка связи ...
ОбъектККТ.getRegister(24); // Запрос регистра наличных
СуммаНаличных = ОбъектККТ.getParamDouble(ОбъектККТ.LIBFP_PARAM_SUM);
Проанализируем методику работы с подарочными сертификатами. Кассиры часто совершают ошибку, пытаясь отразить продажу сертификата как скидку или совместить в одном чеке продажу товара и «возврат» сертификата. С точки зрения гражданского и налогового законодательства РФ (54-ФЗ), подарочный сертификат — это не товар и не скидка. Это документ, подтверждающий получение авансового платежа.
Правильный алгоритм работы с сертификатами состоит из двух обязательных этапов:
Этап 1. Продажа сертификата (Получение аванса)
Пробивается первый чек. В нем должны быть установлены следующие реквизиты:
Этап 2. Отоваривание сертификата (Передача товара)
Когда покупатель возвращается, чтобы забрать товар, пробивается второй чек:
Важно: Возможно ли совместить продажу товара и «возврат» сертификата в одном чеке, как просят кассиры? Категорически нет. Каждый фискальный документ может иметь только один признак расчета на весь чек (Тег 1054): либо только «Приход», либо только «Возврат прихода». Невозможно одновременно продать товар («Приход») и вернуть деньги за сертификат («Возврат прихода») внутри одного чека. Если клиент хочет сдать сертификат и получить за него деньги, а затем купить другой товар, кассир обязан оформить два раздельных чека.
Выясним причину, почему нельзя рассчитать фискальный признак документа (ФПД, Тег 1077) математической формулой на стороне 1С. ФПД генерируется аппаратно внутри самого фискального накопителя (ФН) с использованием криптографических алгоритмов в момент записи документа. Никаких алгоритмов расчета на стороне компьютера не существует.
Чтобы получить ФПД для формирования прямой ссылки на ОФД или для сверки данных, его необходимо прочитать из ККТ сразу после фискализации чека. Рассмотрим, как это сделать в современных конфигурациях 1С, использующих Библиотеку подключаемого оборудования (БПО):
При вызове метода фискализации 1С отправляет XML-пакет XML-запроса в ККТ, а после успешного пробития чека драйвер возвращает XML-пакет с результатами операции. В этом пакете содержатся атрибуты FiscalSign (фискальный признак документа) и FNSerialNumber (серийный номер ФН). Проанализируем пример кода на языке 1С для извлечения этих данных:
// Функция разбирает XML-ответ от ККТ после пробития чека
Функция ПолучитьРеквизитыФДИзРезультата(РезультатФискализации) Экспорт
Результат = Новый Структура("ФПД, НомерФН, НомерФД", "", "", "");
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(РезультатФискализации);
Пока ЧтениеXML.Прочитать() Цикл
// Ищем узел с параметрами фискального документа
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "ReceiptResponse" Тогда
Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
Если ЧтениеXML.Имя = "FiscalSign" Тогда
Результат.ФПД = ЧтениеXML.Значение;
ИначеЕсли ЧтениеXML.Имя = "FNSerialNumber" Тогда
Результат.НомерФН = ЧтениеXML.Значение;
ИначеЕсли ЧтениеXML.Имя = "FiscalDocumentNumber" Тогда
Результат.НомерФД = ЧтениеXML.Значение;
КонецЕсли;
КонецЦикла;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
В современных конфигурациях 1С (ERP, КА, УТ, Розница, УНФ) на управляемых формах эти параметры автоматически записываются в регистр сведений «Фискальные операции» при проведении документов расчетов. Это позволяет автоматически генерировать ссылки на чеки в ОФД или выводить валидный QR-код прямо на форму документа в интерфейсе 1С для удобства бухгалтеров и менеджеров.