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

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

Приветствуем, коллеги! В этой статье мы детально разберем крайне распространенную проблему, возникающую у пользователей конфигурации «1С:Управление торговлей 10.3» при работе с онлайн-кассами (в частности, популярного бренда АТОЛ, например АТОЛ 30Ф). Ошибка с кодом ФН 231 способна полностью заблокировать процесс розничных продаж и оформление приходных кассовых ордеров (ПКО). Мы выясним причину её возникновения, проанализируем внутренние механизмы платформы 1С и рассмотрим как штатные методы исправления, так и программные способы обхода этой ошибки.

Что означает «Ошибка ФН 231» на уровне кассового аппарата?

Для того чтобы эффективно бороться с неисправностью, сначала разберем ее техническую суть. В фискальных накопителях и протоколах ККТ (включая драйверы АТОЛ 10-й версии, где она часто дублируется кодом -3975) ошибка 231 расшифровывается как «Некорректное значение параметров команды ФН».

Применительно к реквизиту «Система налогообложения» (СНО, тег 1055 в фискальных документах) эта ошибка возникает в следующих типовых сценариях:

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

Таким образом, появление этой ошибки всегда сигнализирует о том, что программа 1С пытается передать в XML-пакете фискализации ту систему налогообложения, которую касса в данный момент принять не может.

Почему в 1С:Управление торговлей 10.3 приходники печатаются с ОСН?

Рассмотрим внутреннюю логику работы старой, но до сих пор активно используемой конфигурации 1С:Управление торговлей 10.3 на обычных формах. Пользователи часто сталкиваются с ситуацией: обычные розничные чеки из документа «Чек ККМ» бьются корректно (с ЕНВД), а при попытке пробить чек из документа «Приходный кассовый ордер» (ПКО), выписанного на основании оптовой продажи, касса выдает ошибку 231 или печатает чек с ОСН.

Выясним причину такого поведения системы. В конфигурации 1С выбор СНО для чека завязан на сложную цепочку проверок:

Во-первых, программа анализирует тип склада в документе-основании (например, в «Реализации товаров и услуг»). Признак ЕНВД в УТ 10.3 жестко привязан к розничной торговле. Чтобы система автоматически подставила ЕНВД в чек, продажа должна осуществляться со склада, имеющего вид «Розничный» или «НТТ» (неавтоматизированная торговая точка), и для этого склада в системе должен быть установлен флаг «Розничная торговля облагается ЕНВД».

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

Давайте посмотрим на то, как выглядит функция определения системы налогообложения в кодовой базе 1С:


Функция СистемаНалогообложения(Организация, ДатаДокумента = Неопределено, ПриоритетныйПорядок = Неопределено) Экспорт
    
    Если ПриоритетныйПорядок <> Неопределено Тогда
        Если ВРег(ПриоритетныйПорядок) = "ЕНВД" Тогда
            Результат = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ЕНВД");
            Возврат Результат;
        КонецЕсли;
    КонецЕсли;
    
    Если ДатаДокумента = Неопределено Тогда
        ДатаДокумента = ТекущаяДата();
    КонецЕсли;
    Отказ = Ложь;
    УП = ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитикиНалоговыйУчет(ДатаДокумента, Отказ, Организация);
    
    Если УП = Неопределено Тогда
        Результат = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ПустаяСсылка");
    ИначеЕсли УП.СистемаНалогообложения = ПредопределенноеЗначение("Перечисление.СистемыНалогообложения.Общая") Тогда
        Результат = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ОСН");
    ИначеЕсли УП.СистемаНалогообложения = ПредопределенноеЗначение("Перечисление.СистемыНалогообложения.Упрощенная") Тогда
        Если УП.ОбъектНалогообложенияУСН = ПредопределенноеЗначение("Перечисление.ОбъектыНалогообложенияПоУСН.Доходы") Тогда
            Результат = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.УСНДоход");
        ИначеЕсли УП.ОбъектНалогообложенияУСН = ПредопределенноеЗначение("Перечисление.ОбъектыНалогообложенияПоУСН.ДоходыМинусРасходы") Тогда
            Результат = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.УСНДоходРасход");
        Иначе
            Результат = PredefinedValue("Перечисление.ТипыСистемНалогообложенияККТ.ПустаяСсылка");
        КонецЕсли;
    Иначе
        Результат = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ПустаяСсылка");
    КонецЕсли;
        
    Возврат Результат;
КонецФункции

Как мы видим из приведенного алгоритма, ЕНВД (или патентная система) здесь даже не фигурирует в качестве базового выбора из настроек учетной политики организации, если приоритетный порядок не определен из контекста складского учета розницы.

Решение проблемы штатными средствами (без изменения кода)

Если перед вами стоит задача решить проблему без привлечения программиста и внесения изменений в конфигурацию, выполним следующие шаги:

  1. Проанализируем документы, на основании которых выписываются приходные кассовые ордера. Если это документы «Реализация товаров и услуг» или «Заказ покупателя», обратите внимание на поле «Склад».
  2. Перейдем в справочник «Склады (места хранения)» и откроем карточку используемого склада.
  3. Убедимся, что вид склада установлен как «Розничный» (или «НТТ»). Если склад указан как «Оптовый», то программа 1С принудительно отправит в чек общую систему налогообложения, прописанную в вашей учетной политике.
  4. Установим в карточке розничного склада флаг «Розничная торговля облагается ЕНВД». Это заставит систему при определении СНО переключаться на ЕНВД при проведении розничных продаж и печати чеков по этой торговой точке.
  5. Проверим настройки в регистре «Учетная политика (налоговый учет)». Если ваша организация работает исключительно на ЕНВД (или патенте), убедитесь, что в системе не активирована по ошибке общая система налогообложения в качестве основной.

Программное решение проблемы (для разработчиков)

Что делать, если специфика ведения учета на предприятии не позволяет перевести склады в статус розничных (например, продажи действительно оптовые по своей сути в системе, но касса аппаратно залочена под спецрежим ЕНВД/УСН)? В этом случае нам поможет небольшая доработка конфигурации.

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

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

ОбщиеПараметры.СистемаНалогообложения = МенеджерОборудованияКлиентСервер.СистемаНалогообложения(ОрганизацияЧека, Ссылка.Дата);
  1. Заменим автоопределение СНО на жесткое программное присвоение (или добавим условие). Например, если нам необходимо, чтобы абсолютно все чеки по кассе пробивались по системе ЕНВД, мы можем написать следующее:

// Принудительно передаем ЕНВД для ККТ, чтобы обойти ошибку ФН 231
ОбщиеПараметры.СистемаНалогообложения = Перечисления.ТипыСистемНалогообложенияККТ.ЕНВД;

Если на кассе совмещаются несколько систем налогообложения, мы можем сделать более гибкую проверку. Проанализируем реквизиты документа-основания и будем передавать ЕНВД только тогда, когда это действительно необходимо, избегая затирания СНО для других видов деятельности:


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

После внесения этих изменений обязательно сохраним конфигурацию и обновим базу данных. Теперь при печати чеков из ПКО программа будет принудительно отправлять в XML-пакет корректный тег СНО, и ошибка ФН 231 перестанет беспокоить кассиров.

Чем опасна работа с неверной СНО в чеках?

Некоторые пользователи игнорируют тот факт, что в «обычных» чеках у них печатается ОСН вместо ЕНВД, радуясь тому, что «касса хотя бы не выдает ошибку и печатает документ». Это крайне опасное заблуждение! Укажем основные риски:

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

Технические нюансы: драйверы и прошивка ККТ

Иногда проблема кроется не только в коде 1С, но и в рассинхронизации внутренних настроек торгового оборудования. Проверим следующие параметры:

  1. Запустим утилиту «Тест драйвера ККТ» (для АТОЛ это драйвер версии 10.х).
  2. Перейдем в раздел «Свойства», выполним проверку связи с ККТ.
  3. Зайдем в «Параметры ККТ» и найдем раздел, отвечающий за налоговые ставки и системы налогообложения.
  4. Убедимся, что на уровне самой кассы разрешена работа по требуемой СНО. Если там стоит галочка только напротив ЕНВД, то любые попытки передать ОСН из 1С будут вызывать ошибку 231. Если же предприятие действительно совмещает режимы, в кассе должны быть отмечены все совмещаемые СНО.
  5. Обратите внимание на используемую обработку обслуживания ККТ в 1С (подключаемое оборудование). Старые обработки обслуживания версии ниже 2.X могут некорректно формировать XML-структуру и путать номера СНО при передаче их в драйвер, что также порождает аппаратный конфликт. Рекомендуется использовать актуальные версии интеграционных компонент.

Мы подробно разобрали причины возникновения ошибки ФН 231, изучили логику конфигурации «1С:Управление торговлей 10.3» и предоставили вам как штатные, так и программные инструменты для ее устранения. Применяйте эти знания на практике, следите за соответствием реквизитов требованиям налогового законодательства и пусть ваша кассовая техника работает без сбоев!

← На главную