ME11/ME12:RV_CONDITION_COPY
示例代码
DATA:
ls_key_fields TYPE komg,
lt_copy_records TYPE TABLE OF komv,
ls_copy_records TYPE komv,
lt_copy_staffel TYPE TABLE OF condscale,
ls_copy_staffel TYPE condscale,
lt_knumh_comp TYPE TABLE OF knumh_comp,
ls_knumh_comp TYPE knumh_comp,
ls_komk TYPE komk,
ls_komp TYPE komp,
lv_record TYPE konh-knumh,
ls_a918 TYPE a918.
DATA: lv_tab TYPE kotabnr.
DATA: lv_message TYPE string.
DATA: lv_maintain_mode TYPE char01.
DATA: lv_keep TYPE char01.
lv_tab = '918'.
LOOP AT gt_duty_alv INTO gs_duty_alv WHERE box IS NOT INITIAL AND icon NE icon_red_light.
CLEAR:ls_key_fields,lt_copy_records,lt_copy_staffel,ls_komk,ls_komp,lv_record,lv_message,lt_knumh_comp.
IF gs_duty_alv-knumh IS INITIAL .
lv_maintain_mode = 'A'. "创建
lv_keep = 'X'.
ELSE.
lv_maintain_mode = 'B'. "修改
lv_keep = ''.
ENDIF.
ls_key_fields-werks = gs_duty_alv-werks.
ls_key_fields-stawn = gs_duty_alv-stawn.
ls_key_fields-aland = gs_duty_alv-aland.
CLEAR ls_copy_records.
" condtion fields
ls_copy_records-knumh = gs_duty_alv-knumh.
ls_copy_records-kopos = '01'.
ls_copy_records-kschl = gs_duty_alv-kschl.
ls_copy_records-kappl = gs_duty_alv-kappl.
ls_copy_records-kbetr = gs_duty_alv-kbetr * 10.
ls_copy_records-waers = gs_duty_alv-konwa.
APPEND ls_copy_records TO lt_copy_records.
CALL FUNCTION 'RV_CONDITION_RESET'.
CALL FUNCTION 'RV_CONDITION_COPY'
EXPORTING
application = 'M'
condition_table = lv_tab
condition_type = gs_duty_alv-kschl "'PB00'
date_from = gs_duty_alv-datab "'20220304'
date_to = gs_duty_alv-datbi "'99991231'
key_fields = ls_key_fields
maintain_mode = lv_maintain_mode "A:创建 B:更新
overlap_confirmed = 'X'
* used_by_idoc = 'X'
keep_old_records = lv_keep
selection_date = gs_duty_alv-datab "注意修改的时候一定要传输
IMPORTING
e_komk = ls_komk
e_komp = ls_komp
new_record = lv_record
TABLES
copy_records = lt_copy_records
copy_staffel = lt_copy_staffel
EXCEPTIONS
enqueue_on_record = 1
invalid_application = 2
invalid_condition_number = 3
invalid_condition_type = 4
no_authority_ekorg = 5
no_authority_kschl = 6
no_authority_vkorg = 7
no_selection = 8
table_not_valid = 9
no_material_for_settlement = 10
no_unit_for_period_cond = 11
no_unit_reference_magnitude = 12
invalid_condition_table = 13
OTHERS = 14.
IF sy-subrc = 0.
" commit and get condition NO.
CALL FUNCTION 'RV_CONDITION_SAVE'
TABLES
knumh_map = lt_knumh_comp.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
CALL FUNCTION 'RV_CONDITION_RESET'.
READ TABLE lt_knumh_comp INTO ls_knumh_comp INDEX 1.
IF sy-subrc = 0 AND ls_knumh_comp-knumh_new IS NOT INITIAL.
MESSAGE ls_knumh_comp-knumh_new TYPE 'S'.
gs_duty_alv-icon = icon_green_light.
gs_duty_alv-knumh = ls_knumh_comp-knumh_new.
MODIFY gt_duty_alv FROM gs_duty_alv.
ELSE.
gs_duty_alv-icon = icon_green_light.
gs_duty_alv-msg = lv_message.
MODIFY gt_duty_alv FROM gs_duty_alv.
ENDIF.
ELSE.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = sy-msgid
msgnr = sy-msgv1
msgv1 = sy-msgv1
msgv2 = sy-msgv2
msgv3 = sy-msgv3
msgv4 = sy-msgv4
IMPORTING
message_text_output = lv_message.
gs_duty_alv-icon = icon_red_light.
gs_duty_alv-msg = lv_message.
MODIFY gt_duty_alv FROM gs_duty_alv.
ENDIF.
ENDLOOP.