Текущее время: Чт, апр 18 2024, 12:37

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по исходящим поставкам - сюда



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Распределить "копейки" по позициям в заголовке сбытовой фактуры
СообщениеДобавлено: Пн, сен 28 2020, 16:30 
Начинающий
Начинающий

Зарегистрирован:
Пн, сен 28 2020, 11:20
Сообщения: 4
Привет!
Начну, пожалуй, с предисловия, постановки задачи и попыток её решения.

Для распределения копеек/центов по позициям был введён вид условия 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. Как в формуле базиса получить значения данного вида условия, а также количество всех позиций?

Заранее спасибо за помощь!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Распределить "копейки" по позициям в заголовке сбытовой фактуры
СообщениеДобавлено: Пт, окт 02 2020, 09:19 
Начинающий
Начинающий

Зарегистрирован:
Пн, сен 28 2020, 11:20
Сообщения: 4
Решение задачи было найдено, но эйфория длилось не долго. Зная значение условие, в формуле базиса, базис был не нулевым, пока позиция фактуры не была равна кол-ву условия *1000 по модулю.

Но в фактуре нет авто нумерации, поэтому завязка на позициях не подходит, но есть идея:

Если при расчёте базиса записывать переменную+1 в память, до момента, когда она поравняется с условием.

Соответственно встаёт вопрос: как в VOFM - базис условия, можно изменять какую-нибудь переменную в памяти (возможно xkomv), чтобы проходя по позициям, формула считывала переменную, добавляла к ней условную +1 и записывала в память?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Распределить "копейки" по позициям в заголовке сбытовой фактуры  Тема решена
СообщениеДобавлено: Пт, окт 02 2020, 09:33 
Гуру-маршал
Гуру-маршал
Аватара пользователя

Зарегистрирован:
Пт, янв 30 2009, 09:59
Сообщения: 1580
Откуда: Москва, Минск
Пол: Мужской
Привет!
Попробуй использовать статическую переменную, к которой будешь докидывать копейку при калькуляции позиции.
Или можно сделать Z-класс, в нем 2 метода: SET/GET.
В классе создать атрибут mv_diff.
При калькуляции позиции получаешь значение атрибута mv_diff через метод GET в переменную lv_diff, докидываешь копейку в lv_diff и обновляешь атрибут mv_diff с помощью метода GET.

_________________
Лучше быть умным и иногда тупить, чем быть тупым и постоянно умничать!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB