Почему возникает ошибка «Поле "items[1].name" отсутствует» при печати чека в 1С и как её исправить?

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

При работе с торговым оборудованием в среде 1С:Предприятие одной из самых неприятных ситуаций является сбой на финальном этапе — печати фискального чека, особенно когда оплата по банковскому терминалу уже успешно прошла. Рассмотрим ситуацию, когда при попытке пробить чек по безналичному расчету система выдает диагностическое сообщение: «При печати чека произошла ошибка... Поле "items[1].name" отсутствует». При этом оплата наличными может проходить без нареканий.

В данной статье мы проанализируем причины возникновения этой ошибки, разберем техническую составляющую взаимодействия драйвера с кассовым аппаратом и найдем способы решения проблемы.

Суть проблемы и технический контекст

Ошибка возвращается не самой платформой 1С, а драйвером ККТ (в данном случае АТОЛ 10.х). Современные драйверы ККТ используют JSON-задания для передачи данных в кассу. Поле items в этом задании представляет собой массив товарных позиций. Индекс [1] в сообщении об ошибке прямо указывает на то, что проблема возникла во второй строке чека (так как индексация в массивах JSON начинается с нуля).

Проанализируем ситуацию: если в чеке всего одна услуга или товар, почему драйвер ищет вторую позицию? Выясним основные причины:

  1. Автоматическое округление: В отраслевых решениях, таких как «БИТ:Стоматология», часто применяется алгоритм округления чека до целого рубля. Программа может добавлять техническую строку (скидку или коррекцию) в массив товаров. Если у этой технической строки не заполнено поле name (Наименование), драйвер выдает ошибку.
  2. Слип-чек эквайринга: При оплате картой драйвер может пытаться передать текстовую информацию от банковского терминала (слип-чек) как часть фискального документа. При некорректной настройке параметров обработки эта информация ошибочно интерпретируется как товарная позиция с пустым названием.
  3. Несовместимость прошивки и драйвера: Это наиболее вероятная причина для драйверов АТОЛ серии 10. Новые версии драйверов (например, 10.7.0.0 и выше) предъявляют более жесткие требования к структуре JSON в соответствии с форматами фискальных данных (ФФД 1.05 и 1.2). Если прошивка ККТ устарела, она может некорректно обрабатывать новые поля или требовать старый формат структуры, который драйвер уже не формирует корректно «по умолчанию».

Разбор по шагам: поиск причины

Рассмотрим последовательность действий для локализации ошибки. Начнем с анализа кода и структуры данных.

Для того чтобы понять, что именно отправляет 1С в драйвер, необходимо установить точку останова в общем модуле, отвечающем за работу с торговым оборудованием. Обычно это функции СформироватьЧек или ПробитьЧек. Нас интересует переменная, содержащая JSON объект задания. Рассмотрим пример того, как выглядит проблемная структура в упрощенном виде:


// Пример структуры JSON, которая вызовет ошибку
{
    "type": "sell",
    "items": [
        {
            "name": "Консультация терапевта",
            "price": 1000.00,
            "quantity": 1,
            "amount": 1000.00,
            "tax": { "type": "none" }
        },
        {
            "price": 0.00,
            "quantity": 1,
            "amount": 0.00,
            "tax": { "type": "none" }
            // ПОЛЕ "name" ЗДЕСЬ ОТСУТСТВУЕТ - это причина ошибки items[1].name
        }
    ]
}

Если мы обнаружили в массиве items пустой элемент или элемент без ключа name, значит, проблема в логике формирования чека внутри конфигурации 1С. Однако, как показывает практика обсуждений, часто код 1С корректен, а ошибка кроется глубже.

Решение 1: Синхронизация версий драйвера и прошивки

Как было отмечено в ходе обсуждения на форуме, корень проблемы часто заключается в том, что прошивка кассы не поддерживает текущую версию драйвера. Разберем, что нужно сделать:

  1. Проверим версию прошивки ККТ. Для АТОЛ это можно сделать через «Тест драйвера ККТ», раздел «Запросы» -> «Информация о ККТ».
  2. Проверим версию драйвера в 1С. В современных конфигурациях используется встроенная компонента.
  3. Действие: Если у вас установлен драйвер версии 10.7.0.0 или 10.8.0.0, а прошивка ККТ старее (например, ниже платформы 5.0), необходимо либо обновить прошивку кассового аппарата до актуальной, либо откатить драйвер до версии 10.5.0.0 или 10.6.0.0. Более ранние версии драйверов 10-й серии были менее требовательны к валидации структуры items.

Решение 2: Обновление обработки обслуживания и конфигурации

Если в конфигурации «1С:Бухгалтерия» чек печатается нормально, а в отраслевом решении (БИТ:Стоматология) возникает ошибка, значит, проблема в механизме интеграции конкретной программы. Разберем алгоритм исправления:

Посмотрим на объект МенеджерОборудования. В отраслевых решениях часто используются устаревшие обработки обслуживания. Попробуем обновить компоненту из актуальной версии БП 3.0 или Розницы. Для этого:

  1. Зайдем в раздел «Администрирование» -> «Подключаемое оборудование».
  2. Откроем карточку нашей ККТ.
  3. Нажмем кнопку «Параметры подключения» и проверим, установлена ли последняя версия драйвера.
  4. Попробуем перевыбрать драйвер из списка доступных, иногда помогает полное удаление устройства из списка и повторное добавление.

Если это не помогло, проанализируем справочник Способы оплаты. Убедимся, что для вида оплаты «Платежная карта» в настройках ККТ указан правильный индекс типа оплаты (обычно «1» для безналичных платежей в ФФД 1.05).

Решение 3: Проверка объектов, помеченных на удаление

Выясним еще одну неочевидную причину. В некоторых медицинских конфигурациях при расчете чека система может пытаться добавить в него услуги, которые физически присутствуют в документе оплаты, но были помечены на удаление в справочнике Номенклатура. Программный код может игнорировать название удаленного объекта, оставляя поле пустым, но при этом продолжать включать его в массив items.

Рекомендация: Проверьте все позиции в документе «Оказание услуг» или «Оплата», на основании которого пробивается чек. Если в списке есть пустые строки или «битые» ссылки, их необходимо устранить до момента вызова команды печати.

Заключение и выводы

Подводя итог, можно сказать, что ошибка items[1].name отсутствует является следствием строгого контроля целостности данных со стороны драйверов АТОЛ 10-го поколения. Для решения проблемы в большинстве случаев достаточно привести в соответствие версию драйвера и прошивку ККТ. Если вы используете современный драйвер (10.7+), ваша касса обязательно должна быть переведена на Платформу 5.0 с актуальным внутренним ПО. В противном случае наиболее быстрым и рабочим «костылем» будет откат драйвера в 1С до версии 10.5.

Помните, что работа с торговым оборудованием требует комплексного подхода: проверки кода 1С, настроек драйвера и состояния «железа» кассового аппарата.

← На главную