Переход на формат фискальных данных ФФД 1.05 часто сопровождается техническими сложностями, особенно если используется сильно доработанная конфигурация 1С:Управление торговлей 11.3 и старые версии драйверов торгового оборудования. Типичные проблемы — некорректная печать ставки НДС (например, вместо "Без НДС" выводится "НДС 10/110") и отказ кассы печатать чеки со скидками с ошибкой "при передаче скидки для печати запрещена регистрация скидки". В данной статье мы разберем по шагам, как решить эти задачи, обновить драйверы внутри конфигурации и скорректировать программный код формирования чека.
Основная причина неверного отображения налоговых ставок после перепрошивки кассы на ФФД 1.05 кроется в несоответствии индексов налогов, которые передает старый драйвер (например, версии 8.12), и тех, которые ожидает современная прошивка ККТ. Рассмотрим, как системно подойти к решению этой проблемы.
Шаг 1: Обновление интеграционного пакета драйвера в 1С.
Если конфигурация сильно переписана, стандартное обновление через БПО (Библиотеку подключаемого оборудования) может быть затруднено. В этом случае мы можем пойти путем прямой замены бинарных данных драйвера в макете. Проанализируем алгоритм действий:
C:\Program Files (x86)\ATOL\Drivers8\1Cv82\) архив с компонентой, например, FR-ATOL_54FZ.zip.ДрайверАТОЛККТ54ФЗ).После этой манипуляции 1С начнет использовать обновленную логику формирования XML-пакета, которая корректно обрабатывает теги ФФД 1.05. Как показывает практика, переход на версию 8.16.3 часто исправляет проблему "Без НДС" без правки кода.
Шаг 2: Проверка соответствия индексов налогов.
Если замена драйвера не помогла, проанализируем настройки самой кассы. В ККТ Атол за налоги отвечает Таблица 1. С помощью "Теста драйвера" проверим, какой текст привязан к налоговым ставкам. Стандартный маппинг для Атол (ДТО 8/9) обычно выглядит так:
Если 1С передает индекс 6 вместо 4, мы увидим ошибку. В процедуре ПолучитьXMLПакетДляФискализацияЧека() нужно убедиться, что для ставки "Без НДС" передается корректный идентификатор, понятный драйверу.
Проблема со скидками в ФФД 1.05 возникает из-за того, что новые протоколы требуют передачи итоговой цены за единицу товара уже с учетом всех примененных скидок. Попытка передать "чистую" цену и сумму скидки отдельным параметром часто блокируется настройками прошивки кассы.
Разберем способ передачи итоговой цены.
Самый надежный вариант — отказаться от механизма регистрации скидок средствами кассы и передавать в ККТ цену, которая уже включает в себя скидку. Рассмотрим пример кода, который необходимо внедрить в процедуру формирования позиций чека:
// Вместо передачи Цены и Скидки отдельно, рассчитываем итоговую цену
ЦенаСУчетомСкидок = Окр(СтрокаПозицииЧека.Сумма / СтрокаПозицииЧека.Количество, 2);
СтрокаПозицииЧека.Цена = ЦенаСУчетомСкидок;
// Скидку обнуляем, так как она уже учтена в цене
СтрокаПозицииЧека.Скидка = 0;
Однако простого деления суммы на количество недостаточно. Проанализируем ситуацию: если вы продаете 3 единицы товара общей стоимостью 100 рублей, то 100 / 3 = 33.3333.... При округлении до 2 знаков мы получим 33.33. Но 33.33 * 3 = 99.99. Возникает расхождение в 1 копейку, из-за которого касса выдаст ошибку "Сумма всех типов оплаты меньше суммы чека" или "Расхождение сумм по позициям".
Для решения проблемы с округлением в 1С применяется метод разделения одной товарной позиции на две строки. Выясним причину: это позволяет "повесить" лишнюю копейку на последнюю единицу товара, чтобы общая сумма сошлась идеально.
Проанализируем пример реализации такого алгоритма:
// Проверка на копеечные расхождения
ИтоговаяСуммаПоРасчету = Окр(ЦенаСУчетомСкидок * СтрокаПозицииЧека.Количество, 2);
Если ИтоговаяСуммаПоРасчету <> СтрокаПозицииЧека.Сумма Тогда
// Если есть разница, разбиваем строку
Разница = СтрокаПозицииЧека.Сумма - ИтоговаяСуммаПоРасчету;
// Первая строка: Количество - 1
// Вторая строка: Количество = 1 с корректировкой цены на величину Разницы
КонецЕсли;
Этот механизм называется форматологическим контролем. В современных версиях УТ 11 это реализовано на уровне платформенных механизмов БПО, но в старой 11.3 это придется дописывать вручную в модуле интеграции с ККТ.
Если штатные средства драйвера 8.х не позволяют добиться стабильной работы со скидками и налогами, рассмотрим вариант использования консольных оберток, таких как xml2atol. Рассмотрим преимущества этого метода:
ЗапуститьПриложение().Пример вызова внешней утилиты из кода 1С:
ПутьКПрограмме = "C:\KKT\xml2atol.exe";
ПараметрыЗапуска = "-f " + ПутьКФайлуXML + " -p 1"; // где -p 1 номер порта или логический номер кассы
ЗапуститьПриложение(ПутьКПрограмме + " " + ПараметрыЗапуска, , Истина);
Подводя итог, можно сказать, что решение проблем ФФД 1.05 в старых версиях УТ 11.3 требует комплексного подхода. Во-первых, обязательно обновите бинарные файлы драйвера в макетах конфигурации до максимально возможных версий в рамках 8-й серии (8.16.3). Во-вторых, пересмотрите логику расчета цены: касса больше не должна "считать" скидки за вас — передавайте готовый результат, предварительно проверив математическую точность произведения цены на количество. И, наконец, в-третьих, если доработки кода становятся слишком трудозатратными, рассмотрите возможность внедрения современной версии БПО или внешних интеграционных модулей, поддерживающих драйверы 10-й серии.