一、功能逻辑









二、功能界面

三、功能代码
*&———————————————————————*
*& Report ZRPPP_0020
*&———————————————————————*
*&
*&———————————————————————*
REPORT zrppp_0020.
TABLES: afpo, mkpf, mard .
*INCLUDE <color>.
DATA: gr_table TYPE REF TO cl_salv_table,
gr_layout TYPE REF TO cl_salv_layout,
gs_program TYPE salv_s_layout_key,
gr_columns TYPE REF TO cl_salv_columns_table,
gr_column TYPE REF TO cl_salv_column_table,
gr_display TYPE REF TO cl_salv_display_settings,
gt_s_color TYPE lvc_t_scol,
gs_s_color TYPE lvc_s_scol.
TYPES: BEGIN OF ty_tab ,
dwerk TYPE afpo-dwerk,
aufnr TYPE afpo-aufnr,
auart TYPE caufv-auart,
txt TYPE t003p-txt,
plnbez TYPE afpo-matnr,
maktx TYPE makt-maktx,
gamng TYPE afko-gamng,
gstrp TYPE afko-gstrp,
gltrp TYPE afko-gltrp,
matnr TYPE resb-matnr,
maktx1 TYPE makt-maktx,
menge TYPE resb-enmng,
ztlsl TYPE resb-enmng,
zllsl TYPE resb-enmng,
lgort TYPE resb-lgort,
zriqi TYPE resb-bdter,
mblnr TYPE mseg-mblnr,
* ztxt TYPE bapi_msg,
END OF ty_tab .
DATA:BEGIN OF gt_tab OCCURS 0 .
INCLUDE TYPE ty_tab .
DATA:
wemng TYPE afpo-wemng, “收货数量
psmng TYPE afpo-psmng,
bdmng TYPE resb-bdmng, “组件需求数量
ausch TYPE resb-ausch,
posnr TYPE resb-posnr,
enmng TYPE resb-enmng,
rsnum TYPE resb-rsnum,
rspos TYPE resb-rspos,
zflag TYPE c,
END OF gt_tab .
DATA:gt_msg TYPE TABLE OF zsbc_return_msg WITH HEADER LINE .
TYPES:BEGIN OF ty_lgort,
werks TYPE werks_d,
lgort TYPE lgort_d,
lgobe TYPE lgobe,
END OF ty_lgort .
DATA gt_lgort TYPE TABLE OF ty_lgort.
DATA:BEGIN OF gw_info.
DATA: ztype TYPE bapi_mtype,
zmsg TYPE bapi_msg,
zauth_wrk TYPE char1, “工厂权限
END OF gw_info .
SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE TEXT-001.
PARAMETERS:rd1 RADIOBUTTON GROUP gp1 DEFAULT 'X',
rd2 RADIOBUTTON GROUP gp1.
SELECT-OPTIONS: s_aufnr FOR afpo-aufnr MEMORY ID anr OBLIGATORY .
PARAMETERS: p_budat TYPE mkpf-budat OBLIGATORY,
p_lgort TYPE mard-lgort OBLIGATORY.
SELECTION-SCREEN END OF BLOCK part1.
INITIALIZATION.
gt_lgort = VALUE #( ( werks = '1001' lgort = 'A001' lgobe = '冲压' )
( werks = '1001' lgort = 'A002' lgobe = '冲压-MS' )
( werks = '1001' lgort = 'A003' lgobe = '注塑' )
( werks = '1001' lgort = 'A004' lgobe = '组装-成品组装' )
( werks = '1001' lgort = 'A005' lgobe = '组装-LDS' )
( werks = '1001' lgort = 'A006' lgobe = '组装-O型弹片' )
( werks = '1001' lgort = 'A007' lgobe = '组装-MS' )
( werks = '1001' lgort = 'A008' lgobe = '组装-GW' )
( werks = '1001' lgort = 'A009' lgobe = '组装-振子' )
( werks = '1001' lgort = 'A010' lgobe = '组装-后亭' )
( werks = '1001' lgort = 'A011' lgobe = '制样线边仓' )
( werks = '1002' lgort = 'C001' lgobe = '冲压-AC' )
( werks = '1002' lgort = 'C002' lgobe = '冲压一部二部制样' )
( werks = '1002' lgort = 'C003' lgobe = '冲压-模切' )
( werks = '1002' lgort = 'C004' lgobe = '注塑' )
( werks = '1002' lgort = 'C005' lgobe = '组装-一车间' )
( werks = '1002' lgort = 'C006' lgobe = '组装-二车间' )
( werks = '1002' lgort = 'C007' lgobe = '组装-二车间' )
( werks = '1002' lgort = 'C008' lgobe = '组装-三车间' )
( werks = '1002' lgort = 'C009' lgobe = '国内车间' )
( werks = '1002' lgort = 'C010' lgobe = '组装-制样' )
( werks = '1002' lgort = 'C011' lgobe = 'AC包装' )
( werks = '1002' lgort = 'C012' lgobe = 'AC研磨抛光' )
( werks = '1002' lgort = 'C013' lgobe = 'AC镭雕' )
( werks = '1002' lgort = 'C014' lgobe = 'AC制样' ) ) .
START-OF-SELECTION.
PERFORM frm_check_input .
CHECK gw_info-ztype NE 'E' .
PERFORM frm_get_data .
PERFORM frm_show_alv .
*&———————————————————————*
*& Form frm_get_data
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_get_data .
TYPES : BEGIN OF ty_aufnr,
sign(1) TYPE c,
option(2) TYPE c,
low LIKE resb-aufnr,
high LIKE resb-aufnr,
END OF ty_aufnr.
DATA : it_aufnr TYPE TABLE OF ty_aufnr WITH HEADER LINE .
RANGES: r_aufnr FOR afpo-aufnr.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_tab
FROM afpo JOIN afko ON afpo~aufnr = afko~aufnr
JOIN caufv ON afko~aufnr = caufv~aufnr
JOIN resb ON resb~aufnr = afko~aufnr
WHERE afpo~aufnr IN s_aufnr AND resb~xloek = ' ' AND resb~rgekz = ' ' AND bwart NE '531'.
CHECK NOT gt_tab[] IS INITIAL .
SELECT matnr, maktx INTO TABLE @DATA(lt_makt)
FROM makt FOR ALL ENTRIES IN @gt_tab
WHERE ( matnr = @gt_tab-plnbez OR matnr = @gt_tab-matnr )
AND spras = @sy-langu .
SELECT auart ,txt INTO TABLE @DATA(lt_auart)
FROM t003p WHERE spras = @sy-langu .
SELECT * INTO TABLE @DATA(lt_012)
FROM ztpp012 .
MOVE-CORRESPONDING gt_tab[] TO it_aufnr[] .
“只取RELL订单类型
SELECT DISTINCT aufk~aufnr, vsaufk~stat
INTO TABLE @DATA(lt_aufnr)
FROM vsaufk INNER JOIN aufk ON vsaufk~objnr = aufk~objnr
FOR ALL ENTRIES IN @gt_tab
WHERE inact EQ ' ' AND aufk~aufnr = @gt_tab-aufnr
AND stat EQ 'I0002' .
* DATA:lw_objects TYPE bapi_pp_order_objects,
* lt_header TYPE TABLE OF bapi_order_header1 WITH HEADER LINE,
* lt_operation TYPE TABLE OF bapi_order_operation1 WITH HEADER LINE,
* lt_position TYPE TABLE OF bapi_order_item WITH HEADER LINE,
* lw_return TYPE bapiret2.
LOOP AT lt_aufnr INTO DATA(lw_aufnr).
INSERT VALUE #( sign = 'I' option = 'EQ' low = lw_aufnr-aufnr ) INTO TABLE r_aufnr.
DATA(lv_aufnr) = |{ lw_aufnr-aufnr ALPHA = OUT }|.
INSERT VALUE #( sign = 'I' option = 'EQ' low = lv_aufnr ) INTO TABLE r_aufnr.
ENDLOOP.
SELECT aufnr, matnr, SUM( enmng1 ) AS bfsl INTO TABLE @DATA(lt_005)
FROM ztpp005
WHERE aufnr IN @r_aufnr GROUP BY aufnr, matnr.
DATA:lw_005 LIKE LINE OF lt_005 .
SELECT aufnr, matnr1, SUM( znum1 ) AS bfsl INTO TABLE @DATA(lt_009)
FROM ztpp009
WHERE aufnr IN @r_aufnr GROUP BY aufnr, matnr1.
DATA:lw_009 LIKE LINE OF lt_009 .
LOOP AT gt_tab ASSIGNING FIELD-SYMBOL(<sy_tab>) .
* lw_objects-header = 'X' .
* lw_objects-operations = 'X' .
* lw_objects-positions = 'X' .
*
* CALL FUNCTION 'BAPI_PRODORD_GET_DETAIL'
* EXPORTING
* number = <sy_tab>-aufnr
* order_objects = lw_objects
* IMPORTING
* return = lw_return
* TABLES
* header = lt_header
* operation = lt_operation
* position = lt_position.
* IF lt_header-system_status NS 'REL' .
** <sy_tab>-zflag = 'X'.
** CHECK <sy_tab>-zflag IS INITIAL .
* ENDIF.
READ TABLE lt_aufnr INTO lw_aufnr WITH KEY aufnr = <sy_tab>-aufnr .
IF sy-subrc NE 0.
<sy_tab>-zflag = 'X'.
CHECK <sy_tab>-zflag IS INITIAL .
ENDIF.
“退料数量 = 组件已领数量 – (生产工单入库数量 * 组件单位用量)- 报废数
“1001工厂组件单位用量=组件需求数量 / 已订购量
“1002工厂组件单位用量=(组件需求量 – 报废数量)/ 已订购量
“报废数=组件需求数量 – 组件需求数量 / (1 +单位损耗 / 100)
“单位损耗 = 组件损耗率RESB-AUSCH
* DATA(lv_bfs) = <sy_tab>-bdmng – <sy_tab>-bdmng / ( 1 + <sy_tab>-ausch / 100 ) .
“报废数量
READ TABLE lt_009 INTO lw_009 WITH KEY aufnr = <sy_tab>-aufnr matnr1 = <sy_tab>-matnr.
IF sy-subrc EQ 0.
DATA(lv_bfs) = lw_009-bfsl .
ENDIF.
lv_aufnr = |{ <sy_tab>-aufnr ALPHA = OUT }|.
DATA(lv_matnr) = |{ <sy_tab>-matnr ALPHA = OUT }|.
IF lv_bfs IS INITIAL .
READ TABLE lt_005 INTO lw_005 WITH KEY aufnr = lv_aufnr matnr = lv_matnr.
IF sy-subrc EQ 0.
lv_bfs = lw_005-bfsl .
ELSE.
READ TABLE lt_005 INTO lw_005 WITH KEY aufnr = <sy_tab>-aufnr matnr = <sy_tab>-matnr.
IF sy-subrc EQ 0.
lv_bfs = lw_005-bfsl .
ENDIF.
ENDIF.
ENDIF.
“没维护,默认
* IF <sy_tab>-dwerk = '1001'.
* DATA(lv_dwyl) = '1'.
* ELSEIF <sy_tab>-dwerk = '1002' .
* lv_dwyl = '2'.
* ENDIF.
* READ TABLE lt_012 INTO DATA(lw_012) WITH KEY werks = <sy_tab>-dwerk .
* IF sy-subrc EQ 0.
* lv_dwyl = lw_012-dwyl .
* ENDIF.
* IF lv_dwyl = '1'.
* DATA(lv_zjdwyl) = <sy_tab>-bdmng / <sy_tab>-gamng .
* ELSEIF lv_dwyl = '2'.
* lv_zjdwyl = ( <sy_tab>-bdmng – lv_bfs ) / <sy_tab>-gamng .
* ENDIF.
DATA(lv_zjdwyl) = <sy_tab>-bdmng / <sy_tab>-gamng .
* IF NOT <sy_tab>-enmng IS INITIAL.
* <sy_tab>-ztlsl = <sy_tab>-enmng – ( <sy_tab>-wemng – lv_zjdwyl ) – lv_bfs .
* ENDIF.
* ENMNG发放量 – ( BDMNG需求数量 / PSMNG已订购量) * WEMNG完成数量 * (1-AUSCH单位损耗/100) – ZENMNG1报废数量
<sy_tab>-ztlsl = <sy_tab>-enmng – ( <sy_tab>-bdmng / <sy_tab>-psmng ) * <sy_tab>-wemng * ( 1 – <sy_tab>-ausch / 100 ) – lv_bfs.
CLEAR lv_bfs .
READ TABLE lt_makt INTO DATA(lw_tab) WITH KEY matnr = <sy_tab>-plnbez .
IF sy-subrc EQ 0.
<sy_tab>-maktx = lw_tab-maktx .
ENDIF.
READ TABLE lt_makt INTO lw_tab WITH KEY matnr = <sy_tab>-matnr .
IF sy-subrc EQ 0.
<sy_tab>-maktx1 = lw_tab-maktx .
ENDIF.
READ TABLE lt_auart INTO DATA(lw_auart) WITH KEY auart = <sy_tab>-auart.
IF sy-subrc EQ 0.
<sy_tab>-txt = lw_auart-txt .
ENDIF.
“工单物料
IF <sy_tab>-plnbez IS INITIAL.
SELECT SINGLE afpo~matnr, maktx INTO ( @<sy_tab>-plnbez,@<sy_tab>-maktx )
FROM afpo JOIN makt ON afpo~matnr = makt~matnr
WHERE aufnr = @<sy_tab>-aufnr .
ENDIF.
<sy_tab>-menge = <sy_tab>-enmng . “已领数量
<sy_tab>-zriqi = p_budat .
<sy_tab>-lgort = p_lgort .
<sy_tab>-zllsl = <sy_tab>-bdmng – <sy_tab>-menge.
ENDLOOP.
DELETE gt_tab WHERE zflag = 'X' .
SORT gt_tab ASCENDING BY aufnr posnr.
ENDFORM.
*&———————————————————————*
*& Form frm_show_alv
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_show_alv .
DATA: t_columns TYPE salv_t_column_ref.
DATA: is_variant TYPE disvariant.
DATA: wa_layo TYPE lvc_s_layo.
DATA: wa_fcat TYPE lvc_s_fcat,
it_fcat TYPE lvc_t_fcat.
CONSTANTS: alv_style_font_bold(4) TYPE x VALUE '00000020'.
DATA:lt_tab TYPE TABLE OF ty_tab .
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_tab[]
).
CATCH cx_salv_msg.
ENDTRY.
gr_columns = gr_table->get_columns( ).
CALL METHOD gr_columns->get
RECEIVING
value = t_columns.
LOOP AT t_columns ASSIGNING FIELD-SYMBOL(<dyn_column>) .
wa_fcat-fieldname = <dyn_column>-r_column->get_columnname( ) .
wa_fcat-datatype = <dyn_column>-r_column->get_ddic_datatype( ) .
wa_fcat-intlen = <dyn_column>-r_column->get_ddic_intlen( ) .
wa_fcat-inttype = <dyn_column>-r_column->get_ddic_inttype( ) .
wa_fcat-dd_outlen = <dyn_column>-r_column->get_ddic_outputlen( ) .
wa_fcat-decimals = <dyn_column>-r_column->get_ddic_decimals( ) .
wa_fcat-domname = <dyn_column>-r_column->get_ddic_domain( ) .
wa_fcat-scrtext_l = <dyn_column>-r_column->get_long_text( ) .
wa_fcat-scrtext_m = <dyn_column>-r_column->get_medium_text( ) .
wa_fcat-scrtext_s = <dyn_column>-r_column->get_short_text( ) .
wa_fcat-outputlen = <dyn_column>-r_column->get_output_length( ) .
wa_fcat-rollname = <dyn_column>-r_column->get_ddic_rollname( ) .
APPEND wa_fcat TO it_fcat .
ENDLOOP.
“修改文本
DEFINE mcr_setcol.
LOOP AT it_fcat INTO wa_fcat WHERE fieldname = &1 .
wa_fcat-scrtext_l = &2 .
wa_fcat-scrtext_m = &2 .
wa_fcat-scrtext_s = &2 .
wa_fcat-reptext = &2 .
wa_fcat-no_zero = 'X'.
IF wa_fcat-datatype = 'QUAN'.
wa_fcat-edit_mask = '==ZZERO'.
ENDIF.
CLEAR:wa_fcat-emphasize,wa_fcat-style,wa_fcat-edit .
IF &3 = 'X'.
wa_fcat-emphasize = 'C500' .
wa_fcat-style = alv_style_font_bold .
wa_fcat-edit = 'X' .
IF &1 = 'ZRIQI' .
wa_fcat-ref_field = 'BDTER' .
wa_fcat-ref_table = 'RESB' .
ENDIF.
ENDIF.
MODIFY it_fcat FROM wa_fcat .
ENDLOOP.
END-OF-DEFINITION.
mcr_setcol:
'DWERK' '工厂' '' ,
'AUFNR' '生产工单' '',
'AUART' '生产工单类型' '',
'PLNBEZ' '物料编码' '',
'MAKTX' '物料描述' '',
'GAMNG' '生产工单数量' '',
'GSTRP' '开始日期' '',
'GLTRP' '结束日期' '',
'MATNR' '组件物料编码' '',
'MAKTX' '组件物料描述' '',
'MENGE' '已领数量' '',
'ZTLSL' '退料数量' 'X',
'ZLLSL' '发料数量' 'X',
'LGORT' '退料库存地' '',
'ZRIQI' '过账日期' 'X',
'MBLNR' '凭证号' ''.
IF rd2 = 'X'.
mcr_setcol: 'LGORT' '发料库存地' ''.
DELETE it_fcat WHERE fieldname = 'ZTLSL' .
ELSE.
DELETE it_fcat WHERE fieldname = 'ZLLSL' .
ENDIF.
CLEAR: wa_layo.
wa_layo-cwidth_opt = 'X'.
is_variant-report = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'F_PF_STATUS'
i_callback_user_command = 'F_USER_COMMAND'
is_layout_lvc = wa_layo
it_fieldcat_lvc = it_fcat
is_variant = is_variant
i_save = 'X'
TABLES
t_outtab = gt_tab
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
*&———————————————————————*
*& Form frm_check_input
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_check_input .
* “判断权限
* gw_info-zauth_wrk = 'X'.
* AUTHORITY-CHECK OBJECT 'ZAOPP_WRK'
* ID 'ZWERKS' FIELD s_werks-low
* ID 'ZACTIVE' FIELD 'X'.
* IF sy-subrc <> 0.
* gw_info-ztype = 'E'.
* gw_info-zmsg = '您没有此工厂的BOM查询权限' .
* gw_info-zauth_wrk = ''.
* ENDIF.
SELECT aufnr,dwerk INTO TABLE @DATA(lt_werks) FROM afpo WHERE aufnr IN @s_aufnr .
READ TABLE gt_lgort INTO DATA(lw_lgort) WITH KEY lgort = p_lgort .
IF sy-subrc NE 0 .
gw_info-ztype = 'E'.
gw_info-zmsg = '库存地输入错误,只能输入线边库代码' .
ELSE.
DELETE lt_werks WHERE dwerk = lw_lgort-werks .
LOOP AT lt_werks INTO DATA(lw_werks).
gw_info-ztype = 'E'.
DATA(lv_aufnr) = |{ lw_werks-aufnr ALPHA = OUT }|.
CONCATENATE gw_info-zmsg '工单[' lv_aufnr ']库存地输入错误; ' INTO gw_info-zmsg .
ENDLOOP.
CONDENSE gw_info-zmsg NO-GAPS.
ENDIF.
MESSAGE gw_info-zmsg TYPE 'S' DISPLAY LIKE gw_info-ztype .
ENDFORM.
FORM f_pf_status USING rt_extab TYPE slis_t_extab.
IF rd1 = 'X'.
DATA(lv_title) = '未清生产工单关闭物料退料' .
SET PF-STATUS 'STANDARD1'.
ELSEIF rd2 = 'X'.
lv_title = '新工单发料批量处理' .
SET PF-STATUS 'STANDARD'.
ENDIF.
SET TITLEBAR 'TITLE' WITH lv_title .
ENDFORM.
FORM f_user_command USING pv_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
DATA:lv_code TYPE bapi2017_gm_code,
lv_loop TYPE i,
lv_test TYPE char1.
DATA:lw_head TYPE bapi2017_gm_head_01 .
DATA:BEGIN OF lt_gdftl OCCURS 0 ,
move_type TYPE bwart,
material TYPE matnr,
plant TYPE werks_d,
stge_loc TYPE lgort_d,
entry_qnt TYPE menge_d,
entry_uom TYPE meins,
orderid TYPE aufnr,
reserv_no TYPE rsnum,
res_item TYPE rspos,
xstob TYPE xstob,
END OF lt_gdftl .
DATA: ref_grid TYPE REF TO cl_gui_alv_grid,
ls_layout TYPE lvc_s_layo.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid.
IF NOT ref_grid IS INITIAL.
CALL METHOD ref_grid->check_changed_data .
ENDIF.
BREAK guoxiongjie .
CASE pv_ucomm.
WHEN 'GDFL' OR 'GDTL' .
DO 2 TIMES.
ADD 1 TO lv_loop.
CLEAR lv_test.
IF lv_loop = 1.
lv_test = 'X' .
ENDIF.
CLEAR:gt_msg[],lt_gdftl[].
LOOP AT gt_tab .
AT END OF aufnr .
DATA(end_flag) = 'X'.
ENDAT.
IF pv_ucomm = 'GDFL'. “工单发料
lt_gdftl-move_type = '261'.
lt_gdftl-entry_qnt = gt_tab-zllsl.
ELSEIF pv_ucomm = 'GDTL' . “工单退料
lt_gdftl-move_type = '262'.
lt_gdftl-entry_qnt = gt_tab-ztlsl.
lt_gdftl-xstob = 'X'.
ENDIF.
IF lt_gdftl-entry_qnt > 0.
lt_gdftl-material = gt_tab-matnr.
lt_gdftl-plant = gt_tab-dwerk.
lt_gdftl-stge_loc = gt_tab-lgort.
* lt_gdftl-entry_uom = gt_tab-meins.
* lt_gdftl-orderid = gt_tab-aufnr.
lt_gdftl-reserv_no = gt_tab-rsnum .
lt_gdftl-res_item = gt_tab-rspos .
APPEND lt_gdftl .
ENDIF.
IF end_flag = 'X'.
lv_code = '03'.
lw_head-pstng_date = gt_tab-zriqi .
lw_head-doc_date = sy-datum .
lw_head-pr_uname = sy-uname.
PERFORM frm_goods_mvt TABLES lt_gdftl USING lv_code lw_head lv_test CHANGING gt_tab-mblnr .” gt_tab-ztxt .
CLEAR end_flag .
CHECK lv_test IS INITIAL .
MODIFY gt_tab TRANSPORTING mblnr WHERE aufnr = gt_tab-aufnr .
ENDIF.
ENDLOOP.
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = gt_msg.
IF NOT gt_msg[] IS INITIAL.
EXIT .
ENDIF.
ENDDO.
ENDCASE.
CALL METHOD ref_grid->get_frontend_layout
IMPORTING
es_layout = ls_layout.
ls_layout-cwidth_opt = 'X'.
CALL METHOD ref_grid->set_frontend_layout
EXPORTING
is_layout = ls_layout.
CALL METHOD ref_grid->check_changed_data .
CALL METHOD ref_grid->refresh_table_display.
ENDFORM.
*&———————————————————————*
*& Form FRM_GOODS_MVT
*&———————————————————————*
*& text
*&———————————————————————*
*& –> LT_GDFL
*& –> LW_HEAD
*& <– GT_TAB_MBLNR
*& <– GT_TAB_ZTXT
*&———————————————————————*
FORM frm_goods_mvt TABLES pt_gdftl
USING pv_code pw_head pv_test
CHANGING pv_mblnr
.
DATA:
lw_head TYPE bapi2017_gm_head_01,
lt_gdftl TYPE TABLE OF bapi2017_gm_item_create,
lv_code TYPE bapi2017_gm_code,
lv_mblnr TYPE bapi2017_gm_head_ret-mat_doc,
lv_mjahr TYPE bapi2017_gm_head_ret-doc_year,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2.
CLEAR:pv_mblnr.”,pv_ztxt.
lv_code = pv_code.
MOVE-CORRESPONDING pw_head TO lw_head .
MOVE-CORRESPONDING pt_gdftl[] TO lt_gdftl[].
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = lw_head
goodsmvt_code = lv_code
testrun = pv_test
IMPORTING
materialdocument = lv_mblnr
matdocumentyear = lv_mjahr
TABLES
goodsmvt_item = lt_gdftl
return = lt_return.
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'a' .
gt_msg-msgid = ls_return-id .
gt_msg-msgty = ls_return-type .
gt_msg-msgno = ls_return-number .
gt_msg-msgv1 = ls_return-message_v1 .
gt_msg-msgv2 = ls_return-message_v2 .
gt_msg-msgv3 = ls_return-message_v3 .
gt_msg-msgv4 = ls_return-message_v4 .
APPEND gt_msg .
ENDLOOP.
IF gt_msg[] IS INITIAL AND pv_test IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
pv_mblnr = lv_mblnr .
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ENDFORM.


