Как исправить ошибку ФН 231 при печати чеков из ПКО и РКО после обновления 1С:Управление торговлей 10.3?

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

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

На бумажной ленте ККТ печатаются следующие строки:


ОФД: ООО "Компания "Тензор"
ОПЕРАЦИЯ ОТМЕНЕНА
ЧЕК АННУЛИРОВАН
Ждем Вас снова!
Добро пожаловать!
ОШИБКА ФН 231

При этом печать стандартных розничных чеков через документ ЧекККМ проходит абсолютно штатно и без ошибок. Печать чека из ПКО без документа-основания также работает, но в этом случае в чеке печатается обезличенный прием денежных средств (простой платеж), а не конкретный список переданных покупателю товаров, что является прямым нарушением требований действующего законодательства о применении ККТ (в частности, ФФД 1.05 и выше).

Давайте вместе подробно разберем, почему возникает эта ошибка, проанализируем технические нюансы взаимодействия 1С с фискальными накопителями и рассмотрим эффективные варианты устранения этой проблемы.

Анализируем суть проблемы и расшифровку ошибки ФН 231

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

В контексте взаимодействия товароучетной системы 1С с кассовой техникой эта ошибка почти всегда свидетельствует о нестыковке системы налогообложения (СНО). Кассовый аппарат при регистрации (фискализации) в Федеральной налоговой службе настраивается на работу по строго определенным СНО (например, только ЕНВД, только Патент или только УСН). Когда 1С отправляет на кассу команду пробития чека, она обязательно передает в XML-пакете код СНО, по которой должна быть отражена данная продажа. Если касса получает код СНО, который не был активирован при регистрации аппарата (чаще всего это Общая система налогообложения — ОСН), физический фискальный накопитель блокирует операцию, аннулирует чек во избежание налоговых нарушений и возвращает ошибку 231.

Почему ПКО и Чек ККМ работают по-разному в УТ 10.3?

Выясним причину, по которой розничные продажи через ЧекККМ пробиваются без ошибок, а оптовые или взаиморасчетные через ПКО/РКО вызывают сбой. Архитектура конфигурации 1С:Управление торговлей 10.3 разделяет розничную и оптовую торговлю:

  1. Документ "Чек ККМ": Спроектирован исключительно для розницы. При его проведении и печати система обращается к настройкам розничной торговой точки, склада или кассы ККМ. Программа определяет, что розничные продажи ведутся по специальному режиму (например, ЕНВД), и передает в XML-файле корректный код СНО (TaxVariant="3").
  2. Документы "ПКО" и "РКО": Относятся к расчетам с контрагентами (оптовая или мелкооптовая торговля). При печати фискального чека из ПКО, созданного на основании Реализации товаров, система пытается определить СНО по основной деятельности организации. В обновленных алгоритмах УТ 10.3 логика определения СНО для расчетов с контрагентами часто дает сбой: если в учетной политике организации ЕНВД настроен только как спецрежим для розничной торговли, а основная деятельность не настроена должным образом (или по умолчанию предполагается ОСН), то 1С принудительно подставляет в XML-пакет код общей системы налогообложения — ОСН (TaxVariant="0").

Сравнение XML-пакетов при фискализации чека

Давайте проведем детальный технический анализ и посмотрим, что именно отправляет 1С на кассовый аппарат в обоих случаях. Для этого мы можем установить точку останова в общем серверном модуле МенеджерОборудованияВызовСервера.ПолучитьXMLПакетДляФискализацияЧека и проанализировать текст XML.

Вот пакет, который формирует 1С при печати чека из ПКО с документом-основанием (вызывает ошибку):


<?xml version="1.0" encoding="UTF-8"?>
<CheckPackage>
    <Parameters PaymentType="1" TaxVariant="0" CashierName="" CustomerEmail="" CustomerPhone="">
        <AgentData/>
        <PurveyorData/>
    </Parameters>
    <Positions>
        <FiscalString Name="Ароматизатор Грасс в ассортименте шт" Quantity="1" PriceWithDiscount="20" SumWithDiscount="20" DiscountSum="" Department="0" Tax="none" SignMethodCalculation="4" SignCalculationObject="1" TaxSum="0"/>
    </Positions>
    <Payments Cash="20" ElectronicPayment="0" Credit="0" AdvancePayment="0" CashProvision="0"/>
</CheckPackage>

Обратите внимание на атрибут TaxVariant="0" в заголовке параметров. Значение "0" сообщает кассе о необходимости применить ОСН.

А теперь посмотрим на XML-пакет, формируемый при печати из **Чека ККМ (печатается успешно)**:


<?xml version="1.0" encoding="UTF-8"?>
<CheckPackage>
    <Parameters PaymentType="1" TaxVariant="3" CashierName="" CustomerEmail="" CustomerPhone="">
        <AgentData/>
        <PurveyorData/>
    </Parameters>
    <Positions>
        <FiscalString Name="Ароматизатор Грасс в ассортименте шт" Quantity="1" PriceWithDiscount="20" SumWithDiscount="20" DiscountSum="" Department="0" Tax="none" SignMethodCalculation="4" SignCalculationObject="1" TaxSum=""/>
    </Positions>
    <Payments Cash="20" ElectronicPayment="0" Credit="0" AdvancePayment="0" CashProvision="0"/>
</CheckPackage>

Здесь четко видно значение TaxVariant="3". Именно этот параметр соответствует ЕНВД (или иному спецрежиму в зависимости от настроек вашей ККТ). Физический фискальный накопитель, зарегистрированный под ЕНВД, принимает этот пакет и успешно печатает чек.

Таким образом, наша задача сводится к тому, чтобы заставить систему 1С передавать правильный код СНО (в данном примере — ЕНВД, значение "3") при печати чеков из документов ПКО и РКО. Ниже подробно описаны четыре практических способа решения этой задачи.

Способ 1: Программное исправление в общем модуле (Быстрый костыль)

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

Рассмотрим по шагам, как это сделать:

  1. Откроем базу 1С:УТ 10.3 в режиме Конфигуратор.
  2. Найдем общий модуль МенеджерОборудованияКлиентСервер.
  3. Перейдем к функции ПолучитьКодСНОККТ(СистемаНалогообложения). Эта функция преобразует СНО из перечисления 1С в числовой код для кассового драйвера.
  4. В самом конце функции перед возвратом значения по умолчанию (которое обычно равно 0, то есть ОСН) принудительно укажем нужный нам код спецрежима.

Посмотрим на пример модификации кода:


Функция ПолучитьКодСНОККТ(СистемаНалогообложения) Экспорт

    // [Стандартный код сопоставления значений перечисления]
    // ...
    
    // Если система не смогла определить СНО по умолчанию или возникла ошибка:
    // Было:
    // Возврат 0; 
    
    // Стало (принудительный возврат ЕНВД, соответствующий коду 3):
    Возврат 3; 

КонецФункции

Важное предупреждение: Данный метод является классическим "костылем". Изменение общего модуля делает вашу конфигурацию нетиповой, и при следующем автоматическом обновлении этот код будет перезаписан стандартным. Используйте этот способ только в том случае, если кассу нужно запустить срочно, а времени на детальную настройку учета нет.

Способ 2: Корректировка регистра «Учетная политика (налоговый учет)»

Попробуем решить проблему без изменения программного кода 1С, настроив данные в информационной базе. В УТ 10.3 сведения о СНО хранятся в регистре сведений Учетная политика (налоговый учет).

Зачастую при настройках учетной политики для организации, работающей исключительно на ЕНВД или Патенте, в интерфейсе визуально остаются активными параметры общей системы (ОСН), поскольку конфигурация требует указать "основную" систему налогообложения для оптовых операций.

Для исправления этой ситуации выполним следующие действия:

  1. Перейдем в меню Предприятие -> Учетная политика -> Учетная политика (налоговый учет).
  2. Откроем действующую запись учетной политики нашей организации.
  3. Если интерфейс формы позволяет, снимем все флаги, относящиеся к ОСН или УСН, оставив активным только спецрежим (ЕНВД или Патент).
  4. В случаях, когда стандартная форма не дает записать изменения без указания основной СНО, воспользуемся универсальной обработкой "Групповая обработка справочников и документов" или напишем простейший скрипт на встроенном языке для прямой записи в регистр сведений Учетная политика (налоговый учет), принудительно очистив признаки ОСН/УСН для нашей организации.

После правильной настройки регистра 1С при формировании ПКО с основанием не обнаружит признаков ОСН и будет вынуждена транслировать код ЕНВД во все кассовые документы.

Способ 3: Настройка СНО по умолчанию в драйвере ККТ

Этот способ позволяет решить проблему вообще без вмешательства в базу данных 1С — как в код, так и в настройки документов. Мы можем настроить сам кассовый аппарат так, чтобы при получении некорректного или пустого значения СНО он автоматически подставлял нужный нам спецрежим.

Проанализируем этот вариант на примере драйвера ККТ АТОЛ 10.х (для других производителей, таких как Штрих-М, логика действий аналогична):

  1. Полностью закроем программу 1С на рабочем компьютере, чтобы освободить порт подключения к кассе.
  2. Запустим утилиту "Тест драйвера ККТ".
  3. Установим флаг "Включено" в верхнем правом углу для установки связи с кассовым аппаратом.
  4. Перейдем в раздел "Свойства" -> "Параметры ККТ".
  5. В открывшемся дереве настроек найдем раздел, отвечающий за системы налогообложения (или настройки секций/отделов ККТ).
  6. Установим СНО по умолчанию — ЕНВД (или Патент/УСН в зависимости от вашей деятельности).
  7. Сохраним настройки в память ККТ, перезагрузим аппарат и запустим 1С для проверки печати ПКО.

Важный нюанс: Данный метод сработает только в том случае, если ваша 1С передает пустое значение СНО или драйвер кассы настроен на принудительное игнорирование тегов СНО из внешних систем. Если 1С жестко отправляет в XML-пакете параметр TaxVariant="0", касса может проигнорировать дефолтную настройку и все равно выдать ошибку 231. Поэтому данный метод обязательно нужно тестировать на конкретной версии прошивки вашей ККТ.

Способ 4: Изменение внешней обработки обслуживания ККТ

Еще один профессиональный и изящный способ исправления — переопределение СНО непосредственно во внешней обработке обслуживания торгового оборудования.

В 1С:УТ 10.3 для связи с кассами используются внешние обработки (файлы с расширением .epf), такие как ATOLkkt.epf или аналогичные для Штрих-М. Изменив логику обработки, мы сохраним типовую конфигурацию 1С полностью на поддержке, а наши изменения не затрутся при обновлениях программы.

Разберем этот процесс по шагам:

  1. Перейдем в справочник "Обработки обслуживания торгового оборудования" в 1С и выгрузим используемую обработку во внешний файл на жесткий диск.
  2. Откроем этот файл .epf в Конфигураторе.
  3. Найдем функцию, которая отвечает за отправку XML-пакета на кассу (обычно она называется ФискализироватьЧек, ПечатьЧека или ПечатьФискальногоДокумента).
  4. В коде этой функции перед непосредственным вызовом методов драйвера ККТ найдем структуру параметров чека и добавим жесткую установку СНО.

Пример программного кода для вставки в обработку обслуживания:


// В процедуре подготовки параметров фискализации:
Если ПараметрыЧека.Свойство("СистемаНалогообложения") Тогда
    // Принудительно устанавливаем ЕНВД для всех документов
    ПараметрыЧека.СистемаНалогообложения = Перечисления.ТипыСистемНалогообложенияККТ.ЕНВД;
КонецЕсли;

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

Резюме и рекомендации

Мы детально разобрали причины возникновения ошибки ФН 231 при обновлении 1С:УТ 10.3 и рассмотрели четыре различных подхода к ее устранению. Для долгосрочной и стабильной работы рекомендуется использовать **Способ 2** (настройка учетной политики) или **Способ 4** (модификация внешней обработки обслуживания), так как они позволяют сохранить типовую конфигурацию 1С обновляемой и не требуют постоянного вмешательства программистов при последующих релизах конфигурации.

← На главную