Текущее время: Ср, апр 24 2024, 11:15

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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