Приветствуем, коллеги! В этой статье мы детально разберем крайне распространенную проблему, возникающую у пользователей конфигурации «1С:Управление торговлей 10.3» при работе с онлайн-кассами (в частности, популярного бренда АТОЛ, например АТОЛ 30Ф). Ошибка с кодом ФН 231 способна полностью заблокировать процесс розничных продаж и оформление приходных кассовых ордеров (ПКО). Мы выясним причину её возникновения, проанализируем внутренние механизмы платформы 1С и рассмотрим как штатные методы исправления, так и программные способы обхода этой ошибки.
Для того чтобы эффективно бороться с неисправностью, сначала разберем ее техническую суть. В фискальных накопителях и протоколах ККТ (включая драйверы АТОЛ 10-й версии, где она часто дублируется кодом -3975) ошибка 231 расшифровывается как «Некорректное значение параметров команды ФН».
Применительно к реквизиту «Система налогообложения» (СНО, тег 1055 в фискальных документах) эта ошибка возникает в следующих типовых сценариях:
Таким образом, появление этой ошибки всегда сигнализирует о том, что программа 1С пытается передать в XML-пакете фискализации ту систему налогообложения, которую касса в данный момент принять не может.
Рассмотрим внутреннюю логику работы старой, но до сих пор активно используемой конфигурации 1С:Управление торговлей 10.3 на обычных формах. Пользователи часто сталкиваются с ситуацией: обычные розничные чеки из документа «Чек ККМ» бьются корректно (с ЕНВД), а при попытке пробить чек из документа «Приходный кассовый ордер» (ПКО), выписанного на основании оптовой продажи, касса выдает ошибку 231 или печатает чек с ОСН.
Выясним причину такого поведения системы. В конфигурации 1С выбор СНО для чека завязан на сложную цепочку проверок:
Во-первых, программа анализирует тип склада в документе-основании (например, в «Реализации товаров и услуг»). Признак ЕНВД в УТ 10.3 жестко привязан к розничной торговле. Чтобы система автоматически подставила ЕНВД в чек, продажа должна осуществляться со склада, имеющего вид «Розничный» или «НТТ» (неавтоматизированная торговая точка), и для этого склада в системе должен быть установлен флаг «Розничная торговля облагается ЕНВД».
Во-вторых, если сделка оформляется с оптового склада, программа считает операцию оптовой. Поскольку оптовая торговля по определению не может беспрепятственно облагаться ЕНВД без ведения раздельного учета, 1С игнорирует розничные настройки и обращается напрямую к регистру сведений «Учетная политика (налоговый учет)». Если в учетной политике основным режимом задан общая система, то в чек принудительно передается ОСН.
Давайте посмотрим на то, как выглядит функция определения системы налогообложения в кодовой базе 1С:
Функция СистемаНалогообложения(Организация, ДатаДокумента = Неопределено, ПриоритетныйПорядок = Неопределено) Экспорт
Если ПриоритетныйПорядок <> Неопределено Тогда
Если ВРег(ПриоритетныйПорядок) = "ЕНВД" Тогда
Результат = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ЕНВД");
Возврат Результат;
КонецЕсли;
КонецЕсли;
Если ДатаДокумента = Неопределено Тогда
ДатаДокумента = ТекущаяДата();
КонецЕсли;
Отказ = Ложь;
УП = ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитикиНалоговыйУчет(ДатаДокумента, Отказ, Организация);
Если УП = Неопределено Тогда
Результат = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ПустаяСсылка");
ИначеЕсли УП.СистемаНалогообложения = ПредопределенноеЗначение("Перечисление.СистемыНалогообложения.Общая") Тогда
Результат = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ОСН");
ИначеЕсли УП.СистемаНалогообложения = ПредопределенноеЗначение("Перечисление.СистемыНалогообложения.Упрощенная") Тогда
Если УП.ОбъектНалогообложенияУСН = ПредопределенноеЗначение("Перечисление.ОбъектыНалогообложенияПоУСН.Доходы") Тогда
Результат = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.УСНДоход");
ИначеЕсли УП.ОбъектНалогообложенияУСН = ПредопределенноеЗначение("Перечисление.ОбъектыНалогообложенияПоУСН.ДоходыМинусРасходы") Тогда
Результат = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.УСНДоходРасход");
Иначе
Результат = PredefinedValue("Перечисление.ТипыСистемНалогообложенияККТ.ПустаяСсылка");
КонецЕсли;
Иначе
Результат = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ПустаяСсылка");
КонецЕсли;
Возврат Результат;
КонецФункции
Как мы видим из приведенного алгоритма, ЕНВД (или патентная система) здесь даже не фигурирует в качестве базового выбора из настроек учетной политики организации, если приоритетный порядок не определен из контекста складского учета розницы.
Если перед вами стоит задача решить проблему без привлечения программиста и внесения изменений в конфигурацию, выполним следующие шаги:
Что делать, если специфика ведения учета на предприятии не позволяет перевести склады в статус розничных (например, продажи действительно оптовые по своей сути в системе, но касса аппаратно залочена под спецрежим ЕНВД/УСН)? В этом случае нам поможет небольшая доработка конфигурации.
Для того чтобы принудительно передавать нужную систему налогообложения на ККТ при фискализации любых документов, выполним следующие действия по шагам:
МенеджерОборудованияВызовСервера.ПодготовитьДанныеДляФискализацииЧека.
ОбщиеПараметры.СистемаНалогообложения = МенеджерОборудованияКлиентСервер.СистемаНалогообложения(ОрганизацияЧека, Ссылка.Дата);
// Принудительно передаем ЕНВД для ККТ, чтобы обойти ошибку ФН 231
ОбщиеПараметры.СистемаНалогообложения = Перечисления.ТипыСистемНалогообложенияККТ.ЕНВД;
Если на кассе совмещаются несколько систем налогообложения, мы можем сделать более гибкую проверку. Проанализируем реквизиты документа-основания и будем передавать ЕНВД только тогда, когда это действительно необходимо, избегая затирания СНО для других видов деятельности:
Если Ссылка.Метаданные().Имя = "ПриходныйКассовыйОрдер" Тогда
// Если ПКО оформлен по определенному виду операции или складу
ОбщиеПараметры.СистемаНалогообложения = Перечисления.ТипыСистемНалогообложенияККТ.ЕНВД;
Иначе
ОбщиеПараметры.СистемаНалогообложения = МенеджерОборудованияКлиентСервер.СистемаНалогообложения(ОрганизацияЧека, Ссылка.Дата);
КонецЕсли;
После внесения этих изменений обязательно сохраним конфигурацию и обновим базу данных. Теперь при печати чеков из ПКО программа будет принудительно отправлять в XML-пакет корректный тег СНО, и ошибка ФН 231 перестанет беспокоить кассиров.
Некоторые пользователи игнорируют тот факт, что в «обычных» чеках у них печатается ОСН вместо ЕНВД, радуясь тому, что «касса хотя бы не выдает ошибку и печатает документ». Это крайне опасное заблуждение! Укажем основные риски:
Для исправления ранее пробитых некорректных чеков (где ушла ОСН вместо ЕНВД) в формате фискальных данных ФФД 1.05 необходимо сделать операцию аннулирования: пробить чек «Возврат прихода» с точно такими же неверными данными (чтобы обнулить ошибочную сумму по ОСН), а затем пробить правильный чек «Приход» с указанием корректной СНО ЕНВД.
Иногда проблема кроется не только в коде 1С, но и в рассинхронизации внутренних настроек торгового оборудования. Проверим следующие параметры:
Мы подробно разобрали причины возникновения ошибки ФН 231, изучили логику конфигурации «1С:Управление торговлей 10.3» и предоставили вам как штатные, так и программные инструменты для ее устранения. Применяйте эти знания на практике, следите за соответствием реквизитов требованиям налогового законодательства и пусть ваша кассовая техника работает без сбоев!