Как в 1С:УТ 10.3 правильно пробивать чеки из ПКО при оплате нескольких реализаций по 54-ФЗ?

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

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

В данной статье мы разберем, как доработать систему для корректной печати чеков при частичной оплате и постоплате, рассмотрим вопросы округления сумм и нюансы работы с маркированными товарами в системе Честный ЗНАК.

Анализ проблемы: почему типовой чек из ПКО не подходит?

Согласно 54-ФЗ, в кассовом чеке обязательно должны присутствовать наименование товара, его количество, цена за единицу и общая сумма с учетом скидок. В УТ 10.3 при оплате через ПКО система зачастую пытается отправить на печать просто "Оплату по накладной №...", что допустимо только в очень узких случаях. Если же чек пробивается физическому лицу или в ситуации, когда ранее не был пробит чек "в кредит", необходимо указывать номенклатуру.

Рассмотрим типовой сценарий: клиент гасит задолженность в размере 30 000 рублей. Эта сумма распределяется между тремя реализациями: первая на 10 000, вторая на 15 000, и третья на 20 000 (из которой гасится только 5 000). Нам необходимо, чтобы касса напечатала все товары из первых двух накладных и часть товаров из третьей накладной на сумму 5 000 рублей.

Шаг 1: Определение признака способа расчета

Перед тем как приступать к кодингу, проанализируем, какие признаки способа расчета должны попадать в чек. Для оптовой и мелкооптовой торговли в УТ 10.3 актуальны следующие варианты:

В нашем случае (оплата после отгрузки) наиболее корректным признаком будет "Оплата кредита". Однако, если ФНС требует расшифровки товаров в этом чеке, нам придется "вытаскивать" их из документов-оснований.

Шаг 2: Модернизация алгоритма сбора данных для чека

Для реализации корректной печати нам необходимо переписать логику формирования XML-пакета, который отправляется на драйвер ККТ. Проанализируем решение, основанное на типовом коде документа ЧекККМ. Именно в этом документе передача таблицы товаров реализована наиболее полно.

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

  1. Получить таблицу товаров из реализации.
  2. Рассчитать долю оплаты для этой реализации.
  3. Пропорционально распределить сумму оплаты между товарами в этой реализации.
  4. Сформировать итоговую таблицу для передачи в обработку обслуживания ККТ.

Важный момент: если сумма оплаты меньше суммы накладной, возникает проблема "разбивки" строк. Программа должна уметь делить одну строку товара на две: оплаченную часть и неоплаченную, чтобы итоговая сумма по чеку сошлась до копейки.

Шаг 3: Решение проблемы округлений и расхождений в копейках

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

Рассмотрим пример кода, который помогает избежать жестких ошибок драйвера при расчете скидок и сумм. Исправления вносятся в обработку обслуживания (драйвер) ККТ в функцию ПечататьСтроку:


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

ЗначениеСкидки = Количество * Цена * Скидка * 0.01;
Сумма = Количество * Цена - ЗначениеСкидки;

// Старый код, который мог вызывать расхождения:
// ЗначениеСкидки = Окр(Количество * Цена * Скидка * 0.01, 2);
// Сумма = Окр(Количество * Цена - ЗначениеСкидки, 2);

Однако, более надежным методом является "метод копеечного добора", когда разница, возникшая из-за округлений, прибавляется к последней строке чека. Проанализируем ситуацию: если общая сумма товаров после распределения получилась 29 999.98, а ПКО выписан на 30 000.00, мы должны программно увеличить сумму последней позиции на 0.02 рубля.

Шаг 4: Работа с маркированными товарами (Честный ЗНАК)

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

Рассмотрим правила работы с маркировкой при постоплате:

  1. Момент отгрузки: Если вы пробиваете чек в момент отгрузки (Реализация), коды маркировки (тег 1162 или 1163) передаются именно тогда. В этом случае товар выбывает из оборота.
  2. Момент оплаты (ПКО): Когда клиент приносит деньги позже, в чеке из ПКО коды маркировки указывать нельзя, так как товар уже выведен из оборота. В чеке указывается просто наименование товара без признака маркировки или используется обобщенное название услуги по расчету.

Если же вы не пробивали чек при отгрузке (например, при работе с юрлицами по договору), но обязаны пробить его физлицу при оплате в кассу, то коды маркировки должны быть считаны и переданы в ПКО. Выясним причину возможных ошибок: если в Честном ЗНАКе товар не списался, проверьте наличие признака [M+] в печатной форме чека и корректность передачи кода в ОФД.

Шаг 5: Практические рекомендации по реализации в 1С

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

  1. В документе ПриходныйКассовыйОрдер добавьте экспортную функцию СформироватьТаблицуТоваровДляЧека().
  2. Внутри этой функции используйте запрос к табличным частям документов, указанных в списке РасшифровкаПлатежа.
  3. Используйте объект ТаблицаЗначений для накопления строк: Номенклатура, Количество, Цена, Сумма, СтавкаНДС.
  4. При вызове команды "Печать чека" подменяйте стандартный алгоритм формирования структуры ОбъектЧека данными из вашей функции.

Рассмотрим фрагмент логики распределения суммы:


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

Заключение

Реализация печати чеков по 54-ФЗ из ПКО в УТ 10.3 требует серьезного вмешательства в механизмы взаимодействия с торговым оборудованием. Основная сложность заключается не в самой печати, а в корректном математическом распределении сумм оплат по конкретным товарным позициям из документов-оснований. Помните, что налоговые органы и система маркировки жестко контролируют соответствие передаваемых данных, поэтому важно обеспечить точность до копейки и правильное использование признаков способа расчета.

Используя приведенные выше советы и примеры логики, вы сможете привести вашу учетную систему в соответствие с актуальными требованиями законодательства, сохранив при этом привычную для кассиров схему работы через Приходные кассовые ордера.

← На главную