Почему ККТ печатает «Товар» вместо «Услуга» при пробитии чека из 1С и как это исправить

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

В процессе интеграции торгового оборудования с решениями на платформе 1С разработчики часто сталкиваются с ситуацией, когда ККТ (контрольно-кассовая техника) упорно печатает на чеке номенклатурную позицию с признаком «ТОВАР», хотя организация оказывает «УСЛУГУ». При этом ручная проверка через утилиту тест-драйвера ККТ показывает, что касса исправна и умеет выводить нужные признаки. Выясним причину такого поведения программных механизмов 1С и разберем, как правильно передавать реквизиты фискализации.

Глубокий технический анализ проблемы в 1С

Рассмотрим типовую ошибку, которую совершают программисты при попытке напрямую управлять параметрами фискализации. Напрямую присваивать числовой код признака предмета расчета в структуру позиций чека перед вызовом процедуры фискализации не имеет смысла. Посмотрим на пример некорректного кода:


// НЕПРАВИЛЬНО: Попытка напрямую передать числовой код
ПараметрыЧека.ПозицииЧека[0].КодПризнакаПредметаРасчета = 4;
ОбъектДрайвера = Неопределено;
ОбработкаОбслуживания = Неопределено;
ПолучитьСерверТО().ПолучитьОбъектДрайвера(ФУ, ОбработкаОбслуживания, ОбъектДрайвера);
Результат = ОбработкаОбслуживания.ФискализироватьЧек(ОбъектДрайвера, ПараметрыЧека);

Этот код не сработает должным образом в стандартных конфигурациях 1С (таких как УПП, ERP, Комплексная автоматизация или Управление торговлей). Причина кроется в архитектуре Библиотеки подключаемого оборудования (БПО), встроенной в программные решения 1С.

Стандартная библиотека 1С использует строго типизированные структуры. При формировании фискального XML-пакета система ожидает, что в поле признака предмета расчета будет передан не просто числовой код, а объект метаданных 1С — конкретное значение системного перечисления Перечисления.ПризнакиПредметаРасчета.

Если передать в позицию чека число или оставить поле незаполненным, то:

  1. XML-сериализатор 1С не сможет распознать некорректный тип данных и проигнорирует его при заполнении XML-пакета.
  2. В итоговом XML-коде признак предмета расчета просто будет отсутствовать.
  3. Драйвер ККТ, получая пакет без этого тега, автоматически подставит значение по умолчанию — «1» (что соответствует значению «ТОВАР»).

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


// ПРАВИЛЬНО: Передаем значение перечисления 1С
ПараметрыЧека.ПозицииЧека[0].ПризнакПредметаРасчета = Перечисления.ПризнакиПредметаРасчета.Услуга;

Как происходит формирование XML-пакета под капотом 1С

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

При вызове метода ФискализироватьЧек обработка обслуживания торгового оборудования обращается к общему клиенту БПО:


ПодключаемоеОборудованиеУниверсальныйДрайверКлиент.ВыполнитьКоманду("ФискализацияЧека", ...)

Внутри этой команды вызывается серверный метод формирования пакета XML:


ДанныеЧека = МенеджерОборудованияВызовСервера.ПолучитьXMLПакетДляФискализацияЧека(ОбщиеПараметры, ВходныеПараметры, СуммаЧека, ШиринаСтроки, НовыйФормат, ВерсияФФД);

Именно в этой функции происходит обход всех позиций переданной коллекции чека и анализ поля ПризнакПредметаРасчета. Функция сопоставляет значение перечисления 1С с соответствующим кодом и генерирует тег XML-пакета.

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

Пошаговая инструкция по отладке XML-пакета

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

  1. Запустите конфигурацию в режиме «Отладка».
  2. Откройте глобальный поиск по конфигурации и найдите функцию ПолучитьXMLПакетДляФискализацияЧека.
  3. Установите точку останова (F9) на строке возврата сформированного XML-пакета.
  4. Пробейте чек из документа продажи. Программа остановится на точке останова.
  5. Вызовите табло вычисления выражений (Shift+F9) и посмотрите содержимое переменной, содержащей итоговый XML-код.
  6. Найдите внутри XML-строки блок <ReceiptPosition...> и проверьте наличие атрибута SignCalculationObject.

Если в атрибуте SignCalculationObject содержится значение «4», это означает, что 1С работает абсолютно корректно и передает кассе правильные данные. В таком случае проблему нужно искать в версии драйвера или прошивке самой ККТ.

Влияние версий драйверов и ФФД

При работе с торговым оборудованием важно учитывать версию драйвера ККТ и формат фискальных документов (ФФД). В современных условиях актуальным стандартом является применение 10-й версии драйвера (АТОЛ ДТО 10), работающего под управлением требований ФФД 1.2.

Реквизит «Признак предмета расчета» (в терминологии Федеральной налоговой службы — Тег 1212) является строго обязательным реквизитом для передачи в электронном чеке. В старых версиях драйверов АТОЛ (8 и 9 серии) сопряжение с 1С часто требовало ручной передачи параметров напрямую через низкоуровневые свойства драйвера, что вызывало множество сбоев. Современные версии БПО 3.x и АТОЛ ДТО 10 полностью автоматизируют этот процесс через передачу структурированного XML-пакета.

Если ваша касса обновлена под требования ФФД 1.2, некорректное заполнение или отсутствие Тега 1212 может привести не просто к подмене «услуги» на «товар», а к критической ошибке фискализации и блокировке пробития чека на стороне ККТ.

Юридические последствия и налоговые риски

С точки зрения налогового законодательства (ФЗ-54), указание неверного признака предмета расчета в чеке (Тег 1212) является серьезным нарушением порядка применения ККТ. Налоговые органы анализируют поступающие чеки в автоматическом режиме с помощью алгоритмов АСК ККТ.

Несоответствие признаков предмета расчета реальной деятельности организации влечет за собой следующие риски:

Методика исправления неверно пробитых чеков

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

Если касса работает на формате ФФД 1.05

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

  1. Сформируйте обычный чек с признаком расчета «Возврат прихода». В этом чеке полностью продублируйте все ошибочные данные из исходного чека (укажите неверный признак «Товар» и ту же сумму). Это действие аннулирует ошибочную фискальную операцию.
  2. Сформируйте новый обычный чек с признаком расчета «Приход», в котором укажите правильные данные — признак предмета расчета «Услуга».
  3. Направьте официальное письмо-объяснение в ИФНС о самостоятельно выявленной и исправленной ошибке, чтобы избежать привлечения к административной ответственности.

Если касса работает на форматах ФФД 1.1 или ФФД 1.2

В современных форматах исправление любых ошибок в реквизитах чеков производится с помощью специального документа — Чека коррекции. Порядок действий:

  1. Сформируйте Чек коррекции возврата прихода (аннулирующий чек). В нем укажите все ошибочные данные исходного чека (включая неверный признак «Товар»), сумму операции и фискальный признак (ФПД) первоначального ошибочного чека.
  2. Сформируйте Чек коррекции прихода (правильный чек). В нем укажите полностью корректные реквизиты, изменив предмет расчета на «Услуга». В чеке обязательно заполните основание коррекции (дата и номер акта или объяснительной записки кассира).

При использовании форматов ФФД 1.1 и ФФД 1.2 чек коррекции автоматически передает в налоговую службу всю необходимую информацию об исправлении ошибки, поэтому направлять отдельное бумажное или электронное письмо в ИФНС не требуется.

← На главную