REPORT z_test110.
TABLES: mslb,msku,zp21auth,zp21log.
TYPE-POOLS: slis.
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: it_fieldcat TYPE lvc_t_fcat, "slis_t_fieldcat_alv WITH HEADER LINE,
wa_fieldcat TYPE lvc_s_fcat,
i_fieldcat TYPE slis_fieldcat_alv,
gd_tab_group TYPE slis_t_sp_group_alv,
gd_layout TYPE lvc_s_layo, "slis_layout_alv,
i_events TYPE slis_t_event,
w_events LIKE LINE OF i_events,
i_list_comments TYPE slis_t_listheader,
w_list_comments LIKE LINE OF i_list_comments,
gd_repid LIKE sy-repid.
DATA fm_name TYPE rs38l_fnam.
DATA: BEGIN OF itab OCCURS 0,
werks LIKE msku-werks, "工厂
matnr LIKE msku-matnr, "物料
maktx LIKE makt-maktx, "物料描述
kunnr LIKE msku-kunnr, "供应商
name1 LIKE kna1-name1, "供应商名称
kulab LIKE msku-kulab, "非限制使用的估价的库存
meins LIKE mara-meins,
kuins LIKE msku-kuins, "质量检验中的库存
kuein LIKE msku-kuein, "全部限制批次的总计库存
ersda LIKE msku-ersda, "创建日期
kuuml LIKE msku-kuuml, "客户寄售中转库存(工厂到工厂)
field_style TYPE lvc_t_styl, "FOR DISABLE
gv_check(1) TYPE c,
kulabs LIKE msku-kulab,
kunnrs LIKE msku-kunnr,
END OF itab.
DATA itab2 LIKE TABLE OF itab WITH HEADER LINE. "
DATA itab3 LIKE TABLE OF itab WITH HEADER LINE. "
DATA wa_itab LIKE LINE OF itab.
DATA wa_itab2 LIKE LINE OF itab2.
DATA wa_itab3 LIKE LINE OF itab3.
DATA: _kunn TYPE i,
_shiyong TYPE i,
_xianzhi TYPE i,
_zhijian TYPE i,
_zhuanyi TYPE i.
DATA: lt_gm_head TYPE STANDARD TABLE OF bapi2017_gm_head_01, "BAPI 通讯结构:物料凭证抬头数据
l_gm_head LIKE bapi2017_gm_head_01,
l_gm_head2 LIKE bapi2017_gm_head_01,
materialdocument TYPE bapi2017_gm_head_ret-mat_doc, "MMIM: 有关一般的FM到记帐货物移动的输入结构
matdocumentyear TYPE bapi2017_gm_head_ret-doc_year,
lt_gm_code TYPE STANDARD TABLE OF bapi2017_gm_code, "MMIM: 分配给库存管理的新码 GM_CODE
l_gm_code LIKE bapi2017_gm_code,
lt_mat_doc TYPE STANDARD TABLE OF bapi2017_gm_head_ret, "MMIM: 有关一般的FM到记帐货物移动的输入结构
l_mat_doc LIKE bapi2017_gm_head_ret,
lt_gm_item TYPE STANDARD TABLE OF bapi2017_gm_item_create, "BAPI 通讯结构:创建物料凭证项目
l_gm_item LIKE bapi2017_gm_item_create,
lt_gm_item1 TYPE STANDARD TABLE OF bapi2017_gm_item_create,
lt_gm_item2 TYPE STANDARD TABLE OF bapi2017_gm_item_create,
l_gm_item1 LIKE bapi2017_gm_item_create,
l_gm_item2 LIKE bapi2017_gm_item_create,
goodsmvt_headret TYPE bapi2017_gm_head_ret. "MMIM: 有关一般的FM到记帐货物移动的输入结构
DATA:BEGIN OF lt_return OCCURS 10.
INCLUDE STRUCTURE bapiret2.
DATA:END OF lt_return.
DATA zauth LIKE usrbf2-auth.
DATA zusrbf2 LIKE usrbf2 OCCURS 0 WITH HEADER LINE.
DATA: lt_ltap_creat LIKE ltap_creat OCCURS 0 WITH HEADER LINE.
DATA: lt_ltap_creat1 LIKE ltap_creat OCCURS 0 WITH HEADER LINE.
DATA: lgnum LIKE t320-lgnum,
benum LIKE ltbk-benum.
DATA: lv_tanum LIKE ltak-tanum.
DATA: t_ltap_conf LIKE ltap_conf OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK xx1 WITH FRAME TITLE t1.
PARAMETERS:p_werks LIKE msku-werks OBLIGATORY MEMORY ID wrk.
SELECT-OPTIONS: s_matnr FOR msku-matnr OBLIGATORY MEMORY ID mtr.
SELECT-OPTIONS: s_kunnr FOR msku-kunnr MEMORY ID knr.
SELECTION-SCREEN END OF BLOCK xx1.
INITIALIZATION.
t1 = '选择数据'.
START-OF-SELECTION.
PERFORM prs_data.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form prs_data
*&---------------------------------------------------------------------*
FORM prs_data .
PERFORM get_data. "读取数据
PERFORM set_specific_field_attributes.
PERFORM events_build. "alv事件
PERFORM layout_build. "定义alv格式属性
PERFORM fields_build. "定义列标题信息
PERFORM display_data. "显示数据
ENDFORM. "prs_data
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
FORM get_data.
SELECT msku~werks msku~matnr msku~kunnr kna1~name1 msku~kulab msku~kuins msku~kuein msku~ersda msku~kuuml makt~maktx mara~meins
INTO CORRESPONDING FIELDS OF TABLE itab
FROM msku
INNER JOIN kna1 ON msku~kunnr = kna1~kunnr
INNER JOIN makt ON msku~matnr = makt~matnr
INNER JOIN mara ON msku~matnr = mara~matnr
WHERE msku~matnr IN s_matnr
AND msku~werks = p_werks
AND msku~kunnr IN s_kunnr
AND msku~kulab > 0.
LOOP AT itab.
_shiyong = _shiyong + itab-kulab.
_xianzhi = _xianzhi + itab-kuein.
_zhijian = _zhijian + itab-kuins.
_zhuanyi = _zhuanyi + itab-kuuml.
IF itab-kulab > 0.
itab-gv_check = 'X'.
ENDIF.
MODIFY itab.
ENDLOOP.
DESCRIBE TABLE itab LINES _kunn.
SORT itab BY werks matnr kunnr ASCENDING.
ENDFORM. "get_data
*&---------------------------------------------------------------------*
*& Form pf_status_set
*&---------------------------------------------------------------------*
FORM pf_status_set USING rt_extab TYPE slis_t_extab. "调用的FORM
SET PF-STATUS 'PF_STATUS_SET'.
ENDFORM. "pf_status_set
*&---------------------------------------------------------------------*
*& Form set_specific_field_attributes
*&---------------------------------itab-----------------------------------*
FORM set_specific_field_attributes .
DATA ls_stylerow TYPE lvc_s_styl .
DATA lt_styletab TYPE lvc_t_styl .
LOOP AT itab INTO wa_itab.
IF wa_itab-kulab < 0 OR wa_itab-kulab = 0.
ls_stylerow-fieldname = 'KULABS' .
ls_stylerow-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND ls_stylerow TO wa_itab-field_style.
ls_stylerow-fieldname = 'GV_CHECK'.
ls_stylerow-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND ls_stylerow TO wa_itab-field_style.
MODIFY itab FROM wa_itab.
ENDIF.
ENDLOOP.
ENDFORM. " set_specific_field_attributes
*&---------------------------------------------------------------------*
*& Form events_build
*&---------------------------------------------------------------------*
FORM events_build .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = i_events.
READ TABLE i_events WITH KEY name = 'TOP_OF_PAGE'
INTO w_events.
IF sy-subrc = 0.
MOVE 'ALV_TOP_OF_PAGE' TO w_events-form.
MODIFY i_events FROM w_events INDEX sy-tabix.
ENDIF.
READ TABLE i_events INTO w_events WITH KEY name = 'USER_COMMAND'.
IF sy-subrc EQ 0.
w_events-name = 'USER_COMMAND'.
MODIFY i_events FROM w_events INDEX sy-tabix.
ENDIF.
READ TABLE i_events WITH KEY name = 'END_OF_LIST'"slis_ev_end_of_page
INTO w_events.
IF sy-subrc = 0.
MOVE 'ALV_END_OF_LIST' TO w_events-form.
MODIFY i_events FROM w_events INDEX sy-tabix.
ENDIF.
ENDFORM. " events_build
*&---------------------------------------------------------------------*
*& Form alv_top_of_page
*&---------------------------------------------------------------------*
FORM alv_top_of_page.
CLEAR: i_list_comments.
w_list_comments-typ = 'S'.
w_list_comments-key = '供应商数量 '.
w_list_comments-info = _kunn.
APPEND w_list_comments TO i_list_comments.
CLEAR w_list_comments.
w_list_comments-typ = 'S'.
w_list_comments-key = '非限制库存 '.
w_list_comments-info = _shiyong.
APPEND w_list_comments TO i_list_comments.
CLEAR w_list_comments.
w_list_comments-typ = 'S'.
w_list_comments-key = '限制库存 '.
w_list_comments-info = _xianzhi.
APPEND w_list_comments TO i_list_comments.
CLEAR w_list_comments.
w_list_comments-typ = 'S'.
w_list_comments-key = '质检库存 '.
w_list_comments-info = _zhijian.
APPEND w_list_comments TO i_list_comments.
CLEAR w_list_comments.
w_list_comments-typ = 'S'.
w_list_comments-key = '转移库存 '.
w_list_comments-info = _zhuanyi.
APPEND w_list_comments TO i_list_comments.
CLEAR w_list_comments.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = i_list_comments
i_logo = 'ENJOYSAP_LOGO' "标题图标.
i_end_of_list_grid = 'X'.
* i_logo = 'ENJOYSAP_LOGO'. "标题图标
ENDFORM. "alv_top_of_page
*&---------------------------------------------------------------------*
*& Form layout_build
*&---------------------------------------------------------------------*
FORM layout_build .
* i_layout-zebra = 'X'.
* i_layout-no_vline = ' '.
* i_layout-detail_titlebar = '详细内容'.
* i_layout-no_colhead = ' '.
* i_layout-f2code = '&IC1'.
** i_layout-box_fieldname = 'LINE'.
* w_repid = sy-repid.
gd_layout-info_fname = 'COLOR'. "颜色值
gd_layout-stylefname = 'FIELD_STYLE'.
gd_layout-zebra = 'X'.
* gd_layout-cwidth_opt = 'X'.
ENDFORM. " layout_build
*&---------------------------------------------------------------------*
*& Form fields_build
*&---------------------------------------------------------------------*
FORM fields_build .
* REFRESH i_fieldcat_alv.
* CLEAR i_fieldcat.
DATA colnum TYPE i VALUE 1.
wa_fieldcat-fieldname = 'GV_CHECK'. "2此处代码设置屏幕的chekbox选中字段
wa_fieldcat-scrtext_m = '选择项'.
wa_fieldcat-outputlen = 1.
wa_fieldcat-checkbox = 'X'.
* wa_fieldcat-input = 'X'.
wa_fieldcat-edit = 'X'.
wa_fieldcat-key = 'X'.
wa_fieldcat-outputlen = 6.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
colnum = colnum + 1.
wa_fieldcat-col_pos = colnum.
wa_fieldcat-outputlen = 5.
wa_fieldcat-fieldname = 'WERKS'.
wa_fieldcat-scrtext_s = '工厂'.
wa_fieldcat-scrtext_m = '工厂'.
wa_fieldcat-scrtext_l = '工厂'.
wa_fieldcat-lzero = 'X'.
wa_fieldcat-key = 'X'.
wa_fieldcat-just = 'L'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
colnum = colnum + 1.
wa_fieldcat-col_pos = colnum.
wa_fieldcat-outputlen = 8.
wa_fieldcat-fieldname = 'MATNR'.
wa_fieldcat-scrtext_s = '物料编码'.
wa_fieldcat-scrtext_m = '物料编码'.
wa_fieldcat-scrtext_l = '物料编码'.
wa_fieldcat-lzero = 'X'.
wa_fieldcat-key = 'X'.
wa_fieldcat-just = 'L'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
colnum = colnum + 1.
wa_fieldcat-col_pos = colnum.
wa_fieldcat-outputlen = 12.
wa_fieldcat-fieldname = 'MAKTX'.
wa_fieldcat-scrtext_s = '物料描述'.
wa_fieldcat-scrtext_m = '物料描述'.
wa_fieldcat-scrtext_l = '物料描述'.
wa_fieldcat-lzero = 'X'.
wa_fieldcat-key = 'X'.
wa_fieldcat-just = 'L'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
colnum = colnum + 1.
wa_fieldcat-col_pos = colnum.
wa_fieldcat-outputlen = 8.
wa_fieldcat-fieldname = 'KUNNR'.
wa_fieldcat-scrtext_s = '客户'.
wa_fieldcat-scrtext_m = '客户'.
wa_fieldcat-scrtext_l = '客户'.
wa_fieldcat-no_zero = 'X'.
wa_fieldcat-key = 'X'.
wa_fieldcat-just = 'L'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
colnum = colnum + 1.
wa_fieldcat-col_pos = colnum.
wa_fieldcat-outputlen = 15.
wa_fieldcat-fieldname = 'NAME1'.
wa_fieldcat-scrtext_s = '客户名称'.
wa_fieldcat-scrtext_m = '客户名称'.
wa_fieldcat-scrtext_l = '客户名称'.
wa_fieldcat-lzero = 'X'.
wa_fieldcat-key = 'X'.
wa_fieldcat-just = 'L'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
colnum = colnum + 1.
wa_fieldcat-col_pos = colnum.
wa_fieldcat-outputlen = 12.
wa_fieldcat-fieldname = 'KULAB'.
wa_fieldcat-scrtext_s = '使用库存'.
wa_fieldcat-scrtext_m = '使用库存'.
wa_fieldcat-scrtext_l = '使用库存'.
wa_fieldcat-lzero = 'X'.
wa_fieldcat-just = 'L'.
wa_fieldcat-emphasize = 'C510'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
colnum = colnum + 1.
wa_fieldcat-col_pos = colnum.
wa_fieldcat-outputlen = 12.
wa_fieldcat-fieldname = 'KULABS'.
wa_fieldcat-scrtext_s = '转移库存数量'.
wa_fieldcat-scrtext_m = '转移库存数量'.
wa_fieldcat-scrtext_l = '转移库存数量'.
wa_fieldcat-edit = 'X'.
wa_fieldcat-datatype = 'QUAN'.
wa_fieldcat-ref_table = 'MSKU'.
wa_fieldcat-ref_field = 'KULAB'.
wa_fieldcat-just = 'L'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
colnum = colnum + 1.
wa_fieldcat-col_pos = colnum.
wa_fieldcat-outputlen = 12.
wa_fieldcat-fieldname = 'KUNNRS'.
wa_fieldcat-scrtext_s = '接受客户'.
wa_fieldcat-scrtext_m = '接受客户'.
wa_fieldcat-scrtext_l = '接受客户'.
wa_fieldcat-edit = 'X'.
wa_fieldcat-just = 'L'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
colnum = colnum + 1.
wa_fieldcat-col_pos = colnum.
wa_fieldcat-outputlen = 7.
wa_fieldcat-fieldname = 'KUINS'.
wa_fieldcat-scrtext_s = '质量库存'.
wa_fieldcat-scrtext_m = '质量库存'.
wa_fieldcat-scrtext_l = '质量库存'.
wa_fieldcat-lzero = 'X'.
wa_fieldcat-just = 'L'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
colnum = colnum + 1.
wa_fieldcat-col_pos = colnum.
wa_fieldcat-outputlen = 7.
wa_fieldcat-fieldname = 'KUEIN'.
wa_fieldcat-scrtext_s = '限制库存'.
wa_fieldcat-scrtext_m = '限制库存'.
wa_fieldcat-scrtext_l = '限制库存'.
wa_fieldcat-lzero = 'X'.
wa_fieldcat-just = 'L'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
colnum = colnum + 1.
wa_fieldcat-col_pos = colnum.
wa_fieldcat-outputlen = 9.
wa_fieldcat-fieldname = 'ERSDA'.
wa_fieldcat-scrtext_s = '创建日期'.
wa_fieldcat-scrtext_m = '创建日期'.
wa_fieldcat-scrtext_l = '创建日期'.
wa_fieldcat-lzero = 'X'.
wa_fieldcat-just = 'L'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
colnum = colnum + 1.
wa_fieldcat-col_pos = colnum.
wa_fieldcat-outputlen = 7.
wa_fieldcat-fieldname = 'KUUML'.
wa_fieldcat-scrtext_s = '中转库存'.
wa_fieldcat-scrtext_m = '中转库存'.
wa_fieldcat-scrtext_l = '中转库存'.
wa_fieldcat-lzero = 'X'.
wa_fieldcat-just = 'L'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
colnum = colnum + 1.
wa_fieldcat-col_pos = colnum.
wa_fieldcat-outputlen = 6.
wa_fieldcat-fieldname = 'MEINS'.
wa_fieldcat-scrtext_s = '单位'.
wa_fieldcat-scrtext_m = '单位'.
wa_fieldcat-scrtext_l = '单位'.
wa_fieldcat-lzero = 'X'.
wa_fieldcat-just = 'L'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
ENDFORM. "fields_build
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
FORM display_data .
gd_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = gd_repid
is_layout_lvc = gd_layout
it_fieldcat_lvc = it_fieldcat
it_events = i_events[]
i_callback_user_command = 'USER_COMMAND'(001)
i_callback_pf_status_set = 'PF_STATUS_SET'(004)
i_save = 'X'
TABLES
t_outtab = itab
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. "display_data
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
FORM user_command USING i_ucomm LIKE sy-ucomm
is_selfield TYPE slis_selfield.
DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
*4此处代码将用户输入读入内表(这一步不可少)
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data.
is_selfield-refresh = 'X'.
CASE i_ucomm.
DATA pt_type(30) TYPE c.
WHEN '&IC1'.
READ TABLE itab INDEX is_selfield-tabindex.
WHEN 'ALL'.
LOOP AT itab .
IF itab-kulab <> 0 AND itab-kulab >= itab-kulabs .
itab-gv_check = 'X'.
MODIFY itab.
ENDIF.
ENDLOOP.
WHEN 'SAL'.
LOOP AT itab.
itab-gv_check = ' '.
MODIFY itab.
ENDLOOP.
WHEN 'ZHUANYI'.
READ TABLE itab INDEX is_selfield-tabindex.
LOOP AT itab.
IF itab-kulabs > itab-kulab AND itab-gv_check = 'X' AND itab-kunnrs <>''.
MESSAGE e052(zp33).
ENDIF.
IF itab-gv_check = 'X' AND itab-kunnrs ='' AND itab-kulabs =< itab-kulab AND itab-kulabs > 0.
MESSAGE e054(zp33).
ENDIF.
IF itab-gv_check = 'X' AND itab-kulabs > 0 AND itab-kulab > 0 AND itab-kulabs =< itab-kulab.
MOVE itab TO itab2.
APPEND itab2.
ENDIF.
ENDLOOP.
IF itab2 IS INITIAL.
MESSAGE e053(zp33).
ENDIF.
PERFORM zhuanyi.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form zhuanyi
*&---------------------------------------------------------------------*
FORM zhuanyi.
LOOP AT itab2.
l_gm_item1-material = itab2-matnr.
l_gm_item1-plant = itab2-werks.
l_gm_item1-stge_loc = '1000'.
l_gm_item1-stge_type = '914'.
* l_gm_item1-stge_bin = '10000'.
* l_gm_item1-unittype_1 = 'E1'.
l_gm_item1-move_type = '622'.
l_gm_item1-customer = itab2-kunnr.
l_gm_item1-entry_qnt = itab2-kulabs.
l_gm_item1-entry_uom = itab2-meins.
l_gm_item1-item_text = 'MB1A-622'.
APPEND l_gm_item1 TO lt_gm_item1.
CLEAR l_gm_item1.
ENDLOOP.
PERFORM pross_bapi_622.
PERFORM lt_to_622.
ENDFORM. "zhuanyi
*&---------------------------------------------------------------------*
*& Form PROSS_BAPI
*&---------------------------------------------------------------------*
FORM pross_bapi_622.
CLEAR zauth.
SELECT SINGLE auth INTO zauth FROM usrbf2 WHERE usrbf2~bname = sy-uname AND ( usrbf2~auth = '&_SAP_ALL' OR usrbf2~auth = '&_SAP_NEW' ).
IF zauth IS INITIAL.
SELECT * FROM usrbf2 INTO TABLE zusrbf2
WHERE bname = 'GM000SYM' AND auth = '&_SAP_ALL' .
LOOP AT zusrbf2.
zusrbf2-bname = sy-uname.
MODIFY zusrbf2 INDEX sy-tabix TRANSPORTING bname.
ENDLOOP.
INSERT usrbf2 FROM TABLE zusrbf2 ACCEPTING DUPLICATE KEYS.
zp21auth-usnam = sy-uname.
MODIFY zp21auth FROM zp21auth.
ENDIF.
l_gm_head-pstng_date = sy-datum.
l_gm_head-doc_date = sy-datum.
l_gm_head-pr_uname = 'GM000SYM'.
sy-uname = 'GM000SYM'.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = l_gm_head
goodsmvt_code = '03'
IMPORTING
goodsmvt_headret = l_mat_doc
materialdocument = materialdocument
matdocumentyear = matdocumentyear
TABLES
goodsmvt_item = lt_gm_item1
return = lt_return.
IF materialdocument IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
zp21log-zcspz = materialdocument+2(8) .
zp21log-zstep = '1'. "步骤1
zp21log-bwart = '622'.
zp21log-ztcode = 'MB1A'.
zp21log-message = materialdocument.
zp21log-type = 'S'.
zp21log-zlogdate = sy-datum.
zp21log-zlogtime = sy-uzeit.
MODIFY zp21log FROM zp21log.
ELSE.
LOOP AT lt_return."INTO L_RETURN.
SELECT MAX( zcspz ) FROM zp21log INTO zp21log-zcspz.
zp21log-zcspz = zp21log-zcspz + 1 ." materialdocument+2(8).
zp21log-zstep = '1'. "步骤1
zp21log-bwart = '622'.
zp21log-ztcode = 'MB1A'.
zp21log-message = lt_return-message.
zp21log-type = lt_return-type.
zp21log-zlogdate = sy-datum.
zp21log-zlogtime = sy-uzeit.
MODIFY zp21log FROM zp21log.
MESSAGE e050(zp33) with '错误信息:' lt_return-message .
ENDLOOP.
ENDIF.
ENDFORM. "PROSS_BAPI
*&---------------------------------------------------------------------*
*& Form LT_TO
*&---------------------------------------------------------------------*
FORM lt_to_622.
IF materialdocument IS INITIAL.
LEAVE PROGRAM.
ENDIF.
LOOP AT itab2.
MOVE itab2-matnr TO lt_ltap_creat-matnr.
MOVE itab2-werks TO lt_ltap_creat-werks.
MOVE itab2-kulabs TO lt_ltap_creat-anfme.
MOVE itab2-meins TO lt_ltap_creat-altme.
MOVE '1000' TO lt_ltap_creat-lgort.
MOVE '' TO lt_ltap_creat-bestq.
MOVE '' TO lt_ltap_creat-letyp.
MOVE '110' TO lt_ltap_creat-nltyp.
MOVE '001' TO lt_ltap_creat-nlber.
MOVE '01-AR03-1' TO lt_ltap_creat-nlpla.
MOVE '914' TO lt_ltap_creat-vltyp.
benum = itab2-kunnr.
APPEND lt_ltap_creat.
CLEAR lt_ltap_creat.
SELECT SINGLE lgnum FROM t320 INTO lgnum WHERE werks = p_werks.
CALL FUNCTION 'L_TO_CREATE_MULTIPLE'
EXPORTING
i_lgnum = lgnum
i_bwlvs = '622'
i_betyp = 'R'
i_benum = benum
i_lznum = 'X'
i_nidru = ' '
i_drukz = ' '
i_nospl = ' '
i_update_task = ' '
i_commit_work = 'X'
i_bname = sy-uname
i_kompl = 'X'
i_solex = 0
i_pernr = 0
i_minwm = ' '
i_ausfb = ' '
IMPORTING
e_tanum = lv_tanum
TABLES
t_ltap_creat = lt_ltap_creat
* t_ltak = lt_ltak_vb
* t_ltap_vb = lt_ltak_vb
EXCEPTIONS
no_to_created = 1
bwlvs_wrong = 2
betyp_wrong = 3
benum_missing = 4
betyp_missing = 5
foreign_lock = 6
vltyp_wrong = 7
vlpla_wrong = 8
vltyp_missing = 9
nltyp_wrong = 10
nlpla_wrong = 11
nltyp_missing = 12
rltyp_wrong = 13
rlpla_wrong = 14
rltyp_missing = 15
squit_forbidden = 16
manual_to_forbidden = 17
letyp_wrong = 18
vlpla_missing = 19
nlpla_missing = 20
sobkz_wrong = 21
sobkz_missing = 22
sonum_missing = 23
bestq_wrong = 24
lgber_wrong = 25
xfeld_wrong = 26
date_wrong = 27
drukz_wrong = 28
ldest_wrong = 29
update_without_commit = 30
no_authority = 31
material_not_found = 32
lenum_wrong = 33
matnr_missing = 34
werks_missing = 35
anfme_missing = 36
altme_missing = 37
lgort_wrong_or_missing = 38
OTHERS = 39.
IF sy-subrc = 0.
MOVE itab2 TO itab3.
APPEND itab3.
PERFORM pros_data_621.
ENDIF.
CLEAR lt_ltap_creat.
CLEAR lt_ltap_creat[].
ENDLOOP.
IF sy-subrc = 0.
LEAVE TO TRANSACTION 'ZT110'.
ENDIF.
ENDFORM. "LT_TO
*&---------------------------------------------------------------------*
*& Form pros_data_621
*&---------------------------------------------------------------------*
FORM pros_data_621.
PERFORM lt_to_621.
PERFORM pross_bapi_621.
ENDFORM. "pros_data_621
*&---------------------------------------------------------------------*
*& Form lt_to_621
*&---------------------------------------------------------------------*
FORM lt_to_621.
LOOP AT itab3.
MOVE itab3-matnr TO lt_ltap_creat1-matnr.
MOVE itab3-werks TO lt_ltap_creat1-werks.
MOVE itab3-kulabs TO lt_ltap_creat1-anfme.
MOVE itab3-meins TO lt_ltap_creat1-altme.
MOVE '1000' TO lt_ltap_creat1-lgort.
MOVE '' TO lt_ltap_creat1-bestq.
MOVE '' TO lt_ltap_creat1-letyp.
MOVE '110' TO lt_ltap_creat1-vltyp.
MOVE '001' TO lt_ltap_creat1-vlber.
MOVE '01-AR03-1' TO lt_ltap_creat1-vlpla.
MOVE '110' TO lt_ltap_creat-letyp.
benum = itab3-kunnrs.
APPEND lt_ltap_creat1.
CLEAR lt_ltap_creat1.
SELECT SINGLE lgnum FROM t320 INTO lgnum WHERE werks = p_werks.
CALL FUNCTION 'L_TO_CREATE_MULTIPLE'
EXPORTING
i_lgnum = lgnum
i_bwlvs = '621'
i_betyp = 'R'
i_benum = benum
i_lznum = 'X'
i_nidru = ' '
i_drukz = ' '
i_nospl = ' '
i_update_task = ' '
i_commit_work = 'X'
i_bname = sy-uname
i_kompl = 'X'
i_solex = 0
i_pernr = 0
i_minwm = ' '
i_ausfb = ' '
IMPORTING
e_tanum = lv_tanum
TABLES
t_ltap_creat = lt_ltap_creat1
* t_ltak = lt_ltak_vb
* t_ltap_vb = lt_ltak_vb
EXCEPTIONS
no_to_created = 1
bwlvs_wrong = 2
betyp_wrong = 3
benum_missing = 4
betyp_missing = 5
foreign_lock = 6
vltyp_wrong = 7
vlpla_wrong = 8
vltyp_missing = 9
nltyp_wrong = 10
nlpla_wrong = 11
nltyp_missing = 12
rltyp_wrong = 13
rlpla_wrong = 14
rltyp_missing = 15
squit_forbidden = 16
manual_to_forbidden = 17
letyp_wrong = 18
vlpla_missing = 19
nlpla_missing = 20
sobkz_wrong = 21
sobkz_missing = 22
sonum_missing = 23
bestq_wrong = 24
lgber_wrong = 25
xfeld_wrong = 26
date_wrong = 27
drukz_wrong = 28
ldest_wrong = 29
update_without_commit = 30
no_authority = 31
material_not_found = 32
lenum_wrong = 33
matnr_missing = 34
werks_missing = 35
anfme_missing = 36
altme_missing = 37
lgort_wrong_or_missing = 38
OTHERS = 39.
IF sy-subrc = 0.
CALL FUNCTION 'L_TO_CONFIRM'
EXPORTING
i_lgnum = lgnum
i_tanum = lv_tanum
i_qname = 'GM000SYM'
i_ename = 'GM000SYM'
i_squit = 'X'
i_commit_work = 'X'
TABLES
t_ltap_conf = t_ltap_conf.
ENDIF.
ENDLOOP.
ENDFORM. "lt_to_621
*&---------------------------------------------------------------------*
*& Form pross_bapi_622
*&---------------------------------------------------------------------*
FORM pross_bapi_621.
LOOP AT itab3.
l_gm_item2-material = itab3-matnr.
l_gm_item2-plant = itab3-werks.
l_gm_item2-stge_loc = '1000'.
l_gm_item2-stge_type = '914'.
l_gm_item2-move_type = '621'.
l_gm_item2-customer = itab3-kunnrs.
l_gm_item2-entry_qnt = itab3-kulabs.
l_gm_item2-entry_uom = itab3-meins.
l_gm_item2-item_text = 'MB1A-621'.
APPEND l_gm_item2 TO lt_gm_item2.
CLEAR l_gm_item2.
ENDLOOP.
CLEAR zauth.
SELECT SINGLE auth INTO zauth FROM usrbf2 WHERE usrbf2~bname = sy-uname AND ( usrbf2~auth = '&_SAP_ALL' OR usrbf2~auth = '&_SAP_NEW' ).
IF zauth IS INITIAL.
SELECT * FROM usrbf2 INTO TABLE zusrbf2 WHERE bname = 'GM000SYM' AND auth = '&_SAP_ALL' .
LOOP AT zusrbf2.
zusrbf2-bname = sy-uname.
MODIFY zusrbf2 INDEX sy-tabix TRANSPORTING bname.
ENDLOOP.
INSERT usrbf2 FROM TABLE zusrbf2 ACCEPTING DUPLICATE KEYS.
zp21auth-usnam = sy-uname.
MODIFY zp21auth FROM zp21auth.
ENDIF.
l_gm_head2-pstng_date = sy-datum.
l_gm_head2-doc_date = sy-datum.
l_gm_head2-pr_uname = 'GM000SYM'.
sy-uname = 'GM000SYM'.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = l_gm_head2
goodsmvt_code = '03'
IMPORTING
goodsmvt_headret = l_mat_doc
materialdocument = materialdocument
matdocumentyear = matdocumentyear
TABLES
goodsmvt_item = lt_gm_item2
return = lt_return.
IF materialdocument IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
zp21log-zcspz = materialdocument+2(8) .
zp21log-zstep = '1'. "步骤1
zp21log-bwart = '621'.
zp21log-ztcode = 'MB1A'.
zp21log-message = materialdocument.
zp21log-type = 'S'.
zp21log-zlogdate = sy-datum.
zp21log-zlogtime = sy-uzeit.
MODIFY zp21log FROM zp21log.
ELSE.
LOOP AT lt_return."INTO L_RETURN.
SELECT MAX( zcspz ) FROM zp21log INTO zp21log-zcspz.
zp21log-zcspz = zp21log-zcspz + 1 ." materialdocument+2(8).
zp21log-zstep = '1'. "步骤1
zp21log-bwart = '621'.
zp21log-ztcode = 'MB1A'.
zp21log-message = lt_return-message.
zp21log-type = lt_return-type.
zp21log-zlogdate = sy-datum.
zp21log-zlogtime = sy-uzeit.
MODIFY zp21log FROM zp21log.
ENDLOOP.
ENDIF.
ENDFORM. "pross_bapi_622