Переход на новые форматы фискальных данных (ФФД) — это неизбежный процесс, продиктованный изменениями в налоговом законодательстве. С 1 января 2019 года формат ФФД 1.0 был полностью упразднен. Любые чеки, пробитые по старому формату, признаются ФНС недействительными, что влечет за собой серьезные штрафные санкции для бизнеса. Сегодня стандартом де-факто является ФФД 1.05 (а для маркированных товаров — ФФД 1.2).
В этой статье мы подробно разберем, как взаимодействуют между собой платформа 1С, конфигурация (на примере отраслевого решения «Альфа-Авто» от «1С-Рарус») и контрольно-кассовая техника (ККТ) при переходе с ФФД 1.0 на ФФД 1.05. Мы проанализируем технические проблемы, с которыми сталкиваются разработчики и системные администраторы, и рассмотрим практические варианты доработки «накрученных» (сильно кастомизированных) конфигураций.
---
Выясним, каким образом данные передаются из 1С в кассу и обратно. Процесс обмена строится по следующей цепочке: 1С (Документ) -> БПО (Библиотека подключаемого оборудования) -> Драйвер ККТ -> Кассовый аппарат.
Когда вы нажимаете кнопку «Пробить чек» в документе (например, «Чек на оплату» или «Приходный кассовый ордер»), конфигурация собирает данные о продаже и формирует пакет данных. Этот пакет передается в обработку обслуживания ККТ, которая с помощью установленного драйвера (например, АТОЛ ДТО 10 или Штрих-М) отправляет команды непосредственно на фискальный накопитель (ФН).
В типовых современных конфигурациях 1С реализован механизм автоматического определения версии ФФД. Программа сама делает запрос к ККТ через драйвер, считывает параметры регистрации кассы и понимает, какой формат фискальных данных (1.05 или 1.2) сейчас активен на аппарате. На основе этого 1С динамически перестраивает структуру передаваемого XML-пакета чека.
Однако, если ваша конфигурация не обновлялась несколько лет (как это часто бывает с корпоративными базами «Альфа-Авто»), автоматический опрос ККТ может работать некорректно или вовсе отсутствовать. В этом случае старая учетная система будет пытаться отправить данные по спецификации ФФД 1.0, а обновленная касса их отвергнет, выдав ошибку драйвера.
---
Проанализируем ситуацию, когда системный администратор обновил прошивку ККТ до ФФД 1.05, выполнил перерегистрацию в налоговой, но оставил конфигурацию 1С без изменений. В этом случае вы гарантированно столкнетесь со следующими критическими проблемами:
Рассмотрим подробнее ключевые теги, которые стали обязательными в ФФД 1.05:
---
Продукты линейки «Альфа-Авто» от разработчика «1С-Рарус» имеют свою специфику подключения торгового оборудования. В отличие от типовых конфигураций фирмы «1С» (таких как «Управление торговлей» или «Розница»), где используется стандартная БПО, в старых версиях «Альфа-Авто» (особенно редакции 4 и ранних релизах редакции 5) применялся собственный защищенный рарусовский механизм работы с оборудованием.
Этот механизм жестко завязан на специализированный сервер защиты и лицензирования, а также на внешние компоненты связи (например, FprnM1C.dll для работы с драйвером АТОЛ). При попытке подключить новую кассу к такой конфигурации часто возникает ошибка «ЭКЛЗ отсутствует» или «ФН отсутствует». Это связано с тем, что старая внешняя компонентная библиотека физически не умеет опрашивать современный фискальный накопитель и некорректно интерпретирует ответы кассового аппарата.
Официальная поддержка ФФД 1.05 появилась в «Альфа-Авто» редакции 5 только начиная с релиза 5.1.13.04. Если ваш релиз старше, то стандартными средствами настроить обмен по ФФД 1.05 невозможно. В «Альфа-Авто» редакции 4, которая уже снята с поддержки, стандартного перехода на ФФД 1.05 вообще не предусмотрено.
---
Если ваша «Альфа-Авто» сильно переписана, в нее внедрено множество уникальных бизнес-процессов, а база «снята с поддержки», простое обновление конфигурации до актуального релиза обойдется очень дорого и потребует сотен часов работы программистов. Разберем четыре альтернативных пути решения этой задачи.
Вместо масштабного обновления всей конфигурации мы можем перехватить процесс отправки чека на кассу и перенаправить его через внешнюю обработку. Эта обработка будет использовать современный драйвер (например, COM-объект АТОЛ ДТО 10) напрямую, минуя старые защищенные механизмы Раруса.
Рассмотрим пример кода на встроенном языке 1С, демонстрирующий, как инициализировать объект драйвера АТОЛ 10 и передать в него обязательные теги ФФД 1.05:
// Создаем объект драйвера ККТ АТОЛ 10 через COM-соединение
Попытка
Драйвер = Новый COMОбъект("AddIn.Fptr10");
Исключение
Предупреждение("Не удалось загрузить драйвер ККТ АТОЛ 10!");
Возврат;
КонецПопытки;
// Настройка связи с кассой (параметры могут быть считаны из констант)
Драйвер.setSingleSetting(Драйвер.LIBFPTR_SETTING_MODEL, Строка(Драйвер.LIBFPTR_MODEL_AUTOMATIC));
Драйвер.setSingleSetting(Драйвер.LIBFPTR_SETTING_PORT, Строка(Драйвер.LIBFPTR_PORT_USB));
Драйвер.applySingleSettings();
// Подключаемся к ККТ
Драйвер.open();
Если Не Драйвер.isOpened() Тогда
ВызватьИсключение "Ошибка подключения к кассе: " + Драйвер.errorDescription();
КонецЕсли;
// Начинаем формирование чека (Приход)
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_RECEIPT_TYPE, Драйвер.LIBFPTR_RT_SELL);
Драйвер.openReceipt();
// Передаем обязательный тег 1021 (Кассир) и 1203 (ИНН кассира)
Драйвер.setParam(1021, "Иванов Иван Иванович");
Драйвер.setParam(1203, "770102030405");
Драйвер.operatorLogin();
// Пример добавления позиции (Товар с ФФД 1.05)
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_COMMODITY_NAME, "Масло моторное Synthetic 5W-40");
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PRICE, 1500.00);
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_QUANTITY, 1);
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_TAX_TYPE, Драйвер.LIBFPTR_TAX_VAT20); // НДС 20%
// Передаем тег 1212 (Предмет расчета: Товар)
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_COMMODITY_SUBJECT, Драйвер.LIBFPTR_SU_COMMODITY);
// Передаем тег 1214 (Способ расчета: Полный расчет)
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_MEASUREMENT_UNIT, "шт");
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_METHOD, Драйвер.LIBFPTR_PM_FULL_PAYMENT);
Драйвер.registration();
// Закрываем чек типом оплаты "Электронными" (карта)
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_TYPE, Драйвер.LIBFPTR_PT_ELECTRONIC);
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_SUM, 1500.00);
Драйver.closeReceipt();
// Отключаемся от ККТ
Драйвер.close();
Этот способ хорош тем, что мы не изменяем типовой код документов «Альфа-Авто». Мы лишь переписываем процедуру печати чека в модуле кассовых операций, направляя поток данных на новый драйвер. Конфигурация остается пригодной для дальнейшего сопровождения.
Если у вас нет ресурсов на написание собственного кода для работы с драйверами ККТ, можно воспользоваться готовыми сторонними решениями (драйверными мостами). Существуют специализированные программные продукты, такие как «ККТ-Онлайн» или решения от независимых разработчиков (например, разработки компании RBsoft).
Принцип работы таких утилит следующий:
Это самый быстро внедряемый вариант, не требующий глубоких знаний программирования 1С.
Этот метод подходит для крупных системных интеграторов и опытных разработчиков 1С. Суть метода заключается в том, что мы полностью вырезаем устаревший рарусовский блок работы с торговым оборудованием из «Альфа-Авто» и внедряем вместо него современную Библиотеку подключаемого оборудования (БПО) от фирмы «1С» (например, версию не ниже 3.0).
Разберем по шагам, как реализуется этот процесс:
ЗаказНаряд, ЧекККМ, Оплата) отключаются стандартные вызовы функций оборудования Рарус.
// Пример формирования XML-пакета чека по стандарту БПО
ДанныеЧека = "<?xml version=""1.0"" encoding=""UTF-8""?>" +
"<Receipt>" +
" <Positions>" +
" <FiscalString Name=""Ремонт подвески автомобиля"" " +
" Quantity=""1"" " +
" Price=""2500.00"" " +
" Amount=""2500.00"" " +
" Department=""1"" " +
" TaxCode=""1"" " + // Код ставки НДС (например, 20%)
" CalculationMethod=""4"" " + // Тег 1214: Полный расчет
" CalculationSubject=""3""/>" + // Тег 1212: Услуга
" </Positions>" +
" <Payments Cash=""0.00"" ElectronicPayment=""2500.00""/>" +
"</Receipt>";
Внедрение БПО решает проблему совместимости с кассовой техникой на годы вперед. В будущем при изменении законов вам достаточно будет просто обновить саму БПО внутри вашей конфигурации, не трогая основной код «Альфа-Авто».
---
Важно понимать, что доработка программы 1С — это лишь половина дела. Переход на ФФД 1.05 требует выполнения обязательных технических процедур на стороне кассового аппарата:
---
Переход с ФФД 1.0 на ФФД 1.05 — критически важная задача для обеспечения легальности продаж в любой автосервисной или торговой организации. Для старых и доработанных конфигураций типа «Альфа-Авто» наиболее надежными решениями являются либо внедрение внешней обработки обслуживания на базе прямого обращения к драйверу АТОЛ/Штрих-М, либо интеграция подсистемы БПО.
Выбор конкретного пути зависит от масштаба изменений в вашей базе данных и квалификации обслуживающих ИТ-специалистов. Своевременное выполнение этих работ позволит избежать штрафов со стороны налоговых органов и обеспечит стабильную работу кассового узла вашего предприятия.