物料转移---供应商、工单、客户物料

来源:互联网 发布:sql 语句查询用户名 编辑:程序博客网 时间:2024/04/30 13:30
 
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 WITH HEADER LINE.

DATA: lt_ltap_creat   LIKE ltap_creat OCCURS WITH HEADER LINE.
DATA: lt_ltap_creat1  LIKE ltap_creat OCCURS 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 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 < 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 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 > AND itab-kulab > 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 + ." 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 + ." 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