Почему после обновления прошивки ККМ АТОЛ в чеке из 1С 7.7 меняются НДС и вид оплаты и как это исправить?

Программист 1С v7.7 Торговля и дистрибуция
← На главную

При обновлении прошивки контрольно-кассовой техники (ККТ) АТОЛ под требования Формата фискальных данных (ФФД) разработчики и администраторы часто сталкиваются с неприятным поведением: в пробиваемых чеках вместо стандартной ставки НДС 18% (или 20%) начинает печататься расчетная ставка 18/118 (или 0%), а безналичная оплата по карте регистрируется как наличные, аванс или кредит.

Рассмотрим подробно причины возникновения этой проблемы при интеграции платформы 1С 7.7 с кассами АТОЛ, проанализируем логи работы драйвера и разберем варианты исправления ситуации.

Причины изменения НДС и типов оплат после прошивки KKT

Выясним, почему одна и та же обработка печати чека в 1С 7.7 дает абсолютно разные результаты до и после сервисного обслуживания кассы:

  1. Изменение внутренней нумерации в прошивках АТОЛ (начиная с версии 4555 и выше): производитель полностью переработал порядок и индексацию внутренних таблиц кассового аппарата («Налоги» и «Виды оплат»). До обновления касса интерпретировала передаваемые из 1С значения по старой схеме, а после обновления тот же самый числовой индекс стал указывать на совершенно другую строку в таблице кассы.
  2. Изменение принципа работы свойства TaxTypeNumber: в актуальных версиях драйверов и прошивок параметр TaxTypeNumber принимает не значение самой ставки налога, а строго порядковый номер записи в таблице налогов ККМ. Если раньше передача значения 3 соответствовала ставке 18%, то в новых таблицах под индексом 1 или 3 может располагаться ставка 0% или 18/118.
  3. Сдвиг типов оплат: в ФФД изменились требования к передаче безналичных платежей. Атрибуты типа CashLessType1, CashLessType2 и CashLessType3 в XML-пакете стали мапиться на новые типы оплат ККТ (например, аванс, кредит или электронные).
  4. Рассинхронизация внешних компонент: использование старой внешней компоненты FprnM1C82_54FZ.dll с новым драйвером DTO или обновление драйвера на рабочей станции при сохранении старого файла библиотеки на сервере терминалов приводит к ошибкам работы методов (например, Method 'BeginItem' not supported...).

Анализ проблемы на примере кода и логов драйвера

Посмотрим на типовой фрагмент кода 1С 7.7, формирующий XML-пакет чека для внешней компоненты:


СписокТоваров.ВыбратьСтроки();
Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
    XMLFiscalString = XMLPositions.СоздатьПодчиненныйЭлемент("FiscalString");
    Атрибут(XMLFiscalString, "Name", СписокТоваров.ТовНаим);
    Атрибут(XMLFiscalString, "Quantity", СписокТоваров.Количество);
    Атрибут(XMLFiscalString, "Price", СписокТоваров.Цена); 
    Атрибут(XMLFiscalString, "Amount", СписокТоваров.Сумма);
    Атрибут(XMLFiscalString, "Tax", СписокТоваров.СтавкаНДС); 
КонецЦикла;    

XMLPayments = XMLCheckPackage.СоздатьПодчиненныйЭлемент("Payments");
Если Строка(ВидОплаты) = "ПоКарте" Тогда
    Атрибут(XMLPayments, "Cash", "0"); 
    Атрибут(XMLPayments, "CashLessType1", "0");
    Атрибут(XMLPayments, "CashLessType2", "0");
    Атрибут(XMLPayments, "CashLessType3", Макс(СуммаЧека, Получено));
Иначе
    Атрибут(XMLPayments, "Cash", Макс(СуммаЧека, Получено)); 
    Атрибут(XMLPayments, "CashLessType1", "0");
    Атрибут(XMLPayments, "CashLessType2", "0");
    Атрибут(XMLPayments, "CashLessType3", "0");
КонецЕсли;

Проанализируем журнал работы драйвера ККМ до и после обновления аппарата. В старой прошивке при передаче ставки налога транслятор драйвера вызывал метод:


Driver.Set_TaxTypeNumber 3
Driver.Registration

После прошивки ККТ и обновления драйвера тот же самый XML-пакет начинает транслироваться в следующий набор команд:


Driver.BeginItem
Driver.Set_Summ 100
Driver.Set_Name Товар
Driver.Set_Quantity 1
Driver.Set_Price 100
Driver.Set_TaxTypeNumber 1
Driver.EndItem

Как видим, передаваемый номер налога сменился с 3 на 1, что в обновленной кассе соответствует либо нулевой ставке, либо расчетной ставке 18/118. Аналогично параметр CashLessType3 стал вызывать регистрацию типа оплаты «Аванс» вместо «Электронные».

Способы решения проблемы

Разберем основные шаги для восстановления корректной печати чеков.

  1. Обновление и синхронизация библиотек драйвера:

    Убедитесь, что на всех клиентах и сервере терминалов установлена одинаковая версия драйвера ККМ (рекомендуется DTO 8.16.x или переход на DTO 10) и актуальная библиотека FprnM1C82_54FZ.dll. Зарегистрируйте библиотеку в системе через regsvr32.

  2. Корректировка нумерации видов оплаты и налогов в 1С:

    В коде обработки 1С 7.7 необходимо перенастроить сопоставление безналичных оплат и ставок НДС под новую таблицу кассы:

    Для оплаты по карте вместо CashLessType3 используйте соответствующий безналичный атрибут (в зависимости от версии компоненты — CashLessType1 или CashLessType2):

    
    Если Строка(ВидОплаты) = "ПоКарте" Тогда
        Атрибут(XMLPayments, "Cash", "0"); 
        Атрибут(XMLPayments, "CashLessType1", Макс(СуммаЧека, Получено)); // Электронные/Карта
        Атрибут(XMLPayments, "CashLessType2", "0");
        Атрибут(XMLPayments, "CashLessType3", "0");
    КонецЕсли;
    
  3. Прямая регистрация позиций через COM-объект драйвера:

    Если формирование XML-пакета работает нестабильно, надежнее перейти на прямые вызовы методов драйвера АТОЛ (AddIn.FPrnM45), явно указывая порядковый номер налога в кассе с помощью свойства TaxTypeNumber:

    
    // Пример прямой регистрации позиции в чеке через объект драйвера
    Драйвер.Name = СписокТоваров.ТовНаим;
    Драйвер.Price = СписокТоваров.Цена;
    Драйвер.Quantity = СписокТоваров.Количество;
    Драйвер.Department = 1;
    
    // Указываем порядковый номер строки из таблицы "Налоги" ККТ:
    // 1 - НДС 18% (или 20%), 2 - НДС 10%, 3 - НДС 0%, 4 - без НДС и т.д.
    Драйвер.TaxTypeNumber = 1; 
    Драйвер.Registration();
    
  4. Настройка таблиц в «Тесте драйвера ККТ»:

    Запустите утилиту «Тест драйвера ККТ», зайдите в настройки клише/таблиц кассы и проверьте таблицы «Налоги» и «Типы оплат». В случае необходимости вы можете привести порядок номеров оплат и ставок в кассе к единому стандарту предприятия.

← На главную