Как исправить ошибку ККТ «94: Неверная операция» при печати чека с маркировкой в 1С?

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

При интеграции кассового оборудования с самописными конфигурациями или при обновлении прошивок ККТ и драйверов разработчики часто сталкиваются с аппаратными отказами кассы. Одной из типичных проблем является ошибка «Ошибка ККТ (94: Неверная операция)», возникающая исключительно в момент попытки пробить фискальный чек, содержащий маркированную продукцию (воду, молочную продукцию, обувь, текстиль и др.). Рассмотрим подробнее, почему возникает эта ошибка и как сформировать корректный XML-пакет фискализации.

Анализ исходного XML-пакета фискализации

Проанализируем пример данных, передаваемых в драйвер торгового оборудования (механизм CheckPackage), который приводит к ошибке 94:


<?xml version="1.0" encoding="UTF-8"?>
<CheckPackage>
    <Parameters CashierName="Иванов И. И." OperationType="1" TaxationSystem="0" SaleAddress="" SaleLocation="Касса" GroupingPositionsWhenPrinting="false" CustomerEmail="" CustomerPhone="" OperationOnline="false">
        <CorrectionData Type="0"/>
        <UserAttribute Name="mdlp" Value="sid00000000184903&"/>
        <AgentData/>
        <VendorData/>
        <CustomerDetail/>
        <OperationalAttribute/>
        <IndustryAttribute/>
    </Parameters>
    <Positions>
        <Barcode Type="EAN13" ValueBase64="NDAwMDAwMDAwMDA0NA=="/>
        <FiscalString Name="СТЭЛМАС МИНЕРАЛ  3+ 0,6л пэт" Quantity="1" PriceWithDiscount="50" AmountWithDiscount="50" DiscountAmount="0" Department="1" VATRate="10" VATAmount="4.55" PaymentMethod="4" CalculationSubject="1" MarkingCode="MDEwNDYwNzgxMTA0MDQzODIxNVNnQnlqcVc4Riw/eh05M2M1bis=" MeasureOfQuantity="0">
            <AgentData/>
            <VendorData/>
            <IndustryAttribute IdentifierFOIV="030" DocumentDate="21.11.2023" DocumentNumber="1944" AttributeValue="UUID=968558e6-1767-4bc9-bbcb-c8fe0f73d985&Time=1756877449577"/>
        </FiscalString>
    </Positions>
    <Payments Cash="50" ElectronicPayment="0" PrePayment="0" PostPayment="0" Barter="0"/>
</CheckPackage>

Обратим внимание на атрибуты тега FiscalString. В пакете одновременно передаются:

  1. Код маркировки в атрибуте MarkingCode (значение в Base64).
  2. Отраслевой реквизит IndustryAttribute в рамках разрешительного режима (Постановление № 1944).
  3. Признак предмета расчета: CalculationSubject="1".

Причина ошибки: несоответствие признака предмета расчета требованиям ФФД 1.2

Выясним причину сбоя: значение CalculationSubject="1" соответствует обычному товару, не подлежащему обязательной маркировке средствами идентификации. Согласно формату фискальных документов ФФД 1.2 (тег 1212 «Признак предмета расчета»), комбинация, когда позиция содержит код маркировки (тег 1163 / MarkingCode), но при этом объявлена как простой товар (значение 1), является недопустимой. Прошивка ККТ после обновления распознает это противоречие и блокирует пробитие чека с кодом 94: Неверная операция.

Для исправления ситуации значение реквизита CalculationSubject в теге FiscalString должно быть строго скорректировано в зависимости от типа реализуемого товара:

  1. 33 — «Товар, подлежащий маркировке средствами идентификации, имеющий код маркировки» (для обычной маркированной продукции, например упакованной воды или молочной продукции).
  2. 30 — «Подакцизный товар, подлежащий маркировке средствами идентификации, имеющий код маркировки» (для подакцизной продукции, например табачных изделий).

Исправление формирования XML в 1С

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

Посмотрим на пример кода на встроенном языке 1С:


// Определяем признак предмета расчета согласно требованиям ФФД 1.2
Если Не ПустаяСтрока(СтрокаТовара.ШтрихкодМаркировки) Тогда
    Если СтрокаТовара.Подакцизный Тогда
        ПризнакПредметаРасчета = 30; // Маркированный подакцизный товар
    Иначе
        ПризнакПредметаРасчета = 33; // Маркированный товар с кодом маркировки
    КонецЕсли;
Иначе
    Если СтрокаТовара.Подакцизный Тогда
        ПризнакПредметаРасчета = 2;  // Подакцизный товар без маркировки
    Иначе
        ПризнакПредметаРасчета = 1;  // Обычный товар
    КонецЕсли;
КонецЕсли;

// Запись узла позиции в формируемый XML
ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
ЗаписьXML.ЗаписатьАтрибут("Name", СокрЛП(СтрокаТовара.НоменклатураНаименование));
ЗаписьXML.ЗаписатьАтрибут("Quantity", Формат(СтрокаТовара.Количество, "ЧДЦ=3; ЧРД=.; ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("PriceWithDiscount", Формат(СтрокаТовара.Цена, "ЧДЦ=2; ЧРД=.; ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("AmountWithDiscount", Формат(СтрокаТовара.Сумма, "ЧДЦ=2; ЧРД=.; ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("CalculationSubject", Формат(ПризнакПредметаРасчета, "ЧГ=0"));

Если Не ПустаяСтрока(СтрокаТовара.ШтрихкодМаркировкиBase64) Тогда
    ЗаписьXML.ЗаписатьАтрибут("MarkingCode", СтрокаТовара.ШтрихкодМаркировкиBase64);
КонецЕсли;

После корректировки строка формирования позиции в результирующем XML-пакете примет следующий вид:


<FiscalString Name="СТЭЛМАС МИНЕРАЛ  3+ 0,6л пэт" Quantity="1" PriceWithDiscount="50" AmountWithDiscount="50" DiscountAmount="0" Department="1" VATRate="10" VATAmount="4.55" PaymentMethod="4" CalculationSubject="33" MarkingCode="MDEwNDYwNzgxMTA0MDQzODIxNVNnQnlqcVc4Riw/eh05M2M1bis=" MeasureOfQuantity="0">

Дополнительные проверки при возникновении ошибки 94

Если после установки CalculationSubject="33" ошибка сохраняется, рекомендуем проверить сопутствующие аппаратные и программные факторы:

  1. Проверка перерегистрации ККТ: касса должна быть перерегистрирована под ФФД 1.2 с установленным признаком торговли маркированными товарами. Если в фискальном накопителе данный признак выключен, касса отклонит чек с кодом маркировки.
  2. Проверка лицензий ККТ: при обновлении прошивки аппаратов (в частности, Штрих-М и Атол) могут сбрасываться лицензии/подписки на работу с маркировкой ФФД 1.2. Проверьте статус лицензий через тест драйвера производителя ККТ.
  3. Протокол валидации марки в ФФД 1.2: по правилам ФФД 1.2 перед печатью фискального чека драйвер должен выполнить проверку кода маркировки через ФН и сервер ОИСМ (запросы проверки КМ). Если касса работает в автономном режиме без завершения сессии проверки марки, фискализация может блокироваться прошивкой.
← На главную