С вступлением в силу изменений в 54-ФЗ при расчетах между организациями и индивидуальными предпринимателями в кассовом чеке обязательно должны фигурировать наименование покупателя (тег 1227) и его ИНН (тег 1228). Однако пользователи конфигурации 1С:Управление производственным предприятием (УПП) редакции 1.3 часто сталкиваются с тем, что при печати чека из документа Приходный кассовый ордер (ПКО) эти реквизиты не выводятся на печать и не передаются в ОФД, хотя в аналогичной ситуации при печати из документа "Корректировка долга" все работает корректно.
В этой статье мы подробно разберем причины возникновения этой проблемы как со стороны программного кода 1С, так и со стороны настроек торгового оборудования, а также рассмотрим по шагам готовые решения для исправления этой ошибки.
Проблема кроется сразу в двух плоскостях: особенностях типового кода интеграции с Библиотекой подключаемого оборудования (БПО) в 1С:УПП и аппаратных настройках ККТ семейства «Штрих-М». Проанализируем обе причины подробнее.
1. Архитектурная проблема в коде 1С:
В старых и переходных релизах 1С:УПП (в частности, в 1.3.123.2) логика подготовки XML-пакета для фискализации разделена по ревизиям интерфейса драйвера кассы. Посмотрим на код в общем модуле МенеджерОборудованияВызовСервера в процедуре СформироватьXMLПакетДляФискализацияЧека:
Если ПараметрыФискализации.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
// Здесь подготавливаются параметры тегов 1227 и 1228
Если Не ПустаяСтрока(ОбщиеПараметры.Получатель) Тогда
ЗаписьXML.ЗаписатьАтрибут("CustomerInfo", XMLСтрока(ОбщиеПараметры.Получатель));
КонецЕсли;
Если Не ПустаяСтрока(ОбщиеПараметры.ПолучательИНН) Тогда
ЗаписьXML.ЗаписатьАтрибут("CustomerINN", XMLСтрока(ОбщиеПараметры.ПолучательИНН));
КонецЕсли;
ИначеЕсли ПараметрыФискализации.РевизияИнтерфейса > 2001 Тогда // Версия стандарта 2.2
// В этой ветке атрибуты CustomerInfo и CustomerINN отсутствуют по умолчанию
КонецЕсли;
Если ваша касса работает по стандарту ФФД 1.05 под управлением драйвера с ревизией интерфейса 2.2, то программа принудительно заходит во вторую ветку условий. Попытка вручную дописать туда XML-атрибуты CustomerInfo и CustomerINN приводит к ошибке печати, так как схема валидации (XSD) внутри самой компоненты драйвера версии 2.2 не поддерживает данные поля и считает XML-пакет некорректным.
Кроме того, в документе ПКО поле «Принято от» является текстовой строкой, а не прямой ссылкой на справочник Контрагенты. Из-за этого система при формировании чека банально «не понимает», откуда именно ей нужно получить ИНН покупателя.
2. Аппаратная настройка ККТ Штрих-М:
Даже когда 1С корректно передает теги в кассу, они могут не печататься на бумажной ленте. В фискальных регистраторах Штрих-М за вывод дополнительных реквизитов на бумагу отвечает специальная внутренняя настройка («Автопечать тегов»). Если она отключена, данные отправляются в ОФД в электронном виде, но в самом бумажном чеке отсутствуют.
---
Если ваша конфигурация находится на поддержке с доработками и вы не можете оперативно обновить релиз до актуального, проблему с незаполнением реквизитов покупателя в ПКО можно решить точечным вмешательством в код.
Рассмотрим, как это сделать. Нам необходимо доработать процедуру ПодготовитьДанныеДляФискализацииЧека в общем модуле МенеджерОборудованияВызовСервера. Пропишем явное заполнение получателя и ИНН из реквизитов контрагента, связанного с документом.
Выполним следующие шаги:
МенеджерОборудованияВызовСервера.ПодготовитьДанныеДляФискализацииЧека.ОбщиеПараметры):
Процедура ПодготовитьДанныеДляФискализацииЧека(Ссылка, ОбщиеПараметры, ВерсияФормата, ТО, КомуОтКого, Основание) Экспорт
Если ОбщиеПараметры = Неопределено Тогда
ОбщиеПараметры = МенеджерОборудованияКлиентСервер.ПараметрыОперацииФискализацииЧека();
КонецЕсли;
// Вставка кода для заполнения данных покупателя из ПКО
Попытка
Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер") Тогда
Если ЗначениеЗаполнено(Ссылка.Контрагент) Тогда
ОбщиеПараметры.Получатель = Ссылка.Контрагент.НаименованиеПолное;
ОбщиеПараметры.ПолучательИНН = Ссылка.Контрагент.ИНН;
КонецЕсли;
КонецЕсли;
Исключение
// Исключаем аварийное завершение, если структура метаданных отличается
КонецПопытки;
Этот простой блок кода гарантирует, что при формировании чека из ПКО система всегда попытается обратиться к реквизитам контрагента, указанного в ордере, и передать его ИНН и Полное наименование в общую структуру параметров фискализации.
---
Начиная с релиза 1.3.123.3, фирма 1С признала ошибку незаполнения реквизитов (зарегистрирована под номером 00-00226573) и внесла изменения в логику работы обработки предпросмотра чека. В частности, была доработана форма предпросмотра, где происходит сопоставление данных.
Если вы обновились на релиз 1.3.123.3 или выше, но данные все равно не выходят на печать, убедитесь, что в модуле формы обработки Предпросмотр чека в процедуре ПослеОбработкиСостоянияСмены присутствует следующий вызов функций работы с покупателем:
Если ТипЧека = "Чек" Тогда
МенеджерОборудованияВызовСервера.ПодготовитьДанныеДляФискализацииЧека(ДокументСсылка, ПараметрыОперацииФискализацииЧека, ВерсияФФД,
ККТ, ?(ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер"), ДокументСсылка.ПринятоОт, ДокументСсылка.Контрагент.Наименование),
?(ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер"), ДокументСсылка.Основание,
?(ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ОплатаОтПокупателяПлатежнойКартой"), ДокументСсылка, ДокументСсылка.ДоговорКонтрагента.Наименование)));
// Добавленный блок сопоставления и заполнения данных покупателя:
СтруктураРеквизитов = Новый Структура;
СтруктураРеквизитов.Вставить("Контрагент");
РеквизитыДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументСсылка, СтруктураРеквизитов);
ПодключаемоеОборудованиеУТ.ЗаполнитьДанныеПокупателя(ПараметрыОперацииФискализацииЧека, РеквизитыДокумента);
Результат = ОбработкаОбслуживания.ФискализироватьЧек(ОбъектДрайвера, ПараметрыОперацииФискализацииЧека);
КонецЕсли;
Данный вызов использует функцию ПодключаемоеОборудованиеУТ.ЗаполнитьДанныеПокупателя, которая корректно извлекает контрагента из реквизитов документа-основания и заполняет параметры для отправки на ККТ.
---
Если программная часть 1С настроена верно, но на чековой ленте по-прежнему пусто, необходимо проверить внутренние таблицы фискального регистратора. Для этого воспользуемся утилитой «Тест драйвера ФР» от компании Штрих-М:
0. Установите значение 1.Важное примечание по ФФД 1.2: Если касса переведена на формат фискальных данных 1.2, передача реквизитов покупателя происходит единым блоком (тег 1256). В этом случае драйвер ККТ требует одновременного заполнения и ИНН, и наименования покупателя. Передача только одного из этих реквизитов (например, заполненный ИНН при пустом наименовании) приведет к ошибке оборудования 33h ("Ошибка ФН"). Описанный выше программный код гарантирует заполнение обоих реквизитов в паре, что предотвращает возникновение подобных сбоев.