При работе с фискальными регистраторами семейства Штрих-М (включая популярные модели ЭЛВЕС-ФР-Ф) пользователи часто сталкиваются с критической ошибкой: «При выполнении операции произошла ошибка: 45h, Сумма всех типов оплаты меньше итога чека». Данная ситуация особенно характерна для чеков, в которых применяются автоматические или ручные скидки. В этой статье мы подробно разберем причины возникновения этой ошибки и пошагово пройдем путь от диагностики до полного устранения проблемы.
Проанализируем механику взаимодействия 1С и кассового аппарата. Ошибка 45h — это типичная «проблема копейки», возникающая из-за разницы в алгоритмах округления. Рассмотрим ситуацию: 1С рассчитывает скидку на весь документ и распределяет ее по позициям. В результате деления могут возникнуть длинные дробные части, которые программа округляет до двух знаков.
В то же время фискальный регистратор (ККТ) производит собственные вычисления суммы строки по формуле Цена * Количество. Если итоговая сумма, которую 1С передает как «Оплату», оказывается хотя бы на одну копейку меньше, чем сумма, которую ККТ насчитала по позициям, касса блокирует операцию. С точки зрения кассового аппарата, клиент вносит меньше денег, чем стоит товар, что недопустимо по закону.
Основные факторы, провоцирующие ошибку:
Как показывает практика, попытки «подружить» старую Розницу 2.1 с новыми прошивками ККТ под ФФД 1.05 через старые драйверы часто заходят в тупик. Рассмотрим правильный алгоритм обновления системы:
Во-первых, необходимо обновить 1С:Розница до редакции 2.2 или выше. В базовых версиях это делается через стандартный механизм обновления конфигурации. Во-вторых, обратим внимание на платформу. Для корректной работы драйверов Штрих-М крайне рекомендуется использовать 32-битную (x86) версию платформы 1С:Предприятие, даже если ваша операционная система 64-битная. Это связано с тем, что большинство интеграционных компонентов Штрих-М до сих пор являются 32-битными.
После обновления платформы (например, до версии 8.3.13 и выше), убедитесь, что в системе установлена актуальная версия драйвера «ШТРИХ-М: Драйвер ККТ 4.14» или выше.
Часто ошибка возникает из-за того, что 1С использует встроенный драйвер, который не совпадает с установленным в системе. Разберем процесс ручной установки компоненты:
C:\Program Files (x86)\SHTRIH-M\DrvFR 4.14\Bin\1C).shtrih-m_24.zip. Это и есть актуальные компоненты для интеграции.После этого статус драйвера должен смениться на «Установлен». Это гарантирует, что 1С будет общаться с кассой на «одном языке».
Для современных моделей, таких как ЭЛВЕС-ФР-Ф, подключение часто идет через интерфейс RNDIS. Проанализируем настройки связи в 1С:
В настройках оборудования выберем тип драйвера «Штрих-М: ККТ с передачей данных в ОФД 54-ФЗ». В параметрах подключения установим следующие значения:
192.168.137.111.7778.Важный совет: В настройках драйвера обязательно увеличьте Тайм-аут до 2000-3000 мс. При расчете сложных скидок бюджетные процессоры касс (особенно ЭЛВЕС) могут долго обрабатывать данные, и 1С может разорвать соединение раньше времени, что приведет к ошибке передачи чека.
Чтобы избежать расхождения в копейках, мы должны заставить 1С и кассу работать с целыми числами или одинаково округлять дробные. Рассмотрим, как это реализовать:
В 1С:Розница перейдем в «НСИ» -> «Магазины». В карточке магазина найдем настройки округления. Установим «Порядок округления суммы чека в пользу покупателя» до 1 рубля или хотя бы до 0.5 рубля. Это «отсечет» проблемные копейки на уровне документа 1С до того, как они попадут в ККТ.
Также проанализируем способ передачи скидки. Существует два подхода:
Второй вариант является наиболее стабильным для устранения ошибки 45h. В программном коде или настройках БПО это соответствует методу, когда в поле Цена передается фактически оплачиваемая сумма за единицу товара. Если вы используете типовую конфигурацию, убедитесь, что в настройках драйвера ККТ в 1С не стоит галочка «Печатать скидки», если это поддерживается вашей версией БПО — это заставит систему передавать чистые цены.
Если программные настройки 1С не помогают, обратимся к внутренним настройкам самого аппарата через «Тест драйвера ККТ». Разберем важные параметры в таблицах:
Важное замечание: Любые изменения в таблицах ККТ рекомендуется делать при закрытой смене.
Если вы столкнулись с этой проблемой в самописной конфигурации, рассмотрим пример кода, который подготавливает данные для передачи в БПО так, чтобы избежать расхождений. Главная задача — самостоятельно рассчитать итоговую цену позиции так, чтобы Цена * Количество строго равнялось сумме к оплате:
// Пример нормализации суммы строки для ККТ
СуммаКГП = Окр(СтрокаТовара.Цена * СтрокаТовара.Количество - СтрокаТовара.СуммаСкидки, 2);
РеальнаяЦенаДляККТ = СуммаКГП / СтрокаТовара.Количество;
// Заполняем структуру для БПО
ОбъектДрайвера.Цена = РеальнаяЦенаДляККТ;
ОбъектДрайвера.Сумма = СуммаКГП;
Используя функцию Окр(), мы гарантируем, что передаваемая сумма оплаты будет в точности соответствовать итогу чека. Проанализируем этот подход: даже если цена получится с большим количеством знаков после запятой, для ККТ приоритетным является итоговое поле Сумма позиции, и ошибка 45h возникать не будет.
Решение ошибки 45h требует комплексного подхода. Мы рассмотрели, что в первую очередь необходимо синхронизировать версии программного обеспечения, перейти на 32-битную платформу и правильно установить интеграционную компоненту. Настройка округления в пользу покупателя в 1С — самый эффективный способ избавиться от «лишних» копеек, которые не может обработать математика Штрих-М. Помните, что стабильная работа кассы зависит не только от кода 1С, но и от актуальности прошивки самого фискального регистратора.