Как исправить ошибку ККТ Штрих-М "36h, Некорректные параметры в команде для данной реализации" при печати чека из 1С?

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

При печати чеков из документов «Приходный кассовый ордер» (ПКО) или «Эквайринговая операция» в программах «1С:Предприятие» пользователи кассовых аппаратов семейства Штрих-М часто сталкиваются с аппаратной ошибкой: «При выполнении операции произошла ошибка: 36h, Некорректные параметры в команде для данной реализации». Из-за этого печать чека полностью блокируется, а касса выдает предупреждение об ошибке фискального устройства.

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

---

Причина возникновения ошибки 36h: математика ФФД и жесткий контроль ККТ

С технической точки зрения код ошибки 36h генерируется непосредственно ядром кассового аппарата «Штрих-М». Современные форматы фискальных данных (ФФД 1.05 и 1.2) накладывают строгие ограничения на структуру чека. Одно из главных правил ФФД — жесткое соблюдение равенства:

Цена × Количество = Сумма строки

Если в передаваемом из 1С XML-пакете касса обнаруживает нестыковку между произведением цены на количество и итоговой суммой позиции (даже если погрешность составляет всего 1 копейку), прошивка ККТ расценивает команду как некорректную и возвращает ошибку 36h.

Проанализируем классическую ситуацию, когда в 1С используется тип цен «НДС сверху» или рассчитываются автоматические скидки:

  1. Пусть цена единицы товара без НДС равна 166,67 руб.
  2. Если покупатель приобретает 1 единицу товара, то сумма НДС составит 0,33 руб., а цена с НДС составит 200,00 руб. Все сходится.
  3. Если количество товара в строке равно 8 единицам, то математический расчет без округления в кассе дает: 166,67 * 8 = 1333,36 руб. (сумма без НДС).
  4. Сумма НДС составит: 1333,36 * 20% = 266,672 (округляем до 266,67 руб.).
  5. Итоговая сумма с НДС: 1333,36 + 266,67 = 1600,03 руб.
  6. Однако, если розничная цена с НДС зафиксирована ровно в 200,00 руб., то 1С ожидает сумму ИТОГО равную ровно 1600,00 руб.
  7. Возникает разница в 3 копейки. Для 1С эта разница является допустимой погрешностью округления, но драйвер ККТ «Штрих-М» отказывается принимать такую позицию, возвращая ошибку 36h.

Также к этой ошибке приводят ситуации, когда в передаваемых XML-данных реквизиты ЦенаСоСкидками и Цена имеют расхождения при количестве товара, отличном от 1.

---

Решение 1: Настройка форматно-логического контроля (ФЛК) в 1С

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

Давайте разберем по шагам, как настроить ФЛК в различных конфигурациях:

Для управляемых форм (1С:Бухгалтерия 3.0, УНФ, УТ 11, Розница 2/3):

  1. Перейдем в раздел Администрирование — Подключаемое оборудование.
  2. Найдем в списке нашу ККТ «Штрих-М» и откроем ее свойства (карточку торгового оборудования).
  3. Нажмем кнопку Настроить для перехода к параметрам связи с ККТ и интеграции.
  4. Найдем параметр Способ форматно-логического контроля (в некоторых релизах он называется «Правило обхода ошибок округления»).
  5. Установим значение Разделять строки.
  6. Сохраним настройки и перезагрузим сеанс работы кассира.

При выборе режима «Разделять строки» 1С автоматически анализирует математическую корректность чека. Если выявляется погрешность округления, система разбивает проблемную строку товара на две разные строки в чеке с разной ценой (одна строка с округлением в большую сторону, другая — в меньшую). Итоговое количество товара и общая сумма чека при этом полностью совпадают с документом 1С, а ККТ успешно принимает чек.

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

Обратите внимание: режим «Не контролировать» отключает внутренние проверки 1С и передает данные «как есть», что гарантированно приводит к ошибке 36h при малейшем расхождении в округлении цен.

Для обычных форм (УПП 1.3, КА 1.1, УТ 10.3):

  1. Перейдем в справочник Торговое оборудование.
  2. Откроем карточку фискального регистратора.
  3. Найдем реквизит Способ форматно-логического контроля.
  4. Изменим его значение с «Не контролировать» на «Разделять строки».
  5. Запишем изменения.

---

Решение 2: Проблемы с автопечатью тегов покупателя (ИНН и Наименование физлиц)

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

Выясним причину конфликта:

Как исправить:

В коде обработчика фискализации перед отправкой XML-пакета на кассу необходимо проверять заполнение ИНН покупателя. Если покупателем является физическое лицо и его ИНН не заполнен, блок тегов покупателя вообще не должен формироваться и передаваться в драйвер ККТ.

---

Решение 3: Программное исправление алгоритма округления НДС

Если типовые настройки ФЛК не помогают (например, при продаже дробного количества товара с высокоточными копейками в оптовой торговле), программисту необходимо внести изменения в алгоритмы расчета НДС конфигурации.

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


Процедура ПересчитатьСуммуНДС(СтрокаТабличнойЧасти, ПараметрыРасчета) Экспорт

    // Выполняем стандартный расчет суммы без НДС и НДС
    ЦенаСНДС = СтрокаТабличнойЧасти.Цена;
    Количество = СтрокаТабличнойЧасти.Количество;
    
    // Рассчитываем итоговую сумму с НДС
    СуммаВсего = Округлить(ЦенаСНДС * Количество, 2);
    СтрокаТабличнойЧасти.Сумма = СуммаВсего;
    
    // Корректируем НДС и сумму без НДС во избежание коллизий в ККТ
    Если ПараметрыРасчета.СпособРасчетаНДС = ПредопределенноеЗначение("Перечисление.СпособыРасчетаНДС.НДСВТомЧисле") Тогда
        СтрокаТабличнойЧасти.СуммаНДС = Округлить((СуммаВсего * ПараметрыРасчета.СтавкаНДС) / (100 + ПараметрыРасчета.СтавкаНДС), 2);
        СтрокаТабличнойЧасти.СумаБезНДС = СуммаВсего - СтрокаТабличнойЧасти.СуммаНДС;
    ИначеЕсли ПараметрыРасчета.СпособРасчетаНДС = ПредопределенноеЗначение("Перечисление.СпособыРасчетаНДС.НДССверху") Тогда
        // Корректируем сумму без НДС так, чтобы СуммаБезНДС + НДС строго равнялось СуммаВсего
        СтрокаТабличнойЧасти.СумаБезНДС = Округлить(СуммаВсего / (1 + (ПараметрыРасчета.СтавкаНДС / 100)), 2);
        СтрокаТабличнойЧасти.СуммаНДС = СуммаВсего - СтрокаТабличнойЧасти.СумаБезНДС;
    КонецЕсли;

КонецПроцедуры

Данный подход позволяет выровнять копейки до отправки XML-пакета в драйвер ККТ, что полностью исключает программное несовпадение расчетов и предотвращает появление ошибки 36h на любых прошивках аппаратов Штрих-М.

← На главную