MIGO后续调整功能

ZMMR0044 

*&---------------------------------------------------------------------*
*& Report ZMMR0044
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmr0044.

INCLUDE zmmr0044_top.
INCLUDE zmmr0044_sel.
INCLUDE zmmr0044_f01.


START-OF-SELECTION.
  CALL SCREEN 9000.

ZMMR0044_TOP 

*&---------------------------------------------------------------------*
*& 包含               ZMMR0044_TOP
*&---------------------------------------------------------------------*
DATA:gv_ebeln TYPE ebeln.
DATA:ok_code TYPE sy-ucomm.

TYPES:BEGIN OF tys_out,
        ebeln     TYPE ebeln,
        ebelp     TYPE ebelp,
        baugr     TYPE resb-baugr,
        baugr_txt TYPE maktx,
        matnr     TYPE matnr,
        matnr_txt TYPE maktx,
        menge     TYPE menge_d,
        meins     TYPE meins,
        zyhsr     TYPE menge_d,
        erfmg     TYPE menge_d,
        sc_adjust TYPE migo_sc_adjust,
        werks     TYPE werks_d,
        lgort     TYPE lgort_d,
      END OF tys_out.
DATA:gt_out TYPE TABLE OF tys_out,
     gw_out LIKE LINE OF gt_out.


*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_OUT' ITSELF
CONTROLS: tc_out TYPE TABLEVIEW USING SCREEN 9000.
*&SPWIZARD: LINES OF TABLECONTROL 'TC_OUT'
DATA:     g_tc_out_lines  LIKE sy-loopc.

ZMMR0044_F01 

*&---------------------------------------------------------------------*
*& 包含               ZMMR0044_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
  IF gv_ebeln IS INITIAL .
    MESSAGE '输入采购订单' TYPE 'S' DISPLAY LIKE 'E'.
  ENDIF.
  SET PF-STATUS 'STATUS_9000'.
  SET TITLEBAR 'TITLEBAR'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
  DATA:ok_key TYPE sy-ucomm.
  DATA:lv_answer.

  ok_key = ok_code.
  CLEAR:ok_code.
  CASE ok_key.
    WHEN '&SEARCH'.
      REFRESH gt_out.
      CHECK gv_ebeln IS NOT INITIAL.
      PERFORM frm_search_data.
    WHEN '&SAVE'.
      CHECK gt_out[] IS NOT INITIAL.

      CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
        EXPORTING
          textline1      = '确认是否保存'
          titel          = '提示'
          cancel_display = ''
        IMPORTING
          answer         = lv_answer.
      IF lv_answer = 'J'.
        PERFORM frm_save_data.
      ENDIF.
    WHEN '&EXIT' OR '&CANCEL'.
      LEAVE TO SCREEN 0.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form frm_search_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_search_data .
  SELECT resb~ebeln,
         resb~ebelp,
         resb~matnr,
         makt~maktx AS matnr_txt,
         resb~baugr,
         resb~meins,
         resb~werks,
         resb~lgort
    FROM resb LEFT JOIN makt ON resb~matnr = makt~matnr AND makt~spras = @sy-langu
    INTO TABLE @DATA(lt_resb)
    WHERE resb~ebeln = @gv_ebeln AND
          resb~xloek = ''.

  IF lt_resb[] IS NOT INITIAL.
    SELECT matnr AS baugr,
           maktx AS baugr_txt
      FROM makt
      FOR ALL ENTRIES IN @lt_resb
      WHERE matnr = @lt_resb-baugr AND
            spras = @sy-langu
      INTO TABLE @DATA(lt_makt).

    SORT lt_makt BY baugr.

    SELECT ebeln,
           ebelp,
           SUM( CASE WHEN bwart = '543' THEN menge END  ) AS menge_z,
           SUM( CASE WHEN bwart = '544' THEN menge * -1 END  ) AS menge_f
    INTO TABLE @DATA(lt_mseg)
    FROM mseg
    WHERE ebeln = @gv_ebeln
    GROUP BY ebeln , ebelp.

    SORT lt_mseg BY ebeln ebelp.

    LOOP AT lt_resb INTO DATA(lw_resb).
      APPEND INITIAL LINE TO gt_out ASSIGNING FIELD-SYMBOL(<fs_out>).

      <fs_out>-ebeln = lw_resb-ebeln.
      <fs_out>-ebelp = lw_resb-ebelp.
      <fs_out>-matnr = lw_resb-matnr.
      <fs_out>-baugr = lw_resb-baugr.
      <fs_out>-meins = lw_resb-meins.
      <fs_out>-matnr_txt = lw_resb-matnr_txt.
      <fs_out>-werks = lw_resb-werks.
      <fs_out>-lgort = lw_resb-lgort.
      READ TABLE lt_makt INTO DATA(lw_makt) WITH KEY baugr = lw_resb-baugr BINARY SEARCH.
      IF sy-subrc EQ 0.
        <fs_out>-baugr_txt = lw_makt-baugr_txt.
      ENDIF.

      READ TABLE lt_mseg INTO DATA(lw_mseg) WITH KEY ebeln = lw_resb-ebeln ebelp = lw_resb-ebelp BINARY SEARCH.
      IF sy-subrc EQ 0.
        <fs_out>-menge = lw_mseg-menge_z - lw_mseg-menge_f.
      ENDIF.
    ENDLOOP.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form TC_OUT_CHANGE_TC_ATTR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
MODULE tc_out_change_tc_attr OUTPUT.
  DESCRIBE TABLE gt_out LINES tc_out-lines.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form TC_OUT_GET_LINES
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
MODULE tc_out_get_lines OUTPUT.
  g_tc_out_lines = sy-loopc.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form TC_OUT_USER_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
MODULE tc_out_user_command INPUT.
  ok_code = sy-ucomm.
  PERFORM user_ok_tc USING    'TC_OUT'
                              'GT_OUT'
                              ' '
                     CHANGING ok_code.
  sy-ucomm = ok_code.
ENDMODULE.
*----------------------------------------------------------------------*
*   INCLUDE TABLECONTROL_FORMS                                         *
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  USER_OK_TC                                               *
*&---------------------------------------------------------------------*
FORM user_ok_tc USING    p_tc_name TYPE dynfnam
                         p_table_name
                         p_mark_name
                CHANGING p_ok      LIKE sy-ucomm.

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
  DATA: l_ok     TYPE sy-ucomm,
        l_offset TYPE i.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

*&SPWIZARD: Table control specific operations                          *
*&SPWIZARD: evaluate TC name and operations                            *
  SEARCH p_ok FOR p_tc_name.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.
  l_offset = strlen( p_tc_name ) + 1.
  l_ok = p_ok+l_offset.
*&SPWIZARD: execute general and TC specific operations                 *
  CASE l_ok.
    WHEN 'INSR'.                      "insert row
      PERFORM fcode_insert_row USING    p_tc_name
                                        p_table_name.
      CLEAR p_ok.

    WHEN 'DELE'.                      "delete row
      PERFORM fcode_delete_row USING    p_tc_name
                                        p_table_name
                                        p_mark_name.
      CLEAR p_ok.

    WHEN 'P--' OR                     "top of list
         'P-'  OR                     "previous page
         'P+'  OR                     "next page
         'P++'.                       "bottom of list
      PERFORM compute_scrolling_in_tc USING p_tc_name
                                            l_ok.
      CLEAR p_ok.
*     WHEN 'L--'.                       "total left
*       PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.
*
*     WHEN 'L-'.                        "column left
*       PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.
*
*     WHEN 'R+'.                        "column right
*       PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.
*
*     WHEN 'R++'.                       "total right
*       PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.
*
    WHEN 'MARK'.                      "mark all filled lines
      PERFORM fcode_tc_mark_lines USING p_tc_name
                                        p_table_name
                                        p_mark_name   .
      CLEAR p_ok.

    WHEN 'DMRK'.                      "demark all filled lines
      PERFORM fcode_tc_demark_lines USING p_tc_name
                                          p_table_name
                                          p_mark_name .
      CLEAR p_ok.

*     WHEN 'SASCEND'   OR
*          'SDESCEND'.                  "sort column
*       PERFORM FCODE_SORT_TC USING P_TC_NAME
*                                   l_ok.

  ENDCASE.

ENDFORM.                              " USER_OK_TC

*&---------------------------------------------------------------------*
*&      Form  FCODE_INSERT_ROW                                         *
*&---------------------------------------------------------------------*
FORM fcode_insert_row
              USING    p_tc_name           TYPE dynfnam
                       p_table_name             .

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
  DATA l_lines_name       LIKE feld-name.
  DATA l_selline          LIKE sy-stepl.
  DATA l_lastline         TYPE i.
  DATA l_line             TYPE i.
  DATA l_table_name       LIKE feld-name.
  FIELD-SYMBOLS <tc>                 TYPE cxtab_control.
  FIELD-SYMBOLS <table>              TYPE STANDARD TABLE.
  FIELD-SYMBOLS <lines>              TYPE i.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (p_tc_name) TO <tc>.

*&SPWIZARD: get the table, which belongs to the tc                     *
  CONCATENATE p_table_name '[]' INTO l_table_name. "table body
  ASSIGN (l_table_name) TO <table>.                "not headerline

*&SPWIZARD: get looplines of TableControl                              *
  CONCATENATE 'G_' p_tc_name '_LINES' INTO l_lines_name.
  ASSIGN (l_lines_name) TO <lines>.

*&SPWIZARD: get current line                                           *
  GET CURSOR LINE l_selline.
  IF sy-subrc <> 0.                   " append line to table
    l_selline = <tc>-lines + 1.
*&SPWIZARD: set top line                                               *
    IF l_selline > <lines>.
      <tc>-top_line = l_selline - <lines> + 1 .
    ELSE.
      <tc>-top_line = 1.
    ENDIF.
  ELSE.                               " insert line into table
    l_selline = <tc>-top_line + l_selline - 1.
    l_lastline = <tc>-top_line + <lines> - 1.
  ENDIF.
*&SPWIZARD: set new cursor line                                        *
  l_line = l_selline - <tc>-top_line + 1.

*&SPWIZARD: insert initial line                                        *
  INSERT INITIAL LINE INTO <table> INDEX l_selline.
  <tc>-lines = <tc>-lines + 1.
*&SPWIZARD: set cursor                                                 *
  SET CURSOR 1 l_line.

ENDFORM.                              " FCODE_INSERT_ROW

*&---------------------------------------------------------------------*
*&      Form  FCODE_DELETE_ROW                                         *
*&---------------------------------------------------------------------*
FORM fcode_delete_row
              USING    p_tc_name           TYPE dynfnam
                       p_table_name
                       p_mark_name   .

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
  DATA l_table_name       LIKE feld-name.

  FIELD-SYMBOLS <tc>         TYPE cxtab_control.
  FIELD-SYMBOLS <table>      TYPE STANDARD TABLE.
  FIELD-SYMBOLS <wa>.
  FIELD-SYMBOLS <mark_field>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (p_tc_name) TO <tc>.

*&SPWIZARD: get the table, which belongs to the tc                     *
  CONCATENATE p_table_name '[]' INTO l_table_name. "table body
  ASSIGN (l_table_name) TO <table>.                "not headerline

*&SPWIZARD: delete marked lines                                        *
  DESCRIBE TABLE <table> LINES <tc>-lines.

  LOOP AT <table> ASSIGNING <wa>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
    ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>.

    IF <mark_field> = 'X'.
      DELETE <table> INDEX syst-tabix.
      IF sy-subrc = 0.
        <tc>-lines = <tc>-lines - 1.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.                              " FCODE_DELETE_ROW

*&---------------------------------------------------------------------*
*&      Form  COMPUTE_SCROLLING_IN_TC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*      -->P_OK       ok code
*----------------------------------------------------------------------*
FORM compute_scrolling_in_tc USING    p_tc_name
                                      p_ok.
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
  DATA l_tc_new_top_line     TYPE i.
  DATA l_tc_name             LIKE feld-name.
  DATA l_tc_lines_name       LIKE feld-name.
  DATA l_tc_field_name       LIKE feld-name.

  FIELD-SYMBOLS <tc>         TYPE cxtab_control.
  FIELD-SYMBOLS <lines>      TYPE i.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (p_tc_name) TO <tc>.
*&SPWIZARD: get looplines of TableControl                              *
  CONCATENATE 'G_' p_tc_name '_LINES' INTO l_tc_lines_name.
  ASSIGN (l_tc_lines_name) TO <lines>.


*&SPWIZARD: is no line filled?                                         *
  IF <tc>-lines = 0.
*&SPWIZARD: yes, ...                                                   *
    l_tc_new_top_line = 1.
  ELSE.
*&SPWIZARD: no, ...                                                    *
    CALL FUNCTION 'SCROLLING_IN_TABLE'
      EXPORTING
        entry_act      = <tc>-top_line
        entry_from     = 1
        entry_to       = <tc>-lines
        last_page_full = 'X'
        loops          = <lines>
        ok_code        = p_ok
        overlapping    = 'X'
      IMPORTING
        entry_new      = l_tc_new_top_line
      EXCEPTIONS
*       NO_ENTRY_OR_PAGE_ACT  = 01
*       NO_ENTRY_TO    = 02
*       NO_OK_CODE_OR_PAGE_GO = 03
        OTHERS         = 0.
  ENDIF.

*&SPWIZARD: get actual tc and column                                   *
  GET CURSOR FIELD l_tc_field_name
             AREA  l_tc_name.

  IF syst-subrc = 0.
    IF l_tc_name = p_tc_name.
*&SPWIZARD: et actual column                                           *
      SET CURSOR FIELD l_tc_field_name LINE 1.
    ENDIF.
  ENDIF.

*&SPWIZARD: set the new top line                                       *
  <tc>-top_line = l_tc_new_top_line.


ENDFORM.                              " COMPUTE_SCROLLING_IN_TC

*&---------------------------------------------------------------------*
*&      Form  FCODE_TC_MARK_LINES
*&---------------------------------------------------------------------*
*       marks all TableControl lines
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*----------------------------------------------------------------------*
FORM fcode_tc_mark_lines USING p_tc_name
                               p_table_name
                               p_mark_name.
*&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------*
  DATA l_table_name       LIKE feld-name.

  FIELD-SYMBOLS <tc>         TYPE cxtab_control.
  FIELD-SYMBOLS <table>      TYPE STANDARD TABLE.
  FIELD-SYMBOLS <wa>.
  FIELD-SYMBOLS <mark_field>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (p_tc_name) TO <tc>.

*&SPWIZARD: get the table, which belongs to the tc                     *
  CONCATENATE p_table_name '[]' INTO l_table_name. "table body
  ASSIGN (l_table_name) TO <table>.                "not headerline

*&SPWIZARD: mark all filled lines                                      *
  LOOP AT <table> ASSIGNING <wa>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
    ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>.

    <mark_field> = 'X'.
  ENDLOOP.
ENDFORM.                                          "fcode_tc_mark_lines

*&---------------------------------------------------------------------*
*&      Form  FCODE_TC_DEMARK_LINES
*&---------------------------------------------------------------------*
*       demarks all TableControl lines
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*----------------------------------------------------------------------*
FORM fcode_tc_demark_lines USING p_tc_name
                                 p_table_name
                                 p_mark_name .
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
  DATA l_table_name       LIKE feld-name.

  FIELD-SYMBOLS <tc>         TYPE cxtab_control.
  FIELD-SYMBOLS <table>      TYPE STANDARD TABLE.
  FIELD-SYMBOLS <wa>.
  FIELD-SYMBOLS <mark_field>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (p_tc_name) TO <tc>.

*&SPWIZARD: get the table, which belongs to the tc                     *
  CONCATENATE p_table_name '[]' INTO l_table_name. "table body
  ASSIGN (l_table_name) TO <table>.                "not headerline

*&SPWIZARD: demark all filled lines                                    *
  LOOP AT <table> ASSIGNING <wa>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
    ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>.

    <mark_field> = space.
  ENDLOOP.
ENDFORM.                                          "fcode_tc_mark_lines
*&---------------------------------------------------------------------*
*& Form frm_save_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_save_data .
  DATA:ls_header           LIKE bapi2017_gm_head_01,          "抬头
       lv_gcode            LIKE bapi2017_gm_code,             "过账码
       lv_type             LIKE ztmm0005-bwart,             "过账码
       ls_goodsmvt_headret LIKE bapi2017_gm_head_ret,         "返回凭证
       lt_item             LIKE TABLE OF bapi2017_gm_item_create,
       ls_item             LIKE LINE OF lt_item,
       lt_return           LIKE TABLE OF bapiret2,
       ls_return           LIKE LINE OF lt_return.

  DATA:lv_line_id   TYPE mb_line_id,
       lv_parent_id TYPE mb_line_id.
  DATA:lt_out TYPE TABLE OF tys_out.
  REFRESH:lt_item,lt_return,lt_out.
  CLEAR:ls_header,ls_goodsmvt_headret.

  lt_out[] = gt_out[].

  DELETE lt_out WHERE erfmg EQ '0.00'.

  ls_header-bill_of_lading  =  gv_ebeln.
  ls_header-gr_gi_slip_no   =  ''.
  ls_header-pstng_date =  sy-datum.
  ls_header-doc_date = sy-datum.
  ls_header-pr_uname = sy-uname.

  lv_gcode-gm_code = '07'.

  lv_parent_id = '100000'.
  LOOP AT lt_out INTO DATA(lw_out)  GROUP BY (  ebeln = lw_out-ebeln
                                                ebelp = lw_out-ebelp
                                                size = GROUP SIZE
                                                index = GROUP INDEX )
      ASCENDING ASSIGNING FIELD-SYMBOL(<fs_group>).

    lv_line_id = lv_line_id + 1.

    LOOP AT GROUP <fs_group> ASSIGNING FIELD-SYMBOL(<ls_group>).
    ENDLOOP.

    ls_item-move_type    =  '121'.
    ls_item-plant        = <ls_group>-werks.
    ls_item-mvt_ind      = 'O'.
    ls_item-stge_loc       =   <ls_group>-lgort.
    ls_item-material       =   <ls_group>-baugr.
    ls_item-material_long       =   <ls_group>-baugr.
    ls_item-entry_uom    =   <ls_group>-meins.
    ls_item-po_number    =   <ls_group>-ebeln.
    ls_item-po_item   =      <ls_group>-ebelp.
    ls_item-line_id  =  lv_line_id.
    APPEND ls_item TO lt_item.
    CLEAR:ls_item.

    LOOP AT GROUP <fs_group> ASSIGNING <ls_group>.
      lv_parent_id = lv_parent_id + 1.

      ls_item-move_type     =  ''.
      ls_item-plant         = <ls_group>-werks.
      ls_item-stge_loc       =   <ls_group>-lgort.
      ls_item-material       =   <ls_group>-matnr.
      ls_item-material_long       =   <ls_group>-matnr.
      IF  <ls_group>-sc_adjust = 'X'.
        ls_item-entry_qnt      =  0 - <ls_group>-erfmg.
      ELSE.
        ls_item-entry_qnt      =   <ls_group>-erfmg.
      ENDIF.
      ls_item-entry_uom    =   <ls_group>-meins.
      ls_item-po_number    =   <ls_group>-ebeln.
      ls_item-po_item   =      <ls_group>-ebelp.
      ls_item-mvt_ind      = ''.
      ls_item-line_id  =  lv_parent_id  .
      ls_item-parent_id =  lv_line_id.

      APPEND ls_item TO lt_item.
      CLEAR:ls_item.
    ENDLOOP.
  ENDLOOP.

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = ls_header
      goodsmvt_code    = lv_gcode
    IMPORTING
      goodsmvt_headret = ls_goodsmvt_headret
    TABLES
      goodsmvt_item    = lt_item
      return           = lt_return.

  DATA:lv_mtype   TYPE bapi_mtype,
       lv_message TYPE bapi_msg,
       lv_errmsg  TYPE string.

  IF line_exists( lt_return[ type = 'E'  ] ) OR line_exists( lt_return[ type = 'A'  ] ).

    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    lv_mtype = 'E'.
    lv_message = |创建失败:|.
    LOOP AT lt_return INTO ls_return WHERE type CA 'EA'.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = ls_return-id
          msgnr               = ls_return-number
          msgv1               = ls_return-message_v1
          msgv2               = ls_return-message_v2
          msgv3               = ls_return-message_v3
          msgv4               = ls_return-message_v4
        IMPORTING
          message_text_output = lv_errmsg.

      lv_message = |{ lv_message }{ lv_errmsg }|.
    ENDLOOP.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    lv_mtype = 'S'.
    lv_message =  '年度:' && ls_goodsmvt_headret-doc_year && '凭证' && ls_goodsmvt_headret-mat_doc && '创建成功' .
  ENDIF.

  IF lv_mtype = 'S'.
    REFRESH:gt_out.
    CLEAR:gv_ebeln.

    MESSAGE lv_message TYPE lv_mtype.

    CALL FUNCTION 'MIGO_DIALOG'
      EXPORTING
        i_action            = 'A04'
        i_refdoc            = 'R02'
        i_mblnr             = ls_goodsmvt_headret-mat_doc
        i_mjahr             = ls_goodsmvt_headret-doc_year
      EXCEPTIONS
        illegal_combination = 1
        OTHERS              = 2.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.


  ELSE.
    MESSAGE lv_message TYPE lv_mtype.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  FRM_MODIFY_TC  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE frm_modify_tc INPUT.
  DATA:lv_menge TYPE menge_d.
  CLEAR:lv_menge.
  IF gw_out-zyhsr <> '0.00'.
    lv_menge = gw_out-zyhsr - gw_out-menge.
    IF lv_menge < 0.
      gw_out-sc_adjust = 'X'.
    ELSE.
      gw_out-sc_adjust = ''.
    ENDIF.

    gw_out-erfmg = abs( lv_menge ).
  ELSE.
    CLEAR:gw_out-erfmg,gw_out-sc_adjust.
  ENDIF.

  MODIFY gt_out FROM gw_out INDEX tc_out-current_line.
ENDMODULE.

 SCREEN 9000

PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'TC_OUT'
  MODULE tc_out_change_tc_attr.
*&SPWIZARD: MODULE TC_OUT_CHANGE_COL_ATTR.
  LOOP AT   gt_out
       INTO gw_out
       WITH CONTROL tc_out
       CURSOR tc_out-current_line.
    MODULE tc_out_get_lines.
*&SPWIZARD:   MODULE TC_OUT_CHANGE_FIELD_ATTR
  ENDLOOP.

  MODULE status_9000.
*
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'TC_OUT'
  LOOP AT gt_out.
    CHAIN.
      FIELD gw_out-ebeln.
      FIELD gw_out-ebelp.
      FIELD gw_out-matnr.
      FIELD gw_out-matnr_txt.
      FIELD gw_out-baugr.
      FIELD gw_out-baugr_txt.
      FIELD gw_out-menge.
      FIELD gw_out-zyhsr.
      FIELD gw_out-erfmg.
      FIELD gw_out-sc_adjust.
      FIELD gw_out-meins.
      MODULE frm_modify_tc.
    ENDCHAIN.
  ENDLOOP.
  MODULE tc_out_user_command.
*&SPWIZARD: MODULE TC_OUT_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC_OUT_CHANGE_COL_ATTR.

  MODULE user_command_9000.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值