После обновления конфигурации 1С:Управление торговлей 10.3 до версии 10.3.49.4 (и более новых версий) многие пользователи и администраторы сталкиваются с критической проблемой при оформлении кассовых документов. При попытке распечатать чек из документов Приходный кассовый ордер (ПКО) или Расходный кассовый ордер (РКО), созданных на основании документа Реализация товаров и услуг (РТиУ), кассовый аппарат аннулирует операцию.
На бумажной ленте ККТ печатаются следующие строки:
ОФД: ООО "Компания "Тензор"
ОПЕРАЦИЯ ОТМЕНЕНА
ЧЕК АННУЛИРОВАН
Ждем Вас снова!
Добро пожаловать!
ОШИБКА ФН 231
При этом печать стандартных розничных чеков через документ ЧекККМ проходит абсолютно штатно и без ошибок. Печать чека из ПКО без документа-основания также работает, но в этом случае в чеке печатается обезличенный прием денежных средств (простой платеж), а не конкретный список переданных покупателю товаров, что является прямым нарушением требований действующего законодательства о применении ККТ (в частности, ФФД 1.05 и выше).
Давайте вместе подробно разберем, почему возникает эта ошибка, проанализируем технические нюансы взаимодействия 1С с фискальными накопителями и рассмотрим эффективные варианты устранения этой проблемы.
Для того чтобы понять природу возникновения неисправности, обратимся к технической спецификации фискальных накопителей. Код ошибки 231 означает: «Некорректное значение параметров команды ФН».
В контексте взаимодействия товароучетной системы 1С с кассовой техникой эта ошибка почти всегда свидетельствует о нестыковке системы налогообложения (СНО). Кассовый аппарат при регистрации (фискализации) в Федеральной налоговой службе настраивается на работу по строго определенным СНО (например, только ЕНВД, только Патент или только УСН). Когда 1С отправляет на кассу команду пробития чека, она обязательно передает в XML-пакете код СНО, по которой должна быть отражена данная продажа. Если касса получает код СНО, который не был активирован при регистрации аппарата (чаще всего это Общая система налогообложения — ОСН), физический фискальный накопитель блокирует операцию, аннулирует чек во избежание налоговых нарушений и возвращает ошибку 231.
Выясним причину, по которой розничные продажи через ЧекККМ пробиваются без ошибок, а оптовые или взаиморасчетные через ПКО/РКО вызывают сбой. Архитектура конфигурации 1С:Управление торговлей 10.3 разделяет розничную и оптовую торговлю:
TaxVariant="3").TaxVariant="0").Давайте проведем детальный технический анализ и посмотрим, что именно отправляет 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С в числовой код для кассового драйвера.Посмотрим на пример модификации кода:
Функция ПолучитьКодСНОККТ(СистемаНалогообложения) Экспорт
// [Стандартный код сопоставления значений перечисления]
// ...
// Если система не смогла определить СНО по умолчанию или возникла ошибка:
// Было:
// Возврат 0;
// Стало (принудительный возврат ЕНВД, соответствующий коду 3):
Возврат 3;
КонецФункции
Важное предупреждение: Данный метод является классическим "костылем". Изменение общего модуля делает вашу конфигурацию нетиповой, и при следующем автоматическом обновлении этот код будет перезаписан стандартным. Используйте этот способ только в том случае, если кассу нужно запустить срочно, а времени на детальную настройку учета нет.
Попробуем решить проблему без изменения программного кода 1С, настроив данные в информационной базе. В УТ 10.3 сведения о СНО хранятся в регистре сведений Учетная политика (налоговый учет).
Зачастую при настройках учетной политики для организации, работающей исключительно на ЕНВД или Патенте, в интерфейсе визуально остаются активными параметры общей системы (ОСН), поскольку конфигурация требует указать "основную" систему налогообложения для оптовых операций.
Для исправления этой ситуации выполним следующие действия:
Учетная политика (налоговый учет), принудительно очистив признаки ОСН/УСН для нашей организации.После правильной настройки регистра 1С при формировании ПКО с основанием не обнаружит признаков ОСН и будет вынуждена транслировать код ЕНВД во все кассовые документы.
Этот способ позволяет решить проблему вообще без вмешательства в базу данных 1С — как в код, так и в настройки документов. Мы можем настроить сам кассовый аппарат так, чтобы при получении некорректного или пустого значения СНО он автоматически подставлял нужный нам спецрежим.
Проанализируем этот вариант на примере драйвера ККТ АТОЛ 10.х (для других производителей, таких как Штрих-М, логика действий аналогична):
Важный нюанс: Данный метод сработает только в том случае, если ваша 1С передает пустое значение СНО или драйвер кассы настроен на принудительное игнорирование тегов СНО из внешних систем. Если 1С жестко отправляет в XML-пакете параметр TaxVariant="0", касса может проигнорировать дефолтную настройку и все равно выдать ошибку 231. Поэтому данный метод обязательно нужно тестировать на конкретной версии прошивки вашей ККТ.
Еще один профессиональный и изящный способ исправления — переопределение СНО непосредственно во внешней обработке обслуживания торгового оборудования.
В 1С:УТ 10.3 для связи с кассами используются внешние обработки (файлы с расширением .epf), такие как ATOLkkt.epf или аналогичные для Штрих-М. Изменив логику обработки, мы сохраним типовую конфигурацию 1С полностью на поддержке, а наши изменения не затрутся при обновлениях программы.
Разберем этот процесс по шагам:
.epf в Конфигураторе.ФискализироватьЧек, ПечатьЧека или ПечатьФискальногоДокумента).Пример программного кода для вставки в обработку обслуживания:
// В процедуре подготовки параметров фискализации:
Если ПараметрыЧека.Свойство("СистемаНалогообложения") Тогда
// Принудительно устанавливаем ЕНВД для всех документов
ПараметрыЧека.СистемаНалогообложения = Перечисления.ТипыСистемНалогообложенияККТ.ЕНВД;
КонецЕсли;
После внесения изменений сохраним файл обработки и загрузим его обратно в справочник торгового оборудования 1С. Теперь при печати любого фискального документа (будь то Чек ККМ, ПКО или РКО) обработка будет гарантированно передавать в кассу правильный код СНО.
Мы детально разобрали причины возникновения ошибки ФН 231 при обновлении 1С:УТ 10.3 и рассмотрели четыре различных подхода к ее устранению. Для долгосрочной и стабильной работы рекомендуется использовать **Способ 2** (настройка учетной политики) или **Способ 4** (модификация внешней обработки обслуживания), так как они позволяют сохранить типовую конфигурацию 1С обновляемой и не требуют постоянного вмешательства программистов при последующих релизах конфигурации.