При оформлении расчетов с контрагентами (особенно с индивидуальными предпринимателями) в конфигурации 1С:Управление производственным предприятием (УПП) редакции 1.3 пользователи часто сталкиваются с аппаратной ошибкой ККТ: «Ошибка программирования реквизита 1227». Эта проблема особенно актуальна при использовании фискальных регистраторов торговой марки АТОЛ (например, популярной модели АТОЛ 30Ф) и старых версий прошивок кассовой техники.
В этой статье мы подробно разберем, почему возникает эта ошибка, как проанализировать данные, передаваемые из 1С на ККТ, и какие практические шаги необходимо предпринять программисту и системному администратору для устранения проблемы.
Согласно требованиям 54-ФЗ и действующим форматам фискальных данных (ФФД 1.05 и ФФД 1.2), при осуществлении расчетов между организациями и/или индивидуальными предпринимателями с использованием наличных денег или электронных средств платежа в кассовом чеке обязательно должны быть указаны сведения о покупателе:
Если в кассу передается ИНН покупателя (тег 1228), то ККТ в обязательном порядке ожидает получить и его наименование (тег 1227). Если одно из этих полей заполнено некорректно, передается пустым или превышает допустимые ограничения драйвера, ККТ АТОЛ блокирует операцию фискализации чека и возвращает ошибку программирования реквизита.
---
Разберем детально технические причины, из-за которых процесс печати чека прерывается ошибкой реквизита 1227.
1. Передача ИНН без наименования (пустой тег 1227)
Это наиболее распространенная ошибка в коде типовых конфигураций 1С старых релизов. Когда в документе оплаты (например, в документе Платежное поручение входящее с видом операции «Оплата от покупателя») выбран контрагент, являющийся индивидуальным предпринимателем, программа видит у него заполненный 12-значный ИНН. Логика интеграционной библиотеки 1С пытается передать этот ИНН в кассу (тег 1228). Однако из-за того, что в карточке контрагента выбран вид «Физическое лицо», алгоритм формирования XML-пакета может не заполнить поле наименования покупателя (тег 1227), оставив его пустым (""). По правилам ФФД передача ИНН без наименования недопустима, что приводит к отказу ККТ проводить чек.
2. Превышение допустимой длины наименования
Согласно форматам фискальных данных, максимальная длина тега 1227 составляет 256 символов. Однако на практике старые версии прошивок АТОЛ (например, платформа 2.5 с прошивкой 7733) или устаревшие версии драйверов ДТО 10 имели внутренние аппаратные ограничения буфера под этот тег (часто лимит составлял 120 или 128 символов). Если в 1С наименование контрагента заполнено полностью, например: «Индивидуальный предприниматель Константинопольский Александр Владимирович», то при отправке пакета касса не может записать столь длинную строку в буфер памяти и возвращает ошибку.
3. Наличие нечитаемых или спецсимволов
При копировании реквизитов контрагента из внешних сервисов или при автоматическом заполнении через специализированные API в наименование могут попадать невидимые спецсимволы, такие как неразрывные пробелы (в 1С это символ Символы.НПП), знаки переноса строки (Символы.ПС, Символы.ВК) или специфические кавычки. Парсер XML-файлов в драйвере ККТ АТОЛ крайне чувствителен к кодировке и структуре строки. При обнаружении некорректного символа запись тега прерывается.
4. Ограничения устаревшей прошивки кассы (например, 7733)
Прошивка 7733 для платформы ККТ 2.5 является переходной. В ней поддержка тегов 1227 и 1228 была реализована, но стабильность работы напрямую зависела от версии драйвера торгового оборудования и наличия активированных кодов защиты (лицензий) в самой кассе. Если лицензия на работу с новыми реквизитами ФФД отсутствует или повреждена, касса выдаст ошибку программирования реквизита при попытке передать данные покупателя.
---
Рассмотрим по шагам, как локализовать и устранить эту ошибку совместными усилиями программиста и администратора.
Прежде чем вносить изменения в код или обновлять прошивку, нам необходимо точно выяснить, какие данные 1С отправляет на фискальный регистратор. Для этого проанализируем лог драйвера ККТ АТОЛ или перехватим XML-пакет в коде 1С. Для предварительного просмотра чека и проверки формируемого XML-пакета без пробития на кассе подойдёт внешняя печатная форма для просмотра чека ККТ без фискализации.
Чтобы найти лог-файл драйвера АТОЛ (для DTO 10), перейдем по пути:
C:\Users\[ИмяПользователя]\AppData\Roaming\Atol\fptr10\fptr10.log
Откроем этот файл и найдем последние строки перед возникновением ошибки. Нам нужно отыскать XML-структуру фискализации чека. Обратим внимание на следующие параметры:
<Receipt>
<CustomerInfo Name="ИП Иванов И.И." INN="773312345678" />
...
</Receipt>
Если в параметре Name передается пустая строка (Name=""), а параметр INN заполнен, то это подтверждает первую причину проблемы — ошибку заполнения реквизитов в модулях 1С.
Если у нас нет возможности оперативно изменить программный код, попробуем решить проблему силами пользователя:
Если очистка карточки контрагента не помогла или база содержит сотни таких контрагентов, решим проблему кардинально — внесем изменения в программный код формирования XML-пакета. Нам нужно гарантировать, что:
Для этого в конфигураторе найдем общий модуль, отвечающий за интеграцию с ККТ (обычно это МенеджерОборудованияВызовСервера или специализированный модуль фискализации БПО). Найдем функцию, которая формирует XML-текст для ККТ (например, СформироватьXMLПакетДляФискализацииЧека).
Напишем и внедрим вспомогательную функцию для подготовки наименования покупателя:
Функция ПодготовитьНаименованиеПокупателяДляККТ(Контрагент) Экспорт
Перем РезультатНаименование;
// Получаем полное или официальное наименование контрагента
РезультатНаименование = СокрЛП(Контрагент.НаименованиеПолное);
Если ПустаяСтрока(РезультатНаименование) Тогда
РезультатНаименование = СокрЛП(Контрагент.Наименование);
КонецЕсли;
// Очищаем строку от неразрывных пробелов и управляющих символов
РезультатНаименование = СтрЗаменить(РезультатНаименование, Символы.НПП, " ");
РезультатНаименование = СтрЗаменить(РезультатНаименование, Символы.ПС, " ");
РезультатНаименование = СтрЗаменить(РезультатНаименование, Символы.ВК, " ");
РезультатНаименование = СтрЗаменить(РезультатНаименование, Таб, " ");
// Убираем двойные пробелы, которые могли образоваться после замены
Пока Найти(РезультатНаименование, " ") > 0 Цикл
РезультатНаименование = СтрЗаменить(РезультатНаименование, " ", " ");
КонецЦикла;
// Принудительно ограничиваем длину строки для совместимости со старыми прошивками АТОЛ
Если СтрДлина(РезультатНаименование) > 115 Тогда
РезультатНаименование = Лев(РезультатНаименование, 115);
КонецЕсли;
// Если наименование все равно пустое (например, сбой заполнения), подставим значение по умолчанию
Если ПустаяСтрока(РезультатНаименование) Тогда
РезультатНаименование = "Частное лицо (ИП)";
КонецЕсли;
Возврат РезультатНаименование;
КонецФункции
Теперь найдем в коде формирования XML место, где заполняются атрибуты покупателя. Как правило, там присутствует условие анализа ИНН. Модернизируем этот участок кода следующим образом:
// Пример интеграции в обработчик формирования XML
Если ЗначениеЗаполнено(ИННПокупателя) Тогда
// Записываем ИНН
ЗаписатьАтрибутXML(ЗаписьXML, "CustomerINN", СокрЛП(ИННПокупателя));
// Гарантируем заполнение наименования покупателя при наличии ИНН
ИмяПокупателяДляЧека = ПодготовитьНаименованиеПокупателяДляККТ(СсылкаНаКонтрагента);
ЗаписатьАтрибутXML(ЗаписьXML, "CustomerName", ИмяПокупателяДляЧека);
КонецЕсли;
Благодаря этому изменению касса больше никогда не получит пустой тег 1227 при заполненном теге 1228, а длина строки гарантированно не вызовет переполнения внутреннего буфера ККТ.
Если программные доработки в 1С выполнены, но касса все равно выдает ошибку программирования реквизита, проблема кроется в устаревшем внутреннем ПО фискального накопителя или ККТ.
Для решения этой проблемы рекомендуется выполнить следующие действия:
_1C_Atol_KKT_10.epf или встроенный макет интеграционной компоненты драйвера) до актуальной версии, совместимой с используемым DTO 10.Выполнив указанные шаги, мы полностью устраним технические разногласия между 1С:УПП 1.3 и фискальным регистратором АТОЛ, обеспечив бесперебойную и корректную печать кассовых чеков в строгом соответствии с требованиями 54-ФЗ.