При работе в 1С:УНФ пользователи часто сталкиваются с ситуацией, когда при пробитии чека на частичную оплату «Заказа покупателя» возникает ошибка «Документ аннулирован». Это происходит из-за того, что фискальный регистратор получает данные, которые он считает некорректными. Давайте разберем, почему это случается и как мы можем исправить эту ситуацию программными средствами.
Основная сложность заключается в том, как 1С распределяет общую сумму предоплаты по позициям заказа. Когда мы разбиваем, например, 31 000 рублей на 40 позиций, возникают дробные числа. В определенных случаях стандартный алгоритм расчета ЦенаСоСкидками может выдавать значения, которые при суммировании всех строк чека дают расхождение с итоговой суммой предоплаты. Кассовый аппарат строго следит за тем, чтобы итоговая сумма в чеке совпадала с суммой всех товаров до копейки. Если возникает даже минимальное расхождение из-за округления, касса выдает ошибку и аннулирует чек.
Проанализируем стандартную логику, которая зачастую вызывает сбои. В модуле МенеджерОборудованияВызовСервера система пытается определить цену товара для чека. Если расчет производится неверно (например, при попытке деления на 0 или некорректном округлении), происходит критическая ошибка передачи данных в ККТ.
Рассмотрим, как можно оптимизировать эту логику. Нам нужно обеспечить точный расчет цены на основе Сумма и Количество. Мы можем модифицировать процедуру расчета так, чтобы она всегда корректно обрабатывала количество, исключая передачу ошибочных данных.
Чтобы не менять типовую конфигурацию и сохранить возможность обновления 1С, рекомендуем использовать механизм расширений. Рассмотрим, какой код необходимо внедрить для корректного вычисления ЦенаСоСкидками:
Замените или дополните текущую логику расчета следующим фрагментом:
Если ТекущаяПозиция.Количество > 0 Тогда
ЦенаСоСкидками = Окр(ТекущаяПозиция.Сумма / ТекущаяПозиция.Количество, 2);
Иначе
ЦенаСоСкидками = ТекущаяПозиция.ЦенаСоСкидками;
КонецЕсли;
Разберем, что мы здесь делаем:
ТекущаяПозиция.Количество > 0, чтобы избежать ошибки деления на ноль.Окр с точностью до 2 знаков, чтобы цена соответствовала формату, принимаемому кассовым аппаратом.ЦенаСоСкидками, которая далее используется для формирования фискального пакета данных.Помимо правки кода, обратите внимание на следующие моменты:
Применяя данные рекомендации и используя предложенный код в расширении, вы сможете устранить ошибку аннулирования чеков и обеспечить корректное прохождение частичных оплат в вашей системе 1С:УНФ.