Привет! Начну, пожалуй, с предисловия, постановки задачи и попыток её решения.
Для распределения копеек/центов по позициям был введён вид условия ZDIF, ручной ввод, с правилом расчёта "Фиксированная сумма" и галкой "Групповое условие". Пользователи вводили в заголовок требуемое количество центов (пример -0,03), и они "случайно" раскидывались по позициям по (-0,01), и всё было отлично. С определенного момента у пользователей возникали фактуры, в которых условие записывалось полностью в одну позицию, вместо равномерного "размазывания".
Пришла задача: исправить данную ошибку, дабы условие всегда раскидывало копейки по разным позициям - Пример 1: 10 позиций, ZDIF = -0,05 → кинь в любые 5 по -0,01, можно даже по порядку. Пример 2: 5 позиций, ZDIF = -0,06 → в 4 позициях должно быть по -0,01, и в оставшейся -0,02 соответственно.
Начали разбираться. Выяснилось, что "ошибки" возникают из-за УслвРазнцОкргл (Условия разницы округления), увидеть её можно в Позиция - Условие - Подробно, которое является стандартом системы, а именно: "При распределении абсолютных сумм могут возникать разницы из округления. Система автоматически выравнивает эту разницу с помощью присвоения остатка наибольшей позиции, так чтобы сумма в заголовке оказалась равна сумме значений всех позиций."
Т.е получается, что всё работает правильно, и SAP не считает это за ошибку (функция работает как задумано). Во всех просмотренных нотах именно такой ответ и является решением, кроме одной, где предлагается ввести формулу для отключения данной разницы округления. Спойлер: данное решение работает только для процентных правил расчёта, что не подходит, ведь нужна фиксированная сумма. Также пришли к выводу о том, что нет смысла отключать разницу округления, потому что тогда ZDIF заголовка не всегда будет равен сумме значений всех позиций. У условия ZDIF применена стандартная базовая формула 2 (Стоимость Нетто). При вводе ZDIF = -0,03, в фактуре есть лишь одна позиция, которая при расчёте может быть округлена до -0,01, появляется "УслвРазнцОкргл" и присваивается данной позиции (она и есть самая большая).
SAP в нотах предлагает выбрать свой базис условия (логично предположить, что любой другой базис снова приведёт к разнице округлений).
Решили ввести свой базис условия, который будет у всех позиций одинаковый, но в итоге мы получим следующий результат: (для того же примера с 10 позициями) при заголовке ZDIF = -0,05, в каждой позиции станет ZDIF = -0,01, а в самой большой позиции появится разница: ZDIF = +0,04. В сумме заголовок равен сумме позиций, но нам такое не подходит.
Пройдя данный путь, хотелось бы услышать знатоков, возможно, кто-то сталкивался и поборол подобное.
Вопросы:
1. Если сделать свой базис условия, можно как-то оставить расчёт ВУсл, когда он станет нулём (т.е при заголовке ZDIF = -0,05, в первых 5 позициях ZDIF = -0,01 и на этом условие отработает, без лишних итераций (ведь расчёт каждой позиции идёт поочередно))? 2. Может, есть другие пути решения, которые не были рассмотрены в данной теме? 3. Как в формуле базиса получить значения данного вида условия, а также количество всех позиций?
Заранее спасибо за помощь!
|
|