SAP PP未清生产订单关闭物料退料、新工单发料批量处理

一、功能逻辑

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

二、功能界面

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

三、功能代码

*&———————————————————————*
*& 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.

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...