При работе с торговым оборудованием в среде 1С:Предприятие нередко возникают ситуации, когда после обновления конфигурации или смены драйверов ККТ (контрольно-кассовой техники) привычные операции начинают выдавать ошибки. Одна из наиболее частых и «загадочных» на первый взгляд ошибок — это сообщение: «Ошибка парсинга запроса (некорректное значение поля "items[0].payment Object" (0))». Эта проблема особенно актуальна для владельцев касс АТОЛ (например, АТОЛ 30Ф) и пользователей конфигураций 1С:Розница или 1С:Управление торговлей.
В этой статье мы подробно разберем, почему возникает эта ошибка, проанализируем структуру запросов, которые 1С отправляет на кассу, и рассмотрим два основных способа решения проблемы: через настройку данных в самой базе и через обновление системных компонентов.
Давайте проанализируем ситуацию. Данная ошибка напрямую связана с требованиями ФФД (формата фискальных данных) 1.05 и выше. В этих форматах появилось обязательное требование передавать информацию не только о цене и количестве товара, но и о том, что именно мы продаем (товар, услуга, работа) и как именно за это платят. В технических терминах это соответствует Тегу 1212 (Признак предмета расчета) и Тегу 1214 (Признак способа расчета).
Когда драйвер ККТ (особенно версий 10.4.x) получает данные от 1С, он пытается построить объект оплаты и предмета расчета. Если в XML-пакете, который формирует 1С, отсутствует поле CalculationSubject или оно передается некорректно, драйвер не может распарсить (разобрать) структуру items[0].payment Object, так как ожидает там конкретный индекс или тип, а получает пустоту или «0».
Рассмотрим подробнее структуру XML-пакета, который 1С отправляет на кассу. Это поможет нам увидеть корень проблемы «изнутри».
Пример корректного запроса (когда чек пробивается):
<Positions>
<FiscalString Name="Товар" Quantity="1" PriceWithDiscount="1"
AmountWithDiscount="1" DiscountAmount="0"
Department="1" VATRate="none" VATAmount="0"
PaymentMethod="4" CalculationSubject="1" MeasurementUnit="">
<AgentData/>
<VendorData/>
</FiscalString>
</Positions>
В данном примере мы видим наличие параметра CalculationSubject="1". Это означает, что 1С четко передала кассе информацию: «Мы продаем товар».
Пример неудачного запроса (вызывающего ошибку):
<Positions>
<FiscalString Name="Фурнитура молнии" Quantity="1" PriceWithDiscount="1"
AmountWithDiscount="1" DiscountAmount="0"
Department="1" VATRate="none" VATAmount="0"
PaymentMethod="4" MeasurementUnit="">
<AgentData/>
<VendorData/>
</FiscalString>
</Positions>
Проанализируем этот фрагмент: параметр CalculationSubject полностью отсутствует. Драйвер АТОЛ 10-й серии при обработке такой позиции не находит обязательного описания предмета расчета и выдает ту самую ошибку парсинга объекта.
Первое, что мы должны сделать — проверить, заполнены ли необходимые реквизиты в карточках товаров. В программе 1С:Розница или 1С:УТ за передачу тега 1212 отвечает поле «Признак предмета расчета».
Разберем процесс исправления по шагам:
Если товаров в базе много, ручное изменение каждой карточки займет вечность. В этом случае воспользуемся инструментом «Групповое изменение реквизитов»:
После этой процедуры 1С начнет включать CalculationSubject в XML-пакет, и касса сможет его обработать.
Как показывает практика, ошибка парсинга часто возникает на драйверах версии 10.4.x. Это связано с тем, что в более старых редакциях 10-го драйвера механизмы валидации (проверки) входящего XML-пакета были более жесткими или некорректно обрабатывали пустые значения индексов оплат.
Рассмотрим, как правильно обновить драйвер:
Почему это помогает? В новых версиях драйверов (начиная с 10.5.x) разработчики АТОЛ доработали логику «подмены» или игнорирования некоторых отсутствующих параметров, если они могут быть определены по умолчанию. Это позволяет успешно пробивать чеки даже в тех случаях, когда 1С передает не совсем полную структуру данных.
Проанализируем дополнительные факторы, которые могут влиять на возникновение ошибки:
1. Версия прошивки ККТ. Если ваша касса работает на старой платформе (например, Платформа 2.5), она может быть несовместима с логикой работы новых драйверов серии 10.x в части обработки объектов оплаты. Если обновление драйвера и заполнение номенклатуры не помогло, стоит рассмотреть вопрос обновления прошивки кассы до Платформы 5.0.
2. Кэширование библиотек. Иногда после установки нового драйвера в системе 1С продолжает работать старая библиотека fptr10.dll. Это происходит, если библиотека была скопирована в папку пользователя или каталог платформы. В случае сохранения ошибки после обновления, попробуйте очистить временные файлы 1С (кэш) и убедиться через диспетчер задач, какой именно процесс драйвера запускается при работе.
3. Типы оплат. Ошибка payment Object (0) может указывать и на то, что передаваемый код типа оплаты (Наличные, Электронные и т.д.) не совпадает с тем, что настроено в таблицах самой кассы. Проверьте в «Тесте драйвера ККТ» вкладку «Параметры ККТ», раздел «Оплата», чтобы индексы платежей в 1С соответствовали индексам в железе.
Подводя итог, можно сказать, что решение проблемы кроется в связке «Актуальный драйвер + Заполненные данные номенклатуры». Мы рекомендуем сначала обновить драйвер до версии 10.5.1 или выше, так как это наиболее быстрый способ вернуть кассу в рабочее состояние, а затем планомерно навести порядок в справочнике товаров, заполнив признаки предмета расчета для корректного формирования чеков по стандартам ФФД.