Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => Тема начата: e.gorscov от Октябрь 08, 2012, 05:22:24 pm
-
Добрый день, уважаемые абаперы. Нужна помощь начинающему.
Стоит задача: написать программу, которая бы калькулировала продажные цены и сохраняла их в виде условия a671-a673 поле kschl. Сами цены должны храниться в konp-kbetr. Программа то написана, все считается хорошо. Однако возник вопрос, каким ФМником могу обновлять имеющиеся виды условий и сохранять под ними новые цены, посчитанные. Будьте добры, поделитесь советом, укажите светлый путь к нужному ФМ и не судите строго за незнание. :-[ :-[ :-[ :-[ :-[ :'(
-
Однако возник вопрос, каким ФМником могу обновлять имеющиеся виды условий и сохранять под ними новые цены, посчитанные.
Если вы имеете в виду транзакцию ведения видов условий VK11/VK12/VK13 для заказа SD, то наверное пакетник можно написать, хотя если честно из вашего сообщения я не очень понял что считается правильно и что надо сохранять.
-
из вашего сообщения я не очень понял что считается правильно и что надо сохранять.
Простите. Считаются формулы, в АЛВ все подсчитываю, а полученные данные нужно сохранять в виде заведенных видов условий, я имею в виду полученные в результате подсчетов продажные цены.
-
Сохранять условия можно, например, ФМ WV_CONDITION_POSTE.
-
хорошая функа BAPI_PRICES_CONDITIONS, в свое время пакетником VK11 блокировки (материала или заказа не помню) возникали, поэтому функой надежнее
-
хорошая функа BAPI_PRICES_CONDITIONS, в свое время пакетником VK11 блокировки (материала или заказа не помню) возникали, поэтому функой надежнее
спасибо за помощь. Подошло. Разобрался и все работает. Осталось доделать мелки штрихи, но это - просто вопрос времени.
ФМник действительно полезный
-
ФМник действительно полезный
Ну тогда пример использования в моответствующий раздел положите, если не сложно.
-
Ну тогда пример использования в моответствующий раздел положите, если не сложно.
Да я с удовольствием выложу, простите за задержку был чуть занят другими делами, вот только есть одна неувязочка. ФМник конечно же свое дело делает, но не совсем так, как хотелось бы. Поясню: Дело в том, чтобы разработка, кроме стандартного обновления последней заведенной цены, также могла и переоценять все старые партиии, заводя попутно новую цену с новым knumh. (В случае оптовых продаж для сеноциально значимых товаров) И вот тут как раз неувязочка. Мой код не проводит должных изменений (не генерит новый knumh и не перееоценивает старые партии...) Искал много по индусским форумам но толкового не накопал, даже уж не знаю как и быть.
Код как и просили, его отрезок вернее...
DATA:
lv_message TYPE string,
ls_bapicondct TYPE bapicondct,
ls_bapicondhd TYPE bapicondhd,
ls_bapicondit TYPE bapicondit,
lt_bapiret2 TYPE TABLE OF bapiret2,
lt_bapicondct TYPE TABLE OF bapicondct,
lt_bapicondhd TYPE TABLE OF bapicondhd,
lt_bapicondit TYPE TABLE OF bapicondit,
lt_bapicondqs TYPE TABLE OF bapicondqs,
lt_bapicondvs TYPE TABLE OF bapicondvs,
lt_bapiknumhs TYPE TABLE OF bapiknumhs,
lt_mem_initial TYPE TABLE OF cnd_mem_initial.
* BREAK-POINT.
LOOP AT gt_price WHERE check EQ con_x.
"----------------------------------------------------------BAPI Structure for condition table---->
ls_bapicondct-operation = '04'.
ls_bapicondct-cond_usage = 'A'.
IF r6 EQ con_x.
ls_bapicondct-table_no = '671'.
ELSEIF r7 EQ con_x.
ls_bapicondct-table_no = '672'.
ELSEIF r3 EQ con_x.
ls_bapicondct-table_no = '673'.
ENDIF.
ls_bapicondct-cond_no = wa_knumh.
IF r1 EQ con_x
* OR r2 EQ con_x
.
ls_bapicondct-cond_type = 'VKP0'.
ELSEIF r3 EQ con_x.
ls_bapicondct-cond_type = 'ZMAK'.
ENDIF.
ls_bapicondct-valid_from = pa_data-low.
ls_bapicondct-valid_to = pa_data-high.
ls_bapicondct-applicatio = 'V'.
APPEND ls_bapicondct TO lt_bapicondct.
"----------------------------------------------------------KONH---->
ls_bapicondhd-cond_no = wa_knumh.
ls_bapicondhd-cond_usage = 'A'.
IF r6 EQ con_x.
ls_bapicondhd-table_no = '671'.
ELSEIF r7 EQ con_x.
ls_bapicondhd-table_no = '672'.
ELSEIF r3 EQ con_x.
ls_bapicondhd-table_no = '673'.
ENDIF.
ls_bapicondhd-created_by = sy-uname.
ls_bapicondhd-creat_date = sy-datum.
ls_bapicondhd-applicatio = 'V'.
IF r1 EQ con_x
* OR r2 EQ con_x
.
ls_bapicondhd-cond_type = 'VKP0'.
ELSEIF r3 EQ con_x.
ls_bapicondhd-cond_type = 'ZMAK'.
ENDIF.
ls_bapicondhd-valid_from = pa_data-low.
ls_bapicondhd-valid_to = pa_data-high.
APPEND ls_bapicondhd TO lt_bapicondhd.
"----------------------------------------------------------KONP---->
ls_bapicondit-cond_no = wa_knumh.
ls_bapicondit-cond_count = gt_price-kopos.
ls_bapicondit-applicatio = 'V'.
ls_bapicondit-scale_qty = '0'.
ls_bapicondit-unitmeasur = gt_price-meins.
IF r1 EQ con_x
* OR r2 EQ con_x
.
ls_bapicondit-cond_type = 'VKP0'.
ELSEIF r3 EQ con_x.
ls_bapicondit-cond_type = 'ZMAK'.
ENDIF.
ls_bapicondit-scaletype = 'A'.
ls_bapicondit-calctypcon = 'C'.
ls_bapicondit-cond_value = gt_price-pro_ts_nds.
ls_bapicondit-condcurr = 'MDL'.
ls_bapicondit-condcurren = 'MDL'.
APPEND ls_bapicondit TO lt_bapicondit.
ENDLOOP.
CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
TABLES
ti_bapicondct = lt_bapicondct
ti_bapicondhd = lt_bapicondhd
ti_bapicondit = lt_bapicondit
ti_bapicondqs = lt_bapicondqs
ti_bapicondvs = lt_bapicondvs
to_bapiret2 = lt_bapiret2
to_bapiknumhs = lt_bapiknumhs
to_mem_initial = lt_mem_initial
EXCEPTIONS
update_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
lv_message = 'Неудача'.
ENDIF.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = con_x.
-
откопался и мой кусочек кода, кому пригодиться ...
когда эти условия создаешь генериться прога RV13A_НОМЕР_таблицы собственно оттуда и дергаем процедуру
DATA: it_konc TYPE TABLE OF bapicondct ,
wa_konc TYPE bapicondct ,
it_konh TYPE TABLE OF bapicondhd ,
wa_konh TYPE bapicondhd ,
it_koni TYPE TABLE OF bapicondit ,
wa_koni TYPE bapicondit ,
it_konq TYPE TABLE OF bapicondqs ,
it_konv TYPE TABLE OF bapicondvs ,
et_ret2 TYPE TABLE OF bapiret2 ,
et_knum TYPE TABLE OF bapiknumhs ,
it_memb TYPE TABLE OF cnd_mem_initial,
tmp_komg TYPE komg,
sourcename TYPE string,
tab_no TYPE bapicondct-table_no.
DATA : vakey TYPE bapicondct-varkey.
IF kschl IS NOT INITIAL.
CLEAR: tmp_komg, vakey,wa_konc,it_konc,it_konh,wa_konh,it_koni,wa_koni,p_err.
* if matkl is not INITIAL .
* tab_no = '703'.
* else.
tab_no = '701'.
* endif.
CONCATENATE 'RV13A' tab_no INTO sourcename.
tmp_komg-bukrs = p_bukrs.
tmp_komg-matnr = matnr.
TRY .
PERFORM fill_vakey_from_komg IN PROGRAM (sourcename) USING vakey tmp_komg.
CATCH cx_sy_program_not_found.
ENDTRY.
IF vakey IS NOT INITIAL.
wa_konc-cond_usage = 'A'.
wa_konc-table_no = tab_no.
wa_konc-applicatio = 'M'.
wa_konc-cond_type = kschl.
wa_konc-varkey = vakey.
MOVE valid_from TO wa_konc-valid_from.
MOVE valid_from TO wa_konh-valid_from.
MOVE valid_to TO wa_konc-valid_to.
MOVE valid_to TO wa_konh-valid_to.
wa_konc-cond_no = '$1'.
APPEND wa_konc TO it_konc.
wa_konh-cond_no = '$1'.
wa_konh-created_by = sy-uname.
wa_konh-creat_date = sy-datum.
wa_konh-cond_usage = 'A'.
wa_konh-table_no = tab_no.
wa_konh-applicatio = 'M'.
wa_konh-cond_type = kschl.
wa_konh-varkey = vakey.
APPEND wa_konh TO it_konh.
wa_koni-cond_no = '$1'.
wa_koni-cond_count = '01'.
wa_koni-applicatio = 'M'.
wa_koni-cond_type = kschl.
wa_koni-scaletype = 'A'.
wa_koni-calctypcon = calctypcon.
wa_koni-cond_value = kbetr.
wa_koni-cond_unit = kmein.
wa_koni-cond_p_unt = 1.
APPEND wa_koni TO it_koni.
CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
TABLES
ti_bapicondct = it_konc
ti_bapicondhd = it_konh
ti_bapicondit = it_koni
ti_bapicondqs = it_konq
ti_bapicondvs = it_konv
to_bapiret2 = et_ret2
to_bapiknumhs = et_knum
to_mem_initial = it_memb
EXCEPTIONS
update_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
p_err = 'X'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ENDIF.
ENDIF.
-
а именно по поводу переоценивания всех старых существующих партий для которых имеются остатки, никто не сталкивался?? :'(
-
а именно по поводу переоценивания всех старых существующих партий для которых имеются остатки, никто не сталкивался?? :'(
Ну руками, точнее программой, выбираешь остатки всех старых партий, хотя минуточку..не партий, а видов оценки. Партии к переоценке ни при чем.