Как исправить ошибку «Ошибка парсинга запроса (некорректное значение поля 'items[0].tax.type' ())» при печати чека из 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При работе с торговым оборудованием в среде 1С программисты и системные администраторы часто сталкиваются с аппаратными ошибками ККТ, которые выводятся в абсолютно нечитаемом для обычного пользователя виде. Одной из таких распространенных проблем является ошибка: «Ошибка парсинга запроса (некорректное значение поля "items[0].tax.type" ())».

Чаще всего эта ошибка возникает при попытке пробить чек из документа Оплата покупателя платежной картой или Приходный кассовый ордер в конфигурациях на обычных формах (например, 1С:Управление строительной организацией 1.3 или 1С:Управление производственным предприятием 1.3), использующих драйвер ККТ Атол 10-й версии. Давайте детально разберем природу этой ошибки и пошагово выясним, как ее исправить.

В чем физическая суть ошибки?

Данное сообщение возвращается непосредственно драйвером кассового аппарата (в нашем случае Атол). Оно означает, что при отправке XML-пакета с данными чека из 1С в кассу, для первой товарной позиции (индекс items[0]) XML-тег, отвечающий за ставку НДС (tax.type), передается пустым или содержит значение, которое касса не может сопоставить со своей внутренней таблицей налогов. Кассовый аппарат получает пустые скобки () вместо конкретного идентификатора налога и аварийно прерывает операцию печати чека.

Для наглядности проанализируем упрощенную структуру проблемного XML-пакета, который формирует интеграционная компонента 1С:


<items>
    <item>
        <name>Предоплата за строительные материалы</name>
        <price>50000.00</price>
        <quantity>1</quantity>
        <tax>
            <type></type> <!-- Источник проблемы: пустое значение внутри тега! -->
        </tax>
    </item>
</items>

В корректном же состоянии этот блок должен содержать явный признак налоговой ставки, понятный драйверу, например none (без НДС), vat20 (НДС 20%) или соответствующий цифровой код ставки:


<tax>
    <type>none</type> <!-- Корректный формат передачи налога -->
</tax>

Ниже мы подробно рассмотрим пять основных причин, по которым этот тег может приходить на кассу пустым, и разберем методы их устранения.

Решение 1. Обновление интеграционной компоненты и очистка кэша 1С

Как совершенно справедливо отметили участники обсуждения на форуме, простая установка новой версии драйвера Атол (EXE-дистрибутива) в операционную систему Windows часто не решает проблему. Дело в том, что 1С работает с кассой не напрямую через установленный в ОС драйвер, а через специальную интеграционную компоненту (файл DLL, который обычно запакован внутрь обработки обслуживания ККТ или макета самой конфигурации 1С).

Даже если мы обновили обработку обслуживания торгового оборудования (файл .epf), 1С может продолжать использовать старую версию внешней компоненты, которая была ранее распакована в кэш пользователя. Выясним, как полностью обновить компоненту и очистить память программы:

  1. Откроем 1С в режиме «Предприятие» под правами администратора.
  2. Перейдем в справочник Подключаемое оборудование (или Торговое оборудование в старых релизах).
  3. Найдем нашу карточку ККТ Атол, запишем ее настройки (порт, скорость, сетевые параметры) и полностью пометим на удаление старую карточку оборудования.
  4. Закроем сеанс 1С.
  5. Теперь нам необходимо очистить физический кэш внешних компонент на локальном компьютере. Для этого перейдем по следующим путям (где ИмяПользователя — учетная запись Windows):
    • C:\Users\ИмяПользователя\AppData\Roaming\1C\1cv8\ExtCompT\
    • C:\Users\ИмяПользователя\AppData\Local\1C\1cv8\...
    Удалим из папки ExtCompT все файлы, связанные с драйверами Атол (например, файлы вида Fptr10*.dll).
  6. Снова запустим 1С, зайдем в справочник торгового оборудования и создадим новую карточку ККТ с нуля. При первом обращении (например, при нажатии кнопки «Параметры подключения» или «Тест устройства») 1С обнаружит отсутствие компоненты в кэше, обратится к новой обработке обслуживания и принудительно зарегистрирует актуальную библиотеку интеграции.

Решение 2. Проверка настроек сопоставления ставок НДС в 1С

Очень часто 1С не может заполнить тег tax.type из-за отсутствия связи между внутренними ставками НДС в информационной базе и кодами ставок, которые зашиты в физической памяти кассового аппарата.

Рассмотрим, как настроить сопоставление налогов:

  1. Перейдем в параметры настройки нашей ККТ в 1С (через форму подключения и настройки торгового оборудования).
  2. Найдем вкладку или таблицу сопоставления налоговых ставок (в зависимости от релиза она может называться «Налоги» или «Параметры налогообложения»).
  3. Проверим каждую строчку. Например, для ставки 1С Без НДС должен быть четко сопоставлен налог ККТ (обычно это «Без НДС» или код «4» / «6» в зависимости от настроек кассы). Для ставки 20% должен быть выбран соответствующий налог ККТ.
  4. Если таблица пуста, обязательно заполним ее. Если в базе используется ставка «Без НДС», а в таблице сопоставления для нее нет соответствия, драйвер сформирует тот самый пустой запрос tax.type (), который и вызывает ошибку.

Решение 3. Специфика документа «Оплата покупателя платежной картой»

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

Проанализируем алгоритм проверки данных в самом документе:

Решение 4. Анализ программного кода формирования XML

Если вы являетесь разработчиком и вам необходимо быстро локализовать проблему непосредственно в коде конфигурации, проанализируем место, где формируется структура чека. Найдем функцию, которая собирает данные для ККТ.

Обычно в модуле формирования чека присутствует обход табличной части. Посмотрим на классический пример кода, где может возникать ошибка, если ставка НДС не определена:


// Пример формирования структуры товарной позиции для передачи в ККТ
Для Каждого СтрокаТаблицы Из ТоварныеПозиции Цикл
    СтрокаЧека = Новый Структура;
    СтрокаЧека.Вставить("Name", СтрокаТаблицы.Содержание);
    СтрокаЧека.Вставить("Price", СтрокаТаблицы.Сумма);
    СтрокаЧека.Вставить("Quantity", 1);
    
    // Потенциально опасное место: если СтавкаНДС пустая, запишется Неопределено
    Если ЗначениеЗаполнено(СтрокаТаблицы.СтавкаНДС) Тогда
        СтрокаЧека.Вставить("Tax", ПолучитьСтроковоеПредставлениеСтавки(СтрокаТаблицы.СтавкаНДС));
    Иначе
        // ОШИБКА: Записываем пустое значение, которое приведет к сбою парсинга!
        СтрокаЧека.Вставить("Tax", ""); 
    КонецЕсли;
    
    МассивПозиций.Добавить(СтрокаЧека);
КонецЦикла;

Для исправления подобного поведения на уровне кода мы можем принудительно подставлять значение по умолчанию (например, ставку «Без НДС»), если ставка не заполнена в документе:


// Исправленный вариант кода с подстраховкой дефолтной ставки
Если ЗначениеЗаполнено(СтрокаТаблицы.СтавкаНДС) Тогда
    СтрокаЧека.Вставить("Tax", ПолучитьСтроковоеПредставлениеСтавки(СтрокаТаблицы.СтавкаНДС));
Иначе
    // Безопасное решение: подставляем признак "Без НДС" (none) вместо пустоты
    СтрокаЧека.Вставить("Tax", "none"); 
КонецЕсли;

Решение 5. Прошивка кассового аппарата и лицензии ККТ

Иногда корень проблемы лежит за пределами 1С — непосредственно в самом фискальном регистраторе. При переходе на новые форматы фискальных данных (ФФД 1.05 / 1.2) и новые ставки налога производители касс существенно меняют внутреннюю структуру таблиц налога ККТ.

Выясним, что нужно проверить на уровне «железа»:

  1. Запустим утилиту «Тест драйвера ККТ» от компании Атол.
  2. Подключимся к кассе и перейдем в раздел «Свойства» -> «Параметры ККТ».
  3. Проверим версию внутренней прошивки аппарата. Для работы со всеми современными требованиями законодательства ККТ должна быть прошита под Платформу 5.0 (для Атол). На старых прошивках Платформы 2.5 касса может физически не поддерживать новые теги, отправляемые обновленной компонентой 1С.
  4. Перейдем в раздел «Лицензии» (или «Коды защиты»). Убедимся, что на кассе установлены и активны все необходимые лицензии для работы с актуальным ФФД и налоговыми ставками. Без этих лицензий касса будет отвергать запросы драйвера, содержащие современные теги НДС.

Систематизируя все описанные шаги, мы можем с уверенностью сказать, что залог успешного решения проблемы — это последовательное исключение факторов. Сначала убедимся, что в самом документе 1С физически заполнена ставка налога. Затем проверим настройки сопоставления налогов в торговом оборудовании. И только после этого перейдем к радикальным мерам: очистке кэша внешних компонент 1С, обновлению обработки обслуживания и проверке прошивки ККТ.

← На главную