Как исправить ошибку программирования реквизита 1212 (ошибка 148) при работе с ФФД 1.2 и ККТ Атол?

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

При переходе на формат фискальных данных (ФФД) 1.2 многие разработчики и специалисты по автоматизации столкнулись с неочевидным поведением драйверов ККТ, которое не проявлялось в версии 1.05 — есть готовая автоматизация фискализации ФФД 1.2 для ККТ Атол и Штрих. Одной из самых частых и «загадочных» ошибок является «Объекту присвоен код ошибки 148 [Ошибка программирования реквизита 1212]». Ситуация осложняется тем, что реквизит 1212 (Признак предмета расчета) заполнен корректно, но касса все равно отказывается пробивать чек. Разберем детально причины этого конфликта и пошаговое решение для систем на базе 1С — поможет консоль кода и запросов для отладки исправлений в 1С.

Суть проблемы и сценарий возникновения

Рассмотрим типичный бизнес-процесс: продажа подакцизного маркированного товара (например, табачной продукции) в два этапа. Сначала клиент вносит часть суммы (предоплата или частичная оплата с передачей товара), а затем доплачивает остаток (погашение кредита).

Проанализируем формирование чеков в такой схеме:

  1. Первый чек: Передается товар. Признак предмета расчета (тег 1212) — ППР = 31 (Подакцизный товар с кодом маркировки). Признак способа расчета — ПСР = 5 (Частичный расчет и кредит). В чеке обязательно присутствует код маркировки. Этот этап обычно проходит без ошибок.
  2. Второй чек: Погашение долга. Товар уже у клиента, мы получаем деньги. Признак предмета расчета меняется на ППР = 10 (Платеж), а способ расчета на ПСР = 7 (Оплата кредита). Именно здесь возникает ошибка 148 — решается через исправление ошибок формирования чека ККМ при погашении долга.

Выясним причину: почему драйвер указывает на ошибку в теге 1212, если мы передаем стандартное значение «Платеж»? Дело в жесткой валидации состава реквизитов в ФФД 1.2.

Технический анализ конфликта тегов 1212 и 1229

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

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

Главным виновником ошибки 1212 чаще всего становится тег 1229 (Сумма акциза). Даже если вы передаете ExciseAmount = 0, само наличие этого тега в позиции с ППР = 10 является критической ошибкой. Логика проста: платеж не может содержать акциз, так как акциз относится к товару, а не к финансовому расчету. Система выдает ошибку 1212, потому что именно этот тег «запрещает» нахождение акциза в данной строке.

Сравнение ФФД 1.05 и ФФД 1.2

Многих сбивает с толку аргумент: «На ФФД 1.05 эта же схема работала годами!». Рассмотрим, что изменилось:

Пошаговое решение проблемы в 1С

Чтобы устранить ошибку, нам необходимо модифицировать процедуру подготовки данных для фискального устройства — для этого подойдёт обработка для обслуживания онлайн-касс Атол с поддержкой ФФД 1.2. Рассмотрим, как это сделать в конфигурациях на базе 1С, использующих БПО.

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

Шаг 1: Идентификация типа расчета

В коде, где формируется таблица СоставЧека, добавим проверку признака способа расчета. Если мы имеем дело с ОплатойКредита, структуру позиции нужно минимизировать.

Шаг 2: Удаление акциза и маркировки

Разберем пример кода для модификации структуры перед отправкой в драйвер:


// Пример модификации строки чека для БПО
Для Каждого СтрокаЧека Из ТаблицаТоваров Цикл
    Если СтрокаЧека.ПризнакСпособаРасчета = Перечисления.ПризнакиСпособовРасчетаДляККТ.ОплатаКредита Тогда
        // Устанавливаем корректный ППР
        СтрокаЧека.ПризнакПредметаРасчета = Перечисления.ПризнакиПредметовРасчетаДляККТ.Платеж;
        
        // КРИТИЧНО: Удаляем сумму акциза. 
        // Даже 0 в этом поле вызовет ошибку 1212 в ФФД 1.2
        Если СтруктураСтроки.Свойство("СуммаАкциза") Тогда
            СтрокаЧека.СуммаАкциза = Неопределено; // Или исключаем из структуры
        КонецЕсли;
        
        // Удаляем код маркировки, так как выбытие уже произошло
        СтрокаЧека.КодМаркировки = "";
        СтрокаЧека.ДанныеМаркировки = Неопределено;
    КонецЕсли;
КонецЦикла;

Шаг 3: Проверка наименования

Хотя мы передаем ППР = 10, согласно требованиям ФНС, в наименовании (тег 1030) все равно рекомендуется указывать, за что принята оплата. Например: «Сигареты (Оплата кредита)». Это не вызовет ошибку, если убраны специфические товарные теги (акциз, вес, марка).

Дополнительные причины ошибки 1212

Если удаление акциза не помогло, проанализируем другие возможные конфликты реквизитов для ФФД 1.2:

  1. Тег 1163 (Код товара): Если вы передаете пустую структуру кода маркировки или «пустую» марку в чеке с ППР = 10, это также может спровоцировать ошибку программирования реквизита. Для платежа этот тег должен отсутствовать полностью.
  2. Теги 1260-1265 (Отраслевые реквизиты): В новых версиях БПО при торговле маркированным товаром могут автоматически добавляться отраслевые реквизиты. Убедитесь, что они не попадают во «второй чек».
  3. Автономный режим: Если касса переведена в автономный режим (без передачи данных в ОФД), требования к проверке марок меняются, что иногда влечет за собой специфические ошибки драйвера при неверном заполнении ППР.

Как проверить результат через Тест Драйвера

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

  1. Откройте «Тест драйвера ККТ Атол».
  2. Перейдите в раздел «Чек».
  3. Сформируйте позицию с Тип предмета расчета = 10 (Платеж).
  4. Вручную добавьте в эту позицию Акциз = 0.
  5. Попробуйте пробить. Если ошибка 148 повторится — значит, теория подтверждена.
  6. Повторите операцию без заполнения поля акциза. Чек должен выйти успешно.

Резюме для разработчика

При работе с ФФД 1.2 необходимо строго разделять товарную часть и платежную часть в учетной системе. Помните: в момент погашения кредита (второй чек) с точки зрения ККТ вы торгуете не товаром, а «закрываете финансовое обязательство». Следовательно, любые атрибуты физического товара (марка, акциз, вес) должны быть исключены из запроса к драйверу. Ошибка 1212 — это всего лишь индикатор того, что драйвер запутался в противоречивых данных, которые вы ему передали.

← На главную