Доброе время суток.
Может кто-нибудь сталкивался с подобной проблемой или есть желание побороться с железной машиной SAP..

Есть задача ограничить срок действия скидки по дате создания заказа (т.е. не по дате цены как это работает стандартно) или по текущей дате во время создания заказа.
Мои попытки:
1. Добавил в прайсинг для этих скидок рутину (Requirement), где пытался получить "Valid to" рассматриваемой скидки из таблицы KONH через tkomv-knumv, но это не работает во время создания заказа, т.к. tkomv не заполнен. В итоге так и не нашел как при создании заказа добраться до KONH. После попытки 2 (см. ниже) понял, что KONH не поможет...
2. Добавил формулу (AltCBV) где пытался обнулить значение скидки. Получилось добраться до KONH через xkomv-KNUMH и даже обнулить скидку! Но в результате тестирования выяснилось, что KONH каким-то образом буферизирует значения дат: при изменении Valid to скидки (транзакцией VK12), KONH-DATBI не обновляется. Т.е. KONH в данном случае бесполезен. Код формулы привел в конце сообщения.
Как вариант можно было бы анализировать все Axxx таблицы из скидки, но это не очень то удобно, т.к. при добавлении новых ключей надо будет прописывать новые таблицы.
За сим прошу помощи всемогущего ALL
Код "почти работающей" формулы:
Code:
data: w_vbfa_vbelv like vbfa-vbelv,
w_vbak_erdat like vbak-erdat,
zDATBI like konh-DATBI,
zKNUMH like konh-KNUMH.
* get "valid to" date of the condition
clear zKNUMH.
zKNUMH = xkomv-KNUMH.
check: not zKNUMH is initial.
select single DATBI
from konh
into zDATBI
where knumh eq zKNUMH.
* without sales order number - analyze current date
if sy-tcode eq 'VA01' or komp-AUBEL eq '$TEMP'.
if sy-DATUM > zDATBI.
xkwert = 0.
endif.
exit.
endif.
* else find the orders number and compare with it
* check document flow to get the sales order number
select single vbelv
from vbfa
into w_vbfa_vbelv
where vbeln = komp-AUBEL
and vbtyp_v = 'C'.
if sy-subrc <> 0.
* check sales orders header table for the order
select single vbeln
from vbak
into w_vbfa_vbelv
where vbeln eq komp-AUBEL.
if sy-subrc <> 0.
message id 'SU' type 'S' number '899'
with 'Document not found in VBFA and VBAK' komp-AUBEL.
exit.
endif.
endif.
select single erdat
from vbak
into w_vbak_erdat
where vbeln = w_vbfa_vbelv.
if w_vbak_erdat > zDATBI.
xkwert = 0.
endif.