Почему возникает ошибка печати чека при частичной оплате в 1С:УНФ и как ее исправить?

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

При работе в 1С:УНФ пользователи часто сталкиваются с ситуацией, когда при пробитии чека на частичную оплату «Заказа покупателя» возникает ошибка «Документ аннулирован». Это происходит из-за того, что фискальный регистратор получает данные, которые он считает некорректными. Давайте разберем, почему это случается и как мы можем исправить эту ситуацию программными средствами.

Суть проблемы: математические несоответствия при распределении оплаты

Основная сложность заключается в том, как 1С распределяет общую сумму предоплаты по позициям заказа. Когда мы разбиваем, например, 31 000 рублей на 40 позиций, возникают дробные числа. В определенных случаях стандартный алгоритм расчета ЦенаСоСкидками может выдавать значения, которые при суммировании всех строк чека дают расхождение с итоговой суммой предоплаты. Кассовый аппарат строго следит за тем, чтобы итоговая сумма в чеке совпадала с суммой всех товаров до копейки. Если возникает даже минимальное расхождение из-за округления, касса выдает ошибку и аннулирует чек.

Разбор алгоритма расчета цен

Проанализируем стандартную логику, которая зачастую вызывает сбои. В модуле МенеджерОборудованияВызовСервера система пытается определить цену товара для чека. Если расчет производится неверно (например, при попытке деления на 0 или некорректном округлении), происходит критическая ошибка передачи данных в ККТ.

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

Пошаговое решение: модификация кода через расширение

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

Замените или дополните текущую логику расчета следующим фрагментом:


Если ТекущаяПозиция.Количество > 0 Тогда
    ЦенаСоСкидками = Окр(ТекущаяПозиция.Сумма / ТекущаяПозиция.Количество, 2);
Иначе
    ЦенаСоСкидками = ТекущаяПозиция.ЦенаСоСкидками;
КонецЕсли;

Разберем, что мы здесь делаем:

  1. Мы проверяем условие ТекущаяПозиция.Количество > 0, чтобы избежать ошибки деления на ноль.
  2. Используем функцию Окр с точностью до 2 знаков, чтобы цена соответствовала формату, принимаемому кассовым аппаратом.
  3. Присваиваем полученное значение переменной ЦенаСоСкидками, которая далее используется для формирования фискального пакета данных.

Дополнительные рекомендации по отладке

Помимо правки кода, обратите внимание на следующие моменты:

Применяя данные рекомендации и используя предложенный код в расширении, вы сможете устранить ошибку аннулирования чеков и обеспечить корректное прохождение частичных оплат в вашей системе 1С:УНФ.

← На главную