Почему в чеке ККТ из приходного кассового ордера в УПП не печатается номенклатура и как это исправить?

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет Промышленность, строительство и АПК
← На главную

При переходе на онлайн-кассы по требованиям 54-ФЗ многие пользователи конфигурации 1С:Управление производственным предприятием (а также отраслевых решений на ее основе) столкнулись с ситуацией, когда при пробитии фискального чека из документа Приходный кассовый ордер (ПКО) на кассовой ленте вместо перечня товаров и услуг выводится обобщенная строка вида Принято от: ... Основание: ... или строка платежа. Выясним причину такого поведения типового алгоритма, разберем программные механизмы сопоставления данных и рассмотрим пути решения проблемы.

Причины отсутствия товарных позиций в чеке из ПКО

Проанализируем логику работы типовой подсистемы подключаемого оборудования (БПО) и фискализации в УПП. Печать номенклатурного состава в кассовом чеке зависит от нескольких строгих условий:

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

Диагностика механизма подготовки данных чека

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


ОбщиеПараметры = МенеджерОборудованияКлиентСервер.ПараметрыОперацииФискализацииЧека;
РасчетыСПокупателем = (СсылкаНаОбъект.ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийПКО.ОплатаПокупателя"));

МенеджерОборудованияВызовСервера.ЗаполнитьТоварныеПозицииВПараметрахЧека(
    СсылкаНаОбъект, 
    ОбщиеПараметры, 
    РасчетыСПокупателем, 
    Ложь, 
    СсылкаНаОбъект.ПринятоОт, 
    СсылкаНаОбъект.Основание
);

ПараметрыСтроки = Новый ТаблицаЗначений;
ПараметрыСтроки.Колонки.Добавить("ФискальнаяСтрока");
ПараметрыСтроки.Колонки.Добавить("Наименование");
ПараметрыСтроки.Колонки.Добавить("Количество");
ПараметрыСтроки.Колонки.Добавить("Цена");
ПараметрыСтроки.Колонки.Добавить("Сумма");
ПараметрыСтроки.Колонки.Добавить("НомерСекции");
ПараметрыСтроки.Колонки.Добавить("СтавкаНДС");
ПараметрыСтроки.Колонки.Добавить("Штрихкод");
ПараметрыСтроки.Колонки.Добавить("КодПризнакаСпособаРасчета");
ПараметрыСтроки.Колонки.Добавить("КодПризнакаПредметаРасчета");

Для Каждого СтрПозицияЧека Из ОбщиеПараметры.ПозицииЧека Цикл
    НоваяСтр = ПараметрыСтроки.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтр, СтрПозицияЧека);
КонецЦикла;

ПострПечать = Новый ПостроительОтчета;
ПострПечать.ИсточникДанных = Новый ОписаниеИсточникаДанных(ПараметрыСтроки);
ПострПечать.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Интерфейс);
ПострПечать.Выполнить();
ПострПечать.Вывести();

Если в полученной таблице отображаются конкретные наименования товаров, значит, программный алгоритм сопоставления отрабатывает корректно, а причину следует искать в настройках торгового оборудования или драйвере ККТ. Если же в таблице одна строка с текстом основания — условия детализации не были выполнены.

Исправление кода подготовки данных фискализации

Разберем ситуацию, когда в конфигурации выполняется устаревший вариант процедуры ПодготовитьДанныеДляФискализацииЧекаПКО. В устаревших релизах табличная часть РасшифровкаПлатежа обходилась простым циклом с жесткой установкой единого наименования:


// Устаревший алгоритм, блокирующий печать номенклатуры:
Для Каждого СтрокаПлатежа Из Ссылка.РасшифровкаПлатежа Цикл
    СтрокаЧека = МенеджерОборудованияКлиентСервер.ПараметрыФискальнойСтрокиЧека;
    СтрокаЧека.Наименование = "Принято от: " + ПринятоОт + " Основание: " + Основание;
    СтрокаЧека.Количество = 1;
    СтрокаЧека.Цена = СтрокаПлатежа.СуммаПлатежа;
    СтрокаЧека.Сумма = СтрокаПлатежа.СуммаПлатежа;
    СтрокаЧека.СтавкаНДС = ЭлектронныеДокументыПереопределяемый.ПолучитьСтавкуНДСЧислом(СтрокаПлатежа.СтавкаНДС);
    Если СтрокаЧека.СтавкаНДС = Неопределено Тогда
        СтрокаЧека.СтавкаНДС = 0;
    КонецЕсли;
    СтрокаЧека.КодПризнакаСпособаРасчета = 4;
    СтрокаЧека.КодПризнакаПредметаРасчета = 12;
    ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);
КонецЦикла;

Для восстановления функционала печати номенклатуры заменим прямое заполнение обобщенными строками на вызов системного метода общего модуля:


ЭтоОплатаПокупателя = (ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийПКО.ОплатаПокупателя"));

МенеджерОборудованияВызовСервера.ЗаполнитьТоварныеПозицииВПараметрахЧека(
    Ссылка, 
    ОбщиеПараметры, 
    ЭтоОплатаПокупателя, 
    Ложь, 
    ПринятоОт, 
    Основание
);

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

Настройка параметров торгового оборудования

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

  1. Перейдем в обработку Подключение и настройка торгового оборудования.
  2. Убедимся, что касса добавлена в раздел ККТ с передачей данных, а не как устаревший «Фискальный регистратор». При выборе старого типа оборудования программа использует протоколы без передачи тегов номенклатуры по ФФД.
  3. Для аппаратов марки «Штрих-М» откроем окно Параметры фискализации и сверим таблицу соответствия ставок НДС: очередность ставок в 1С должна строго соответствовать номерам налоговых ставок в самом фискальном регистраторе.
  4. Для аппаратов «АТОЛ» проверим соответствие налоговых секций через драйвер ККТ (ДТО), так как привязка ставок опирается на внутреннюю нумерацию аппарата (налоговые секции с 1 по 6).
  5. Проверим в таблицах настроек ККТ отсутствие параметров, блокирующих печать строк на бумажном чеке (режим экономии ленты или принудительная отправка чека только в электронном виде).
← На главную