Как исправить ошибку «45h, Сумма всех типов оплаты меньше итога чека» на кассах Штрих-М при использовании скидок?

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

При работе с торговым оборудованием в 1С:Управление торговлей 10.3 пользователи часто сталкиваются с ситуацией, когда при попытке пробить чек с ручной или автоматической скидкой фискальный регистратор (ФР) семейства «Штрих-М» выдает ошибку: «45h, Сумма всех типов оплаты меньше итога чека». Эта проблема особенно актуальна для аппаратов, переведенных на форматы фискальных данных (ФФД) 1.05 и выше.

Разберем подробно причины возникновения этой ошибки и способы ее устранения, начиная от настроек драйвера и заканчивая корректировкой логики в самой системе 1С.

Почему возникает ошибка 45h?

Проанализируем механику работы кассового аппарата. Ошибка 45h буквально означает, что те деньги, которые мы передаем в команду закрытия чека (например, наличные или безнал), по сумме оказываются меньше, чем накопившийся итог по позициям внутри чека. Основная причина кроется в «проблеме одной копейки».

С введением ФФД 1.05 понятие «общая скидка на чек» фактически перестало существовать для фискального накопителя. Каждая товарная позиция теперь должна содержать конечную цену с учетом всех скидок. Если 1С передает позиции с одной ценой, а потом пытается применить общую скидку, драйвер кассы начинает самостоятельно распределять эту скидку по строкам чека. Из-за различий в алгоритмах округления 1С и прошивки кассы (например, 1С округляет до двух знаков, а касса может использовать промежуточные вычисления с большей точностью) возникает разница в 1 копейку. В итоге касса считает, что клиент должен заплатить, например, 100.01 руб., а 1С передает команду закрытия чека на 100.00 руб.

Решение 1: Настройка режима начисления скидок в драйвере

Первым делом нам необходимо проверить внутренние таблицы фискального регистратора. Рассмотрим, как это сделать через «Тест драйвера ККТ» (версии 4.14 или 4.15):

  1. Запустим утилиту «Тест драйвера».
  2. Перейдем в раздел «Настройка свойств», нажмем «Параметры ККТ» или «Таблицы».
  3. Найдем Таблицу №1 «Тип текста / Ряд 1».
  4. Нас интересует Поле 16 «Режим начисления скидок».

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

Решение 2: Распределение скидок на стороне 1С

Выясним причину, по которой 1С передает скидку отдельным параметром. В старых конфигурациях, таких как УТ 10.3, по умолчанию может быть настроена передача чека, где скидка идет «итогом». Чтобы избежать конфликтов с ФФД 1.05, необходимо заставить 1С самостоятельно рассчитывать цену каждой строки с учетом скидки перед отправкой данных в кассу.

Для этого в настройках торгового оборудования в 1С (справочник «Торговое оборудование») проверим параметры фискального регистратора. Убедимся, что включена опция «Распределять скидки по строкам». Если такая настройка отсутствует в интерфейсе вашей версии, это можно поправить в коде обработки обслуживания.

Рассмотрим фрагмент кода, который отвечает за формирование строк чека. Вместо передачи чистой цены и процента скидки, мы должны передавать уже вычисленную цену:


// Пример логики распределения суммы скидки по позициям
СуммаСкидкиНаПозицию = Окр(ИсходнаяЦена * ПроцентСкидки / 100, 2);
КонечнаяЦена = ИсходнаяЦена - СуммаСкидкиНаПозицию;
// Передаем в ФР уже КонечнаяЦена

Решение 3: Форматно-логический контроль (ФЛК)

В конфигурации 1С:Управление торговлей 10.3 существует механизм форматно-логического контроля. Если касса все равно «ловит» расхождения, попробуем изменить режим ФЛК. Перейдем в Справочники — Торговое оборудование — Фискальные регистраторы. В параметрах модели найдем настройку «Форматно-логический контроль».

Существует два режима:

Для решения ошибки 45h часто помогает установка режима «Грубый», так как 1С начнет более агрессивно округлять копейки в пользу итоговой суммы, исключая математические погрешности.

Решение 4: Принудительное выравнивание итога в коде

Если вышеперечисленные методы не помогают, проанализируем ситуацию программно. Ошибка возникает в процедуре ЗакрытьЧек. Чтобы гарантированно избежать расхождения, мы можем перед закрытием чека запросить у кассы ее внутренний итог (командой Подытог или GetSumm) и передать именно эту сумму в качестве оплаты.

Рассмотрим пример изменения в модуле обработки обслуживания (или в процедуре ЗакрытьЧек общего модуля):


// Перед вызовом метода закрытия чека драйвера
Объект.Драйвер.ПолучитьСуммуЧека(); // Команда драйвера Штрих
СуммаПоДаннымКассы = Объект.Драйвер.Summ;

// Сравниваем с нашей суммой оплаты
Если Абс(СуммаНал + СуммаБезнал - СуммаПоДаннымКассы) <= 0.05 Тогда
    // Если разница в пределах нескольких копеек, приравниваем оплату к итогу кассы
    СуммаНал = СуммаПоДаннымКассы - СуммаБезнал;
КонецЕсли;

// Теперь вызываем закрытие
Результат = Объект.Драйвер.ЗакрытьЧек(СуммаНал, СуммаБезнал, ...);

Этот метод является «силовым», но он эффективно устраняет ошибку 45h, так как касса получает в оплату ровно ту сумму, которую она сама себе насчитала в текущем сеансе чека.

Рекомендации по обновлению ПО

Посмотрим на версию прошивки и драйвера, указанные в исходном обращении. Прошивка от 25.01.2018 и драйвер 4.14 являются устаревшими для современных условий (маркировка, новые ставки НДС). Рекомендуем выполнить следующие действия:

  1. Обновить драйвер: Установите версию 4.15 или выше. В новых версиях драйверов Штрих-М значительно улучшены механизмы автоматического распределения скидок и округления.
  2. Обновить прошивку: Обратитесь в ЦТО для обновления прошивки ККТ до актуальной (2021-2023 годов). В современных прошивках алгоритм расчета налогов и скидок пересмотрен для минимизации «ошибки одной копейки».

Таким образом, комбинируя настройку Таблицы 1 (поле 16 = 0), включение распределения скидок в 1С и, при необходимости, программную корректировку суммы оплаты, вы сможете полностью избавиться от ошибки «45h, Сумма всех типов оплаты меньше итога чека».

← На главную