Почему в 1С:УПП 1.3 при печати чека из ПКО не выводятся наименование и ИНН покупателя и как это исправить?

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

С вступлением в силу изменений в 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. Быстрое программное решение в модуле 1С (для старых релизов)

Если ваша конфигурация находится на поддержке с доработками и вы не можете оперативно обновить релиз до актуального, проблему с незаполнением реквизитов покупателя в ПКО можно решить точечным вмешательством в код.

Рассмотрим, как это сделать. Нам необходимо доработать процедуру ПодготовитьДанныеДляФискализацииЧека в общем модуле МенеджерОборудованияВызовСервера. Пропишем явное заполнение получателя и ИНН из реквизитов контрагента, связанного с документом.

Выполним следующие шаги:

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

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

Этот простой блок кода гарантирует, что при формировании чека из ПКО система всегда попытается обратиться к реквизитам контрагента, указанного в ордере, и передать его ИНН и Полное наименование в общую структуру параметров фискализации.

---

Вариант 2. Исправление через обновление релиза и форму предпросмотра чека

Начиная с релиза 1.3.123.3, фирма 1С признала ошибку незаполнения реквизитов (зарегистрирована под номером 00-00226573) и внесла изменения в логику работы обработки предпросмотра чека. В частности, была доработана форма предпросмотра, где происходит сопоставление данных.

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


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

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

Данный вызов использует функцию ПодключаемоеОборудованиеУТ.ЗаполнитьДанныеПокупателя, которая корректно извлекает контрагента из реквизитов документа-основания и заполняет параметры для отправки на ККТ.

---

Вариант 3. Настройка ККТ «Штрих-М» для физической печати тегов

Если программная часть 1С настроена верно, но на чековой ленте по-прежнему пусто, необходимо проверить внутренние таблицы фискального регистратора. Для этого воспользуемся утилитой «Тест драйвера ФР» от компании Штрих-М:

  1. Подключите ККТ к компьютеру и запустите программу «Тест драйвера ФР» (рекомендуется использовать версию драйвера не ниже 4.14).
  2. Перейдите в раздел «Настройка свойств» в правом верхнем углу окна программы.
  3. В открывшемся окне нажмите кнопку «Таблицы...».
  4. В списке таблиц найдите и откройте двойным кликом Таблицу № 17 «Региональные настройки».
  5. Найдите строку Поле № 25 «Автопечать тегов» (в некоторых версиях прошивок это поле может называться по-другому, ориентируйтесь по номеру поля). По умолчанию там может стоять значение 0. Установите значение 1.
  6. Дополнительно проверьте Поле № 12 в этой же таблице. В зависимости от требований вашего ОФД и версии ФФД, для вывода реквизитов может потребоваться установить в нем значение 32.
  7. Закройте таблицы драйвера, применив изменения, и выполните тестовое пробитие чека из ПКО в 1С.

Важное примечание по ФФД 1.2: Если касса переведена на формат фискальных данных 1.2, передача реквизитов покупателя происходит единым блоком (тег 1256). В этом случае драйвер ККТ требует одновременного заполнения и ИНН, и наименования покупателя. Передача только одного из этих реквизитов (например, заполненный ИНН при пустом наименовании) приведет к ошибке оборудования 33h ("Ошибка ФН"). Описанный выше программный код гарантирует заполнение обоих реквизитов в паре, что предотвращает возникновение подобных сбоев.

← На главную