Как исправить ошибки со ставкой НДС и регистрацией скидок на ККТ Атол при переходе на ФФД 1.05 в 1С:УТ 11.3?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Переход на формат фискальных данных ФФД 1.05 часто сопровождается техническими сложностями, особенно если используется сильно доработанная конфигурация 1С:Управление торговлей 11.3 и старые версии драйверов торгового оборудования. Типичные проблемы — некорректная печать ставки НДС (например, вместо "Без НДС" выводится "НДС 10/110") и отказ кассы печатать чеки со скидками с ошибкой "при передаче скидки для печати запрещена регистрация скидки". В данной статье мы разберем по шагам, как решить эти задачи, обновить драйверы внутри конфигурации и скорректировать программный код формирования чека.

Решение проблемы с неправильной ставкой НДС

Основная причина неверного отображения налоговых ставок после перепрошивки кассы на ФФД 1.05 кроется в несоответствии индексов налогов, которые передает старый драйвер (например, версии 8.12), и тех, которые ожидает современная прошивка ККТ. Рассмотрим, как системно подойти к решению этой проблемы.

Шаг 1: Обновление интеграционного пакета драйвера в 1С.

Если конфигурация сильно переписана, стандартное обновление через БПО (Библиотеку подключаемого оборудования) может быть затруднено. В этом случае мы можем пойти путем прямой замены бинарных данных драйвера в макете. Проанализируем алгоритм действий:

  1. Скачиваем актуальную версию драйвера Атол (рекомендуется 8.16.3 для ветки 8.х или переход на 10.х).
  2. Находим в установленной папке драйверов (обычно C:\Program Files (x86)\ATOL\Drivers8\1Cv82\) архив с компонентой, например, FR-ATOL_54FZ.zip.
  3. В конфигураторе 1С находим справочник ВнешнееОборудование (или соответствующий макет в общих макетах, например, ДрайверАТОЛККТ54ФЗ).
  4. Заменяем содержимое бинарного макета на новый ZIP-архив.

После этой манипуляции 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. Программа работает напрямую с драйвером (Native API), минуя некоторые ограничения старых COM-объектов 1С.
  2. Вы можете формировать XML-файл в 1С, сохранять его на диск и запускать внешнюю утилиту через команду ЗапуститьПриложение().
  3. Это позволяет использовать возможности 9-й и 10-й версии драйверов Атол без глобальной переработки всей подсистемы подключаемого оборудования в 1С.

Пример вызова внешней утилиты из кода 1С:


ПутьКПрограмме = "C:\KKT\xml2atol.exe";
ПараметрыЗапуска = "-f " + ПутьКФайлуXML + " -p 1"; // где -p 1 номер порта или логический номер кассы
ЗапуститьПриложение(ПутьКПрограмме + " " + ПараметрыЗапуска, , Истина);

Резюме и рекомендации

Подводя итог, можно сказать, что решение проблем ФФД 1.05 в старых версиях УТ 11.3 требует комплексного подхода. Во-первых, обязательно обновите бинарные файлы драйвера в макетах конфигурации до максимально возможных версий в рамках 8-й серии (8.16.3). Во-вторых, пересмотрите логику расчета цены: касса больше не должна "считать" скидки за вас — передавайте готовый результат, предварительно проверив математическую точность произведения цены на количество. И, наконец, в-третьих, если доработки кода становятся слишком трудозатратными, рассмотрите возможность внедрения современной версии БПО или внешних интеграционных модулей, поддерживающих драйверы 10-й серии.

← На главную