Как исправить ошибку «сумма безналичных оплат больше суммы товарных позиций» при оплате заказ-наряда картой в 1С:Автосервис

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

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

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

---

Выясняем причину ошибки: почему ККТ блокирует операцию

Согласно требованиям Федерального закона № 54-ФЗ и форматов фискальных данных (ФФД), кассовый аппарат (ККТ) осуществляет строгий форматно-логический контроль отправляемых на печать данных. Сумма всех товарных позиций (с учетом количества, цены и примененных скидок) должна копейка в копейку совпадать с итоговой суммой оплаты, переданной в ККТ.

В типовых конфигурациях «1С:Автосервис» и «1С:УНФ» прошлых версий (включая ветку 1.6) документ Заказ-наряд содержит две ключевые и независимые табличные части:

  1. Товары (запасные части, расходные материалы, моторные масла и т.д.).
  2. Работы (услуги автослесаря, диагностика, шиномонтаж и другие операции).

Когда менеджер создает документ Оплата платежной картой (или вводит оплату через терминал) на основании проведенного документа Заказ-наряд, система автоматически пытается заполнить документ оплаты. Однако из-за особенностей типового алгоритма заполнения в документ оплаты переносятся данные только из табличной части Товары, в то время как табличная часть Работы игнорируется.

В результате получается следующая картина:

---

Решение 1. Типовая схема работы через «Зачет аванса»

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

Разберем этот процесс по шагам:

  1. Оформление предоплаты (Аванса):

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

    В созданном документе в качестве признака способа расчета мы указываем значение Аванс (или Предоплата). При этом табличная часть с конкретными товарами и работами не заполняется — в чек уходит только общая сумма платежа одной строкой «Аванс». ККТ успешно пробивает этот чек, так как сумма платежа соответствует единственной строке «Аванс».

  2. Зачет предоплаты при закрытии документа:

    После того как все работы по ремонту автомобиля завершены, мы открываем исходный документ Заказ-наряд.

    Переходим на вкладку «Предоплата» и нажимаем кнопку «Подобрать». Программа предложит выбрать ранее созданный документ оплаты (наш авансовый платеж по карте). Выбираем его и переносим в документ.

  3. Пробитие финального чека:

    Теперь мы можем пробить финальный чек непосредственно из самого документа Заказ-наряд (нажав на кнопку с изображением кассового аппарата или кнопку «Оплатить»).

    В этот момент программа сформирует полную фискальную XML-структуру для кассового аппарата. В чеке будут построчно перечислены все позиции: и фактически установленные запчасти (товары), и выполненные авторемонтные работы. В качестве способа оплаты для всех этих строк будет указан Зачет аванса (или Предварительная оплата). Итоговая сумма к доплате на кассе будет равна 0 рублей, и ККТ успешно напечатает закрывающий чек.

---

Решение 2. Программная доработка (ввод Чека ККМ на основании Заказ-наряда)

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

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

Заказ-наряд → Чек ККМ → Отчет о розничных продажах

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

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


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

Благодаря этому несложному алгоритму при вводе Чека ККМ на основании Заказ-наряда вся номенклатура (и запчасти, и услуги по их установке) соберется в единой табличной части чека. При выборе безналичного способа оплаты вся сумма без копеечных расхождений уйдет на кассовый аппарат, и чек будет успешно распечатан.

---

Дополнительные настройки округления и ФЛК в 1С

Иногда даже при полном переносе всех строк в чек ККМ может возникать расхождение в 1 копейку из-за распределения автоматических скидок или расчета НДС. Чтобы обезопасить систему от подобных ошибок, выполним следующие настройки:

← На главную