При печати чеков из документов «Приходный кассовый ордер» (ПКО) или «Эквайринговая операция» в программах «1С:Предприятие» пользователи кассовых аппаратов семейства Штрих-М часто сталкиваются с аппаратной ошибкой: «При выполнении операции произошла ошибка: 36h, Некорректные параметры в команде для данной реализации». Из-за этого печать чека полностью блокируется, а касса выдает предупреждение об ошибке фискального устройства.
В этой статье мы подробно разберем, почему возникает эта ошибка, как она связана с математическими округлениями в 1С, настройками драйвера ККТ и как решить проблему как стандартными программными средствами, так и с помощью доработки кода.
---
С технической точки зрения код ошибки 36h генерируется непосредственно ядром кассового аппарата «Штрих-М». Современные форматы фискальных данных (ФФД 1.05 и 1.2) накладывают строгие ограничения на структуру чека. Одно из главных правил ФФД — жесткое соблюдение равенства:
Цена × Количество = Сумма строки
Если в передаваемом из 1С XML-пакете касса обнаруживает нестыковку между произведением цены на количество и итоговой суммой позиции (даже если погрешность составляет всего 1 копейку), прошивка ККТ расценивает команду как некорректную и возвращает ошибку 36h.
Проанализируем классическую ситуацию, когда в 1С используется тип цен «НДС сверху» или рассчитываются автоматические скидки:
166,67 * 8 = 1333,36 руб. (сумма без НДС).1333,36 * 20% = 266,672 (округляем до 266,67 руб.).1333,36 + 266,67 = 1600,03 руб.36h.Также к этой ошибке приводят ситуации, когда в передаваемых XML-данных реквизиты ЦенаСоСкидками и Цена имеют расхождения при количестве товара, отличном от 1.
---
Самый простой и быстрый способ исправить ошибку без изменения программного кода — включить встроенный в «1С:Предприятие» механизм корректировки расхождений. Этот функционал заложен в Библиотеку подключаемого оборудования (БПО).
Давайте разберем по шагам, как настроить ФЛК в различных конфигурациях:
При выборе режима «Разделять строки» 1С автоматически анализирует математическую корректность чека. Если выявляется погрешность округления, система разбивает проблемную строку товара на две разные строки в чеке с разной ценой (одна строка с округлением в большую сторону, другая — в меньшую). Итоговое количество товара и общая сумма чека при этом полностью совпадают с документом 1С, а ККТ успешно принимает чек.
Если режим «Разделять строки» не решает проблему, попробуйте установить режим «Зачитывать суммы». В этом случае копейки будут списываться или добавляться за счет других товарных позиций в чеке.
Обратите внимание: режим «Не контролировать» отключает внутренние проверки 1С и передает данные «как есть», что гарантированно приводит к ошибке 36h при малейшем расхождении в округлении цен.
---
Еще один частый сценарий возникновения ошибки 36h связан с передачей данных покупателя в соответствии с требованиями законодательства. Если вы по рекомендации обслуживающей организации включили автоматическую печать тегов на уровне драйвера ККТ, это может вызвать конфликт при расчетах с физическими лицами.
Выясним причину конфликта:
36h.Как исправить:
В коде обработчика фискализации перед отправкой XML-пакета на кассу необходимо проверять заполнение ИНН покупателя. Если покупателем является физическое лицо и его ИНН не заполнен, блок тегов покупателя вообще не должен формироваться и передаваться в драйвер ККТ.
---
Если типовые настройки ФЛК не помогают (например, при продаже дробного количества товара с высокоточными копейками в оптовой торговле), программисту необходимо внести изменения в алгоритмы расчета НДС конфигурации.
Рассмотрим пример корректировки в общем модуле ОбщегоНазначенияКлиентСервер в процедуре ПересчитатьСуммуНДС. Нам нужно гарантировать, чтобы сумма строки строго соответствовала произведению округленной цены на количество:
Процедура ПересчитатьСуммуНДС(СтрокаТабличнойЧасти, ПараметрыРасчета) Экспорт
// Выполняем стандартный расчет суммы без НДС и НДС
ЦенаСНДС = СтрокаТабличнойЧасти.Цена;
Количество = СтрокаТабличнойЧасти.Количество;
// Рассчитываем итоговую сумму с НДС
СуммаВсего = Округлить(ЦенаСНДС * Количество, 2);
СтрокаТабличнойЧасти.Сумма = СуммаВсего;
// Корректируем НДС и сумму без НДС во избежание коллизий в ККТ
Если ПараметрыРасчета.СпособРасчетаНДС = ПредопределенноеЗначение("Перечисление.СпособыРасчетаНДС.НДСВТомЧисле") Тогда
СтрокаТабличнойЧасти.СуммаНДС = Округлить((СуммаВсего * ПараметрыРасчета.СтавкаНДС) / (100 + ПараметрыРасчета.СтавкаНДС), 2);
СтрокаТабличнойЧасти.СумаБезНДС = СуммаВсего - СтрокаТабличнойЧасти.СуммаНДС;
ИначеЕсли ПараметрыРасчета.СпособРасчетаНДС = ПредопределенноеЗначение("Перечисление.СпособыРасчетаНДС.НДССверху") Тогда
// Корректируем сумму без НДС так, чтобы СуммаБезНДС + НДС строго равнялось СуммаВсего
СтрокаТабличнойЧасти.СумаБезНДС = Округлить(СуммаВсего / (1 + (ПараметрыРасчета.СтавкаНДС / 100)), 2);
СтрокаТабличнойЧасти.СуммаНДС = СуммаВсего - СтрокаТабличнойЧасти.СумаБезНДС;
КонецЕсли;
КонецПроцедуры
Данный подход позволяет выровнять копейки до отправки XML-пакета в драйвер ККТ, что полностью исключает программное несовпадение расчетов и предотвращает появление ошибки 36h на любых прошивках аппаратов Штрих-М.