При внедрении механизма частичного (многоразового) гашения подарочных сертификатов в старых конфигурациях 1С:Розница 2.2 программисты часто сталкиваются с неприятной проблемой. На уровне регистров накопления и документов в самой программе баланс по картам списывается корректно. Однако при закрытии смены на кассовом аппарате (ККТ) распечатывается Z-отчет, в котором строка «Предварительная оплата (аванс)» завышена: вместо фактически потраченной суммы предоплаты там отражается полный первоначальный номинал сертификата. В результате этого финансовые показатели смены «плывут», а бухгалтерия бьет тревогу из-за расхождений данных в ККТ и в базе 1С.
В этой статье мы подробно разберем, почему возникает эта проблема с точки зрения кассового законодательства (54-ФЗ) и архитектуры интеграции 1С с торговым оборудованием, а также предоставим пошаговый план решения с примерами программного кода для разработчиков.
Прежде чем переходить к редактированию кода, давайте проанализируем ситуацию и выясним первопричину такого поведения системы. Согласно разъяснениям ФНС РФ (в частности, Письму ФНС от 03.07.2018 № ЕД-4-20/12717), подарочный сертификат с юридической точки зрения является авансом. Дальнейшие события зависят от условий использования этого аванса:
Проблема в конфигурации «1С:Розница 2.2» заключается в том, что по умолчанию в ней заложен механизм только одноразовых сертификатов. Когда программист делает кастомную доработку и разрешает частичное списание на уровне регистров 1С, конфигурация на уровне формирования чека для кассы продолжает «думать», что неиспользованный остаток сертификата сгорает. Программа автоматически рассчитывает этот остаток и принудительно отправляет его на ККТ как внереализационную прибыль, из-за чего касса закрывает сертификат на полный номинал и завышает показатели Z-отчета.
Рассмотрим подробнее, как именно формируется массив данных для отправки в фискальный регистратор. Передача параметров происходит на клиенте. В общем модуле МенеджерОборудованияКлиент расположена ключевая процедура:
Процедура НачатьВыполнениеКомандыПечатиЧека(ОповещениеПриЗавершении, Идентификатор, Команда, Параметры, ВходныеПараметры) Экспорт
Внутри этой процедуры в структуре ВходныеПараметры содержатся два ключевых массива, которые ККТ использует для печати чека и записи фискальных данных:
Если мы проанализируем состояние этих массивов при частичном гашении сертификата номиналом 500 рублей при покупке на 100 рублей, то увидим следующую картину:
ТаблицаОплат будут присутствовать две строки: первая — на 100 рублей (оплата покупки), вторая — на 400 рублей (остаток номинала без указания типа оплаты).ПозицииЧека также будут две строки: первая — ваш проданный товар на сумму 100 рублей, вторая — строка с наименованием «Внереализационный доход» на сумму 400 рублей.Именно наличие этих вторых строк заставляет ККТ фиксировать общую сумму в 500 рублей и портить показатели Z-отчета по авансам. Чтобы решить проблему, нам нужно исключить добавление этих фиктивных строк на этапе компоновки данных чека.
Выясним причину появления строк внереализационного дохода в массивах ККТ. Данные подготавливаются на сервере. В модуле менеджера документа ЧекККМ (или модуле объекта, в зависимости от релиза конфигурации) находится экспортная функция:
Функция ПодготовитьДанныеДляПробитияЧека(ДокументОбъект, ДокументСсылка, ТранспортныйМодуль, ДанныеЕГАИСДостаточны, ЕстьАлкогольнаяПродукцияЕГАИС, НомерЧека, ОсобыйВыводСообщения = Ложь, ТекстПолногоСообщения = "") Экспорт
Эта функция собирает все сведения о товарах, скидках и оплатах в единую структуру ОбщиеПараметры. В самом конце этой функции перед отправкой данных на клиент выполняется проверка типа оборудования и вызов процедуры начисления прибыли от неиспользованного номинала:
Если РеквизитыКассыККМ.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ Тогда
ПодключаемоеОборудованиеРТ.ДобавитьВнереализационнуюПрибыль(ДокументСсылка, ОбщиеПараметры);
// При необходимости будет проведен формато-логический контроль
ОбщиеПараметры.СпособФорматноЛогическогоКонтроля = РеквизитыКассыККМ.СпособФорматноЛогическогоКонтроля;
ОбщиеПараметры.ДопустимоеРасхождениеФорматноЛогическогоКонтроля = РеквизитыКассыККМ.ДопустимоеРасхождениеФорматноЛогическогоКонтроля;
Если ФорматноЛогическийКонтрольКлиентСервер.НуженФорматноЛогическийКонтроль(ОбщиеПараметры) Тогда
ФорматноЛогическийКонтрольКлиентСервер.ПровестиФорматноЛогическийКонтроль(ОбщиеПараметры);
КонецЕсли;
КонецЕсли;
Именно строка ПодключаемоеОборудованиеРТ.ДобавитьВнереализационнуюПрибыль(ДокументСсылка, ОбщиеПараметры); анализирует номинал сертификата и добавляет неиспользованный остаток в чек как прибыль. Чтобы отключить это поведение для многоразовых сертификатов, нам необходимо закомментировать или переписать этот вызов.
Рекомендуемый вариант исправления:
Если в вашей базе используются как одноразовые, так и многоразовые сертификаты, необходимо добавить проверку. Если же все сертификаты в компании по новым правилам стали многоразовыми (с частичным гашением), то данную строчку можно просто закомментировать:
Если РеквизитыКассыККМ.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ Тогда
// Блокируем добавление остатка сертификата во внереализационную прибыль для кассы,
// так как остаток не сгорает, а сохраняется за клиентом (частичное погашение)
// ПодключаемоеОборудованиеРТ.ДобавитьВнереализационнуюПрибыль(ДокументСсылка, ОбщиеПараметры);
ОбщиеПараметры.СпособФорматноЛогическогоКонтроля = РеквизитыКассыККМ.СпособФорматноЛогическогоКонтроля;
ОбщиеПараметры.ДопустимоеРасхождениеФорматноЛогическогоКонтроля = РеквизитыКассыККМ.ДопустимоеРасхождениеФорматноЛогическогоКонтроля;
Если ФорматноЛогическийКонтрольКлиентСервер.НуженФорматноЛогическийКонтроль(ОбщиеПараметры) Тогда
ФорматноЛогическийКонтрольКлиентСервер.ПровестиФорматноЛогическийКонтроль(ОбщиеПараметры);
КонецЕсли;
КонецЕсли;
После внесения этого изменения повторно протестируем пробитие чека с оплатой сертификата на эмуляторе ККТ. Мы увидим, что в XML-пакет, передаваемый на ККТ, больше не попадают фиктивные строки. Касса напечатает чек и зафиксирует оплату ровно на ту сумму, которая была потрачена на покупку товаров. В Z-отчете строка предварительной оплаты (аванса) теперь будет сходиться с реальными продажами по программе 1С.
Проанализируем развитие этой проблемы в последующих релизах программных продуктов 1С. Разработчики фирмы «1С» со временем учли пожелания пользователей и законодательные изменения, добавив штатную поддержку многоразовых сертификатов:
Решая техническую проблему с кассовыми чеками, важно не забывать о налоговом учете. Когда вы отключаете автоматическое признание внереализационного дохода при каждой промежуточной покупке, у вас зависают остатки номиналов на картах, у которых со временем заканчивается срок действия. По закону, эти неиспользованные деньги покупателей компания обязана списать в доходы организации по истечении срока действия карты.
В современных конфигурациях 1С для этих целей предусмотрен специальный регламентный документ — «Списание проданных сертификатов». Он выполняет следующие функции:
Если вы продолжаете использовать доработанную конфигурацию «1С:Розница 2.2», вам необходимо разработать аналогичную обработку или документ списания. Это позволит своевременно очищать регистры остатков по подарочным картам и предотвратит расхождения с налоговой службой при проверках деклараций по прибыли или УСН.