Переход на новые форматы фискальных данных (ФФД) всегда вызывает множество вопросов у разработчиков и системных администраторов, особенно когда речь идет об устаревших или сильно кастомизированных конфигурациях. Одной из таких классических систем является «Альфа-Авто» редакции 4.1 или старые версии «Управление торговлей» редакции 10.3, механизмы печати чеков в которых часто переписаны вручную.
В этой статье мы подробно разберем, как осуществить переход на ФФД 1.05 на подобном программном обеспечении. Мы выясним, можно ли обойтись «малой кровью» без глобального обновления драйверов и переписывания кода, какие теги являются критически важными для ФНС и как использовать современные технологии, такие как встроенный Web-сервер АТОЛ 10-й версии, для упрощения интеграции.
Разберем типичную ситуацию: кассовый аппарат (например, АТОЛ или ШТРИХ-М) обновили на уровне прошивки до поддержки ФФД 1.05, но конфигурация 1С и драйверы торгового оборудования остались прежними. Будет ли такая связка работать и отправлять данные в ОФД?
Практика показывает, что базовая печать чеков продолжит работать. При отправке стандартного пакета данных касса, прошитая под ФФД 1.05, самостоятельно преобразует и передает информацию в ОФД в новом формате. Проверено, что на ККТ АТОЛ, ШТРИХ-М, СПАРК и ВИКИ-ПРИНТ чеки бьются успешно даже при использовании старых драйверов (например, АТОЛ ДТО 8.12 - 8.16).
Однако здесь кроется серьезная опасность, о которой необходимо знать заранее. Без изменения кода 1С касса будет заполнять новые обязательные реквизиты значениями по умолчанию. Это может привести к штрафам от ФНС. Проанализируем, какие именно данные могут уходить некорректно:
Чтобы избежать претензий со стороны налоговой инспекции, нам придется доработать обработку обслуживания ККТ или сам механизм формирования XML-пакета чека в 1С. Рассмотрим основные теги, которые обязательно должны передаваться в кассу начиная с ФФД 1.05:
Предоплата 100% (значение 1)Предоплата (значение 2)Аванс (значение 3)Полный расчет (значение 4)Частичный расчет и кредит (значение 5)Передача в кредит (значение 6)Оплата кредита (значение 7)Товар (значение 1)Подакцизный товар (значение 2)Работа (значение 3)Услуга (значение 4)Давайте посмотрим на пример кода, как в старых обработках обслуживания АТОЛ (формата 1С) передаются эти параметры через XML-строку. Нам нужно найти функцию формирования XML и добавить туда выгрузку новых атрибутов для каждой товарной строки:
// Пример модификации XML-свойств товарной позиции для ФФД 1.05
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
ЗаписьXML.ЗаписатьСтартЭлемента("FiscalString");
ЗаписьXML.ЗаписатьАтрибут("Name", СтрокаТовара.Наименование);
ЗаписьXML.ЗаписатьАтрибут("Quantity", СтрокаТовара.Количество);
ЗаписьXML.ЗаписатьАтрибут("Price", СтрокаТовара.Цена);
ЗаписьXML.ЗаписатьАтрибут("Amount", СтрокаТовара.Сумма);
ЗаписьXML.ЗаписатьАтрибут("Department", СтрокаТовара.Секция);
ЗаписьXML.ЗаписатьАтрибут("TaxCode", СтрокаТовара.СтавкаНДС);
// Добавляем новые обязательные атрибуты ФФД 1.05
ЗаписьXML.ЗаписатьАтрибут("SignMethodCalculation", СтрокаТовара.ПризнакСпособаРасчета);
ЗаписьXML.ЗаписатьАтрибут("SignSubjectCalculation", СтрокаТовара.ПризнакПредметаРасчета);
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
Переход на ФФД 1.05 часто хронологически совпадал с изменением основной ставки НДС (переход с 18% на 20%). При использовании старых драйверов АТОЛ (семейства 8.х) разработчики часто сталкиваются со следующей проблемой: при попытке передать ставку НДС 20% напрямую из 1С драйвер возвращает ошибку парсинга запроса некорректное значение поля items(0).tax.type.
Выясним причину этой ошибки. Старые версии библиотек и обработки обслуживания используют устаревшую ревизию интерфейса драйверов 1С (например, ревизию 2001), в которой физически отсутствует тип налога со значением 20%. Чтобы решить эту проблему без полной замены драйвера на 10-ю версию, на кассах с обновленной прошивкой применяют следующий обходной путь:
Передавать в кассу код ставки 18%, а ККТ сама преобразует его на печати в 20%. Это работает только при условии, что на самой кассе установлена актуальная прошивка, поддерживающая автоматический пересчет ставок на основе текущего системного времени аппарата.
Тем не менее, лучшим и наиболее стабильным решением является постепенный уход от устаревших ДТО 8-й и 9-й серий и переход на современный драйвер АТОЛ ДТО 10.
Если ваша конфигурация 1С сильно переписана, а перенос стандартных обработок обслуживания вызывает головную боль и конфликты со старыми модулями, обратите внимание на современный механизм взаимодействия с кассой — Веб-сервер АТОЛ, входящий в состав 10-й версии драйверов.
Эта технология позволяет полностью отказаться от использования нестабильных COM-объектов (таких как AddIn.Fptr10) и работы с портами на уровне клиента 1С. Касса подключается к локальному компьютеру или серверу, на котором запускается служба веб-сервера. После этого 1С может отправлять команды на печать чеков с помощью обычных HTTP-запросов, передавая тело чека в формате JSON.
Преимущества данного подхода очевидны:
Рассмотрим пример формирования JSON-задания на пробитие чека по формату ФФД 1.05 для отправки на Веб-сервер АТОЛ:
// Пример формирования JSON-структуры для веб-сервера АТОЛ 10
JSONЗапись = Новый ЗаписьJSON;
JSONЗапись.УстановитьСтроку();
ДанныеЧека = Новый Соответствие;
ДанныеЧека.Вставить("uuid", Строка(Новый УникальныйИдентификатор()));
ДанныеЧека.Вставить("request", Новый Соответствие);
Запрос = ДанныеЧека["request"];
Запрос.Вставить("type", "sell"); // Тип операции: продажа
// Заполняем данные оператора (кассира)
Кассир = Новый Соответствие;
Кассир.Вставить("name", "Иванов И.И.");
Кассир.Вставить("vatin", "123456789012"); // ИНН кассира (обязательно для ФФД 1.05)
Запрос.Вставить("operator", Кассир);
// Массив позиций чека
Позиции = Новый Массив;
СтрокаТовара = Новый Соответствие;
СтрокаТовара.Вставить("type", "position");
СтрокаТовара.Вставить("name", "Услуги по ремонту автомобиля");
СтрокаТовара.Вставить("price", 5000);
СтрокаТовара.Вставить("quantity", 1);
СтрокаТовара.Вставить("amount", 5000);
СтрокаТовара.Вставить("paymentMethod", "fullPrepayment"); // Способ расчета: Предоплата 100%
СтрокаТовара.Вставить("paymentObject", "service"); // Предмет расчета: Услуга
// Налоги
Налог = Новый Соответствие;
Налог.Вставить("type", "vat20"); // Ставка НДС 20%
СтрокаТовара.Вставить("tax", Налог);
Позиции.Добавить(СтрокаТовара);
Запрос.Вставить("items", Позиции);
// Оплаты
Оплаты = Новый Массив;
Оплата = Новый Соответствие;
Оплата.Вставить("type", "electronically"); // Безналичная оплата
Оплата.Вставить("sum", 5000);
Оплаты.Добавить(Оплата);
Запрос.Вставить("payments", Оплаты);
ЗаписатьJSON(JSONЗапись, ДанныеЧека);
СтрокаЗапроса = JSONЗапись.Закрыть();
// Теперь эту строку отправляем через HTTPСоединение на порт веб-сервера (по умолчанию 16732)
Этот способ позволяет реализовать поддержку любых новых требований законодательства (включая ФФД 1.2 и маркировку «Честный Знак») минимальными усилиями. Вам больше не придется обновлять сложные механизмы интеграции в самой 1С — достаточно будет лишь корректировать поля в формируемом JSON-тексте согласно официальной документации АТОЛ.
Подводя итоги, сформулируем основные правила перехода на ФФД 1.05 в нетиповых конфигурациях: