Как исправить завышение сумм предоплаты в Z-отчете ККТ при частичном гашении подарочных сертификатов в 1С:Розница

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

При внедрении механизма частичного (многоразового) гашения подарочных сертификатов в старых конфигурациях 1С:Розница 2.2 программисты часто сталкиваются с неприятной проблемой. На уровне регистров накопления и документов в самой программе баланс по картам списывается корректно. Однако при закрытии смены на кассовом аппарате (ККТ) распечатывается Z-отчет, в котором строка «Предварительная оплата (аванс)» завышена: вместо фактически потраченной суммы предоплаты там отражается полный первоначальный номинал сертификата. В результате этого финансовые показатели смены «плывут», а бухгалтерия бьет тревогу из-за расхождений данных в ККТ и в базе 1С.

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

Почему ККТ фиксирует полную сумму номинала: разбираем требования 54-ФЗ и логику 1С

Прежде чем переходить к редактированию кода, давайте проанализируем ситуацию и выясним первопричину такого поведения системы. Согласно разъяснениям ФНС РФ (в частности, Письму ФНС от 03.07.2018 № ЕД-4-20/12717), подарочный сертификат с юридической точки зрения является авансом. Дальнейшие события зависят от условий использования этого аванса:

  1. Одноразовый сертификат (без возможности частичного гашения). Если покупатель приобретает товар стоимостью 100 рублей по сертификату номиналом 500 рублей, оставшиеся 400 рублей сгорают. Для компании этот сгоревший остаток признается безвозмездно полученным имуществом — внереализационным доходом (ст. 250 НК РФ). По закону ККТ должна зафиксировать этот доход. Поэтому в чек передается две позиции: продажа самого товара (зачет аванса на 100 рублей) и строка внереализационного дохода на 400 рублей. В итоге касса списывает с сертификата все 500 рублей.
  2. Многоразовый сертификат (с частичным гашением). Если правила магазина позволяют тратить номинал постепенно, то оставшиеся 400 рублей не сгорают. Они продолжают числиться залогом (предоплатой) клиента для будущих покупок. В этом случае никакого внереализационного дохода в момент промежуточной покупки не возникает. Чек на ККТ должен пробиваться исключительно на сумму фактически отпущенного товара (100 рублей), а остаток номинала никак не должен фигурировать в текущем фискальном документе.

Проблема в конфигурации «1С:Розница 2.2» заключается в том, что по умолчанию в ней заложен механизм только одноразовых сертификатов. Когда программист делает кастомную доработку и разрешает частичное списание на уровне регистров 1С, конфигурация на уровне формирования чека для кассы продолжает «думать», что неиспользованный остаток сертификата сгорает. Программа автоматически рассчитывает этот остаток и принудительно отправляет его на ККТ как внереализационную прибыль, из-за чего касса закрывает сертификат на полный номинал и завышает показатели Z-отчета.

Шаг 1. Анализируем структуру данных, отправляемых на ККТ

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


Процедура НачатьВыполнениеКомандыПечатиЧека(ОповещениеПриЗавершении, Идентификатор, Команда, Параметры, ВходныеПараметры) Экспорт

Внутри этой процедуры в структуре ВходныеПараметры содержатся два ключевых массива, которые ККТ использует для печати чека и записи фискальных данных:

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

  1. В массиве ТаблицаОплат будут присутствовать две строки: первая — на 100 рублей (оплата покупки), вторая — на 400 рублей (остаток номинала без указания типа оплаты).
  2. В массиве ПозицииЧека также будут две строки: первая — ваш проданный товар на сумму 100 рублей, вторая — строка с наименованием «Внереализационный доход» на сумму 400 рублей.

Именно наличие этих вторых строк заставляет ККТ фиксировать общую сумму в 500 рублей и портить показатели Z-отчета по авансам. Чтобы решить проблему, нам нужно исключить добавление этих фиктивных строк на этапе компоновки данных чека.

Шаг 2. Корректируем код в модуле документа "ЧекККМ"

Выясним причину появления строк внереализационного дохода в массивах ККТ. Данные подготавливаются на сервере. В модуле менеджера документа ЧекККМ (или модуле объекта, в зависимости от релиза конфигурации) находится экспортная функция:


Функция ПодготовитьДанныеДляПробитияЧека(ДокументОбъект, ДокументСсылка, ТранспортныйМодуль, ДанныеЕГАИСДостаточны, ЕстьАлкогольнаяПродукцияЕГАИС, НомерЧека, ОсобыйВыводСообщения = Ложь, ТекстПолногоСообщения  = "") Экспорт

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


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

Именно строка ПодключаемоеОборудованиеРТ.ДобавитьВнереализационнуюПрибыль(ДокументСсылка, ОбщиеПараметры); анализирует номинал сертификата и добавляет неиспользованный остаток в чек как прибыль. Чтобы отключить это поведение для многоразовых сертификатов, нам необходимо закомментировать или переписать этот вызов.

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

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


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

После внесения этого изменения повторно протестируем пробитие чека с оплатой сертификата на эмуляторе ККТ. Мы увидим, что в XML-пакет, передаваемый на ККТ, больше не попадают фиктивные строки. Касса напечатает чек и зафиксирует оплату ровно на ту сумму, которая была потрачена на покупку товаров. В Z-отчете строка предварительной оплаты (аванса) теперь будет сходиться с реальными продажами по программе 1С.

Как этот функционал реализован в современных версиях «1С:Розница»?

Проанализируем развитие этой проблемы в последующих релизах программных продуктов 1С. Разработчики фирмы «1С» со временем учли пожелания пользователей и законодательные изменения, добавив штатную поддержку многоразовых сертификатов:

Что делать с остатками просроченных сертификатов?

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

В современных конфигурациях 1С для этих целей предусмотрен специальный регламентный документ — «Списание проданных сертификатов». Он выполняет следующие функции:

  1. Анализирует регистры сведений и накопления по подарочным сертификатам.
  2. Выявляет карты, срок действия которых истек на текущую дату.
  3. Списывает остатки номиналов с баланса и автоматически формирует проводки по отражению внереализационного дохода в бухгалтерском и налоговом учете.

Если вы продолжаете использовать доработанную конфигурацию «1С:Розница 2.2», вам необходимо разработать аналогичную обработку или документ списания. Это позволит своевременно очищать регистры остатков по подарочным картам и предотвратит расхождения с налоговой службой при проверках деклараций по прибыли или УСН.

← На главную