1. 程式人生 > >sap 採購訂單 bapi (建立外協採購訂單-元件為手工輸入)

sap 採購訂單 bapi (建立外協採購訂單-元件為手工輸入)

其實則不然,只要把U改成 'E' 即可

另外:採購價格問題。

如果採購訂單憑證日期決定的資訊記錄有效就會取資訊記錄,不會取EXCEL .

處理方法:1 保證取不到資訊記錄。 2 或者 修改後臺配置(取價策略)不讓取資訊記錄。

匯入模板

 

1 更改物料主資料MOQ MPQ

2 修改程式的憑證日期

2.1 短文字為空,取主資料裡面的描述

   2.2 同一個訂單的供應商,日期 、採購組織、採購組、工廠都要一樣。否則會分單。

3 修改取價配置PB00

 

 

 

 

 

 

4 停用增強

 

5 號碼範圍更改

 

6 測試執行

7 測試2

 

 

 

 注意條件一樣的切換單

 

 

匯入完成後

1 改號碼

2 改PB00

3 改 增強

 

*&---------------------------------------------------------------------*
*& Report ZMMR005
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmr008.

*&---------------------------------------------------------------------*
*& 宣告型別池
*&---------------------------------------------------------------------*
TYPE-POOLS:sils.
************************************************************************
*            <第一部分---宣告程式的引數和變數>  Declaration            *
************************************************************************
*----------------------------------------------------------------------*
* <宣告表工作區> Table_Work_Areas Declaration                      *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* <宣告使用者自定義資料型別> Local Data Types in Program             *
*----------------------------------------------------------------------*
TYPES: BEGIN OF typ_main,
         ebeln        LIKE ekpo-ebeln, "採購訂單號
         bsart        TYPE ekko-bsart,    "採購憑證型別
         lifnr        TYPE ekko-lifnr,    "供應商帳戶號
         ekorg        TYPE ekko-ekorg,  "採購組織
         ekgrp        TYPE ekko-ekgrp,    "採購組
         bukrs        TYPE ekko-bukrs,    "公司程式碼
         unsez        TYPE ekko-unsez,     "我們的參考, U9採購訂單日期
         ihrez        TYPE ekpo-ext_rfx_number, "你的參考,U9採購訂單號
         ext_rfx_item TYPE ekpo-ext_rfx_item, "U9採購訂單行專案
         bstyp        TYPE ekpo-bstyp,    "科目分配類別
         epstp        TYPE string,        "專案類別
         matnr        TYPE ekpo-matnr,    "物料號
         txz01        TYPE ekpo-txz01,    "文字
         menge        TYPE string,    "數量
         meins        TYPE ekpo-meins,    "訂單單位
         eeind        TYPE string,        "交貨日期
         matkl        TYPE ekpo-matkl,    "物料組
         mwskz        TYPE ekpo-mwskz,    "稅碼
         lnetpr       TYPE string,        "淨價
         peinh        TYPE ekpo-peinh,    "價格單位
         werks        TYPE ekpo-werks,    "工廠
         lgort        TYPE ekpo-lgort,    "庫存地點

*         ps_psp_pnr       TYPE prps-posid,    "WBS元素

         aufnr        TYPE ekkn-aufnr,    "訂單號
*add
         kostl        TYPE kostl, "成本中心
         anln1        TYPE string, "資產
         afnam        LIKE ekpo-afnam, "申請者
         umson        TYPE umson, "免費標識
         retpo        TYPE retpo, "退貨標識
         ww_matnr     TYPE string,
         ww_menge     TYPE string, "ekpo-menge,    "數量
         hxmwb        TYPE string, "行專案文字
*end add
*         konnr            TYPE ekpo-konnr,    "合同號
*         ktpnr            TYPE ekpo-ktpnr,    "行專案
         banfn        TYPE ekpo-banfn,    "採購申請
         bnfpo        TYPE ekpo-bnfpo,    " 採購申請行專案
*        geber TYPE ekpo-geber,  "U9 SRM 合同號
*        fistl TYPE ekpo-fistl,  "U9 SRM 合同行專案

*         srm_contract_id  TYPE ekpo-srm_contract_id,  "U9 SRM 合同號
*         srm_contract_itm TYPE ekpo-srm_contract_itm,  "U9 SRM 合同行專案

*         ekorg        TYPE ekko-ekorg,    "採購組織
*        EBELP TYPE EKPO-EBELP,    "採購憑證的專案編號
         aedat        TYPE ekko-aedat,    "憑證日期
         ebelp        TYPE ekpo-ebelp,    "行專案
         veten        TYPE ekkn-veten,    "交貨計劃行號
         netpr        TYPE ekpo-netpr,


         icon         TYPE icon_d,    "紅綠燈
         select       TYPE c,       "選擇列
         message      TYPE string, "訊息
         gxx          TYPE string,        "建立訂單標識
       END OF typ_main.


*----------------------------------------------------------------------*
* <宣告全域性變數> Global Variants Declaration                       *
*----------------------------------------------------------------------*
DATA: gw_main TYPE typ_main,
      gt_main TYPE STANDARD TABLE OF typ_main INITIAL SIZE 0 WITH HEADER LINE.

DATA: gw_out TYPE typ_main,
      gt_out TYPE STANDARD TABLE OF typ_main INITIAL SIZE 0 WITH HEADER LINE.





DATA:poheader      LIKE TABLE OF bapimepoheader   WITH HEADER LINE,
     poheaderx     LIKE TABLE OF bapimepoheaderx  WITH HEADER LINE,
     return        LIKE TABLE OF bapiret2         WITH HEADER LINE,
     poitem        LIKE TABLE OF bapimepoitem     WITH HEADER LINE,
     poitemx       LIKE TABLE OF bapimepoitemx    WITH HEADER LINE,
     poschedule    LIKE TABLE OF bapimeposchedule WITH HEADER LINE,
     poschedulex   LIKE TABLE OF bapimeposchedulx WITH HEADER LINE,
     poaccount     LIKE TABLE OF bapimepoaccount  WITH HEADER LINE,
     poaccountx    LIKE TABLE OF bapimepoaccountx WITH HEADER LINE,
     pocond        LIKE TABLE OF bapimepocond     WITH HEADER LINE,
     pocondx       LIKE TABLE OF bapimepocondx    WITH HEADER LINE,
     potextitem    LIKE TABLE OF bapimepotext     WITH HEADER LINE,
     pocondheader  LIKE TABLE OF bapimepocondheader WITH HEADER LINE,
     pocondheaderx LIKE TABLE OF bapimepocondheaderx WITH HEADER LINE.
*     potextitem    LIKE TABLE OF bapimepotext WITH HEADER LINE.

DATA: pocomponent LIKE TABLE OF bapimepocomponent WITH HEADER LINE.
DATA: pocomponentx LIKE TABLE OF bapimepocomponentx WITH HEADER LINE.

DATA: epo LIKE bapimepoheader-po_number.
DATA: l_return LIKE return.
DATA: lv_message(255).
DATA: pp_file TYPE string.
DATA: lifnr TYPE elifn.
DATA: netpr TYPE bapimepoitem-net_price.
DATA: l_gxx TYPE string.
*----------------------------------------------------------------------*
* <宣告選擇螢幕> Selection Screen                                  *
*----------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001 .
PARAMETERS:p_down RADIOBUTTON GROUP p1 DEFAULT 'X' USER-COMMAND fcode,
           p_up   RADIOBUTTON GROUP p1.
PARAMETERS: p_box AS CHECKBOX DEFAULT 'X' .
SELECTION-SCREEN END  OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
PARAMETERS:p_file  LIKE rlgrap-filename.
SELECTION-SCREEN END  OF BLOCK b2.

*----------------------------------------------------------------------*
* 選擇螢幕PBI處理        *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
  IF p_down = 'X'.
    LOOP AT SCREEN.
      IF screen-name = '%B002004_BLOCK_1000'
        OR screen-name = 'P_FILE'
        OR screen-name = '%_P_FILE_%_APP_%-TEXT'.
        screen-active = 0.
      ENDIF.
      MODIFY SCREEN.
    ENDLOOP.
  ENDIF.

*----------------------------------------------------------------------*
* <為螢幕欄位新增搜尋幫助> AT SELECTION-SCREEN ON VALUE-REQUEST          *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM frm_select_file.

*----------------------------------------------------------------------*
* 在選擇螢幕被處理後觸發的事件,程式預設的開始事件>                *
* Event Occurs After The Selection Screen Has Been Processed           *
*----------------------------------------------------------------------*
START-OF-SELECTION.
  IF p_down = 'X'.
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
      EXPORTING
        text = '正在下載模板,請稍等...'.

    PERFORM frm_down_excel.

  ELSE.
    IF p_file IS INITIAL .
      MESSAGE '請選擇需要匯入的檔案'  TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ELSE.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          text = '正在讀取資料,請稍等...'.

      "lxf
      PERFORM frm_get_data .   "讀取EXCEL 表

      IF gt_main[] IS NOT INITIAL .
        PERFORM frm_check_data.

        CLEAR:gw_out,gt_out,gt_out[].
        PERFORM alv_disp_data.

      ELSE.
        MESSAGE '無資料被匯入,請檢查模板' TYPE 'S' DISPLAY LIKE 'E'.
        EXIT.

      ENDIF.

    ENDIF.
  ENDIF.


*&---------------------------------------------------------------------*
*&      Form  FRM_SELECT_FILE
*&---------------------------------------------------------------------*
*       選取檔案
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_select_file .
  DATA : l_filetab TYPE filetable,
         l_waftab  LIKE LINE OF l_filetab,
         l_rc      TYPE i.
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title            = '開啟檔案'
      initial_directory       = 'C:/'
    CHANGING
      file_table              = l_filetab
      rc                      = l_rc
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    EXIT.
  ELSE.
    READ TABLE l_filetab INTO l_waftab INDEX 1.
    p_file = l_waftab-filename.
    CLEAR: l_filetab,
    l_waftab.
  ENDIF.
ENDFORM.                    " FRM_SELECT_FILE
*&---------------------------------------------------------------------*
*&      Form  FRM_DOWN_EXCEL
*&---------------------------------------------------------------------*
*      下載匯入的EXCEL模板
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_down_excel .

  DATA: lo_objdata     LIKE wwwdatatab,
        lo_mime        LIKE w3mime,
        lc_filename    TYPE string VALUE'採購訂單匯入模版',
        lc_fullpath    TYPE string  VALUE'c:/SapReport/',
        lc_path        TYPE  string VALUE'c:/SapReport/',
        ls_destination LIKE rlgrap-filename,
        ls_objnam      TYPE string,
        li_rc          LIKE sy-subrc,
        ls_errtxt      TYPE string.
  DATA:p_objid TYPE wwwdatatab-objid,
       p_dest  LIKE sapb-sappfad.
  p_objid = 'ZMMR008'.
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      default_extension    = 'XLS'
      default_file_name    = lc_filename
    CHANGING
      filename             = lc_filename
      path                 = lc_path
      fullpath             = lc_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF lc_fullpath = ''.
    MESSAGE  '不能開啟excel' TYPE 'E'.
  ENDIF.
  IF sy-subrc = 0.
    p_dest = lc_fullpath.
    ls_objnam = lc_filename.
    CONDENSE ls_objnam NO-GAPS.
    SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata
           WHERE srtf2 = 0 AND relid = 'MI' AND objid = p_objid.
    IF sy-subrc NE 0 OR lo_objdata-objid EQ space.
      CONCATENATE '模板檔案' ls_objnam '不存在' INTO ls_errtxt.
      MESSAGE ls_errtxt TYPE 'I'.
    ENDIF.
    ls_destination = p_dest.
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        key         = lo_objdata
        destination = ls_destination
      IMPORTING
        rc          = li_rc.
    IF li_rc NE 0.
      CONCATENATE '模板檔案:' ls_objnam '下載失敗' INTO ls_errtxt.
      MESSAGE ls_errtxt TYPE 'E'.
    ELSE.
      CLEAR ls_errtxt.
      CONCATENATE '模板檔案:' ls_objnam '下載成功' INTO ls_errtxt.
      MESSAGE ls_errtxt TYPE 'S'.
    ENDIF.
  ENDIF.

ENDFORM.                    " FRM_DOWN_EXCEL

*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       讀取EXCEL資料
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_data .
  FIELD-SYMBOLS: <f1> TYPE any .
  DATA lt_excel TYPE TABLE OF zalsmex_tabline WITH HEADER LINE.
  DATA l_index LIKE sy-tabix.

  CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = p_file
      i_begin_col             = 1
      i_begin_row             = 3
      i_end_col               = 32
      i_end_row               = 9999
    TABLES
      intern                  = lt_excel
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.

  LOOP AT lt_excel.
    l_index = lt_excel-col . "設定列號
    ASSIGN COMPONENT l_index OF STRUCTURE gt_main TO <f1> ."將指標指向指定列
    TRANSLATE lt_excel-value TO UPPER CASE.
*    IF L_INDEX = 1 .
*      CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
*        EXPORTING
*          INPUT  = LT_EXCEL-VALUE
*        IMPORTING
*          OUTPUT = <F1>.
*    ELSE.
    <f1> = lt_excel-value .
*    ENDIF.
    AT END OF row .
      APPEND gt_main.
      CLEAR  gt_main.
    ENDAT .
  ENDLOOP.
*  DELETE GT_MAIN WHERE MATNR IS INITIAL .
ENDFORM.                    " FRM_GET_DATA

*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_check_data .
  DATA: l_bsart TYPE typ_main-bsart,
        l_lifnr TYPE typ_main-lifnr,
        l_ekgrp TYPE typ_main-ekgrp,
        l_bukrs TYPE typ_main-bukrs.
  DATA: ladd  TYPE i VALUE 10,
        ladd2 TYPE i VALUE 1.
  DATA: lt_main LIKE STANDARD TABLE OF gt_main,
        ls_main LIKE LINE OF gt_main.

  SORT gt_main BY ebeln bsart lifnr  ekorg ekgrp bukrs ihrez ext_rfx_item .
  LOOP AT gt_main INTO gw_main.
    IF gw_main-ebeln IS NOT INITIAL.
      SELECT COUNT(*)
        FROM ekko
        WHERE ebeln = gw_main-ebeln.
      IF sy-subrc EQ 0.
        gw_main-message = '訂單號已經存在!'.
        MODIFY gt_main FROM gw_main TRANSPORTING message.
        CONTINUE.
      ENDIF.
    ENDIF.
*    IF gw_main-konnr IS NOT INITIAL .
*      SELECT SINGLE  a~lifnr  a~ekgrp a~bukrs b~werks b~matnr  b~meins  b~matkl b~mwskz b~netpr b~peinh
*        FROM ekko AS a INNER JOIN ekpo AS b ON a~ebeln = b~ebeln
*        INTO CORRESPONDING FIELDS OF ls_main
*        WHERE b~ebeln = gw_main-konnr AND b~ebelp = gw_main-ktpnr.
*      SELECT SINGLE ktmng FROM ekpo INTO ls_main-menge WHERE ebeln = gw_main-konnr AND ebelp = gw_main-ktpnr.
*    ENDIF.
    IF gw_main-bsart IS INITIAL.
      gw_main-bsart = 'NB'.
    ENDIF.
    IF gw_main-lifnr IS INITIAL.
      gw_main-lifnr = ls_main-lifnr.
    ENDIF.
    IF gw_main-ekgrp IS INITIAL.
      gw_main-ekgrp = ls_main-ekgrp.
    ENDIF.
    IF gw_main-bukrs IS INITIAL.
      gw_main-bukrs = 1000.
    ENDIF.
    IF gw_main-matnr IS INITIAL.
      gw_main-matnr = ls_main-matnr.
    ENDIF.
    IF gw_main-menge IS INITIAL.
      gw_main-menge = ls_main-menge.
    ENDIF.
    IF gw_main-meins IS INITIAL.
      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
        EXPORTING
          input  = ls_main-meins
        IMPORTING
          output = gw_main-meins.
    ENDIF.
    IF gw_main-matkl IS INITIAL.
      gw_main-matkl = ls_main-matkl.
    ENDIF.
    IF gw_main-mwskz IS INITIAL.  "稅碼
      IF ls_main-mwskz IS NOT INITIAL.
        gw_main-mwskz = ls_main-mwskz.
      ELSE.
        gw_main-mwskz = 'J1'.
      ENDIF.

    ENDIF.
    IF gw_main-lnetpr IS INITIAL.
      gw_main-lnetpr = ls_main-netpr.
    ENDIF.
    IF gw_main-peinh IS INITIAL.
      gw_main-peinh = ls_main-peinh.
    ENDIF.
    IF gw_main-werks IS INITIAL.
      gw_main-werks = 1000.
    ENDIF.
    MODIFY gt_main FROM gw_main.
    CLEAR ls_main.
  ENDLOOP.
  LOOP AT gt_main INTO gw_main.
*    IF sy-mandt EQ '400' OR sy-mandt EQ '900'.
*      gw_main-ekorg = 2000.
*    ELSE.
*      gw_main-ekorg = 1000.
*    ENDIF.

    IF gw_main-txz01 IS   INITIAL.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = gw_main-matnr
        IMPORTING
          output = gw_main-matnr.
      SELECT SINGLE maktx INTO gw_main-txz01 FROM makt WHERE matnr = gw_main-matnr.
    ENDIF.
    MOVE-CORRESPONDING gw_main TO ls_main.
   AT NEW ihrez.
*    AT NEW ext_rfx_item.  "lxf 舊訂單號
      gw_main-gxx  = 'X'.  "建立訂單標識
      ls_main-gxx = gw_main-gxx.
      ls_main-ebelp = 10.
      ls_main-veten = 1.
      ladd =  10.
      ladd2 = 1.
    ENDAT.
    IF ls_main-gxx  IS INITIAL.
      ladd = ladd + 10.
      ladd2 = ladd2 + 1.
      ls_main-ebelp = ladd.
      ls_main-veten = ladd2.
    ENDIF.
    MOVE-CORRESPONDING  ls_main TO gw_main.
    MODIFY gt_main FROM gw_main.
  ENDLOOP.
ENDFORM.                    " FRM_CHECK_DATA

*&---------------------------------------------------------------------*
*&      Form  ALV_DISP_DATA
*&---------------------------------------------------------------------*
*       ALV 展現準備匯入的資料
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_disp_data .

  DATA: lt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
  DATA: lw_layout TYPE slis_layout_alv.
  DATA: l_i TYPE i VALUE 1.
  DATA: l_repid LIKE sy-repid VALUE sy-repid.

  lw_layout-group_change_edit = 'X'.
  lw_layout-colwidth_optimize = 'X'.
  lw_layout-box_fieldname = 'SELECT'.

  DEFINE alv_head.
    CLEAR lt_fieldcat.
    lt_fieldcat-col_pos       = l_i.
    lt_fieldcat-fieldname     = &1.
    lt_fieldcat-tabname       = 'GT_MAIN'.
    lt_fieldcat-seltext_l     = &2.

    IF lt_fieldcat-fieldname  = 'ICON'.
      lt_fieldcat-icon         = 'X'.
    ENDIF.

    IF lt_fieldcat-fieldname  = 'MESSAGE'.
      lt_fieldcat-outputlen    = '15'.
    ENDIF.

    IF lt_fieldcat-fieldname  = 'MATNR'.
      lt_fieldcat-ref_fieldname = 'MATNR'.
      lt_fieldcat-ref_tabname = 'MARA'.
    ENDIF.
    lt_fieldcat-no_zero = 0 .
    APPEND lt_fieldcat TO lt_fieldcat.
    ADD 1 TO l_i.
  END-OF-DEFINITION.

  alv_head 'ICON'         '檢查'.
  alv_head 'MESSAGE'      '訊息'.
*  alv_head 'EXT_RFX_ITEM' 'U9採購訂單行專案'.
*  alv_head  'UNSEZ '       'U9採購訂單日期'.
  alv_head 'EBELN'        '採購訂單'.
  alv_head 'BSART'        '採購憑證型別'.
  alv_head 'LIFNR'        '供應商帳戶號'.
  alv_head 'EKORG'        '採購組織'.
  alv_head 'EKGRP'        '採購組'.
  alv_head 'BUKRS'        '公司程式碼'.
  alv_head 'EBELP'        '行專案'.
  alv_head 'BSTYP'        '科目分配類別'.
  alv_head 'EPSTP'        '專案類別'.
  alv_head 'MATNR'        '物料號'.
  alv_head 'TXZ01'         '文字'.
  alv_head 'MENGE'         '數量'.
  alv_head 'MEINS'        '訂單單位'.
  alv_head 'EEIND'        '交貨日期'.
  alv_head 'MATKL'        '物料組'.
  alv_head 'MWSKZ'        '稅碼'.
  alv_head 'LNETPR'        '含稅價'.
  alv_head 'WERKS'        '工廠'.
  alv_head 'LGORT'        '庫存地點'.
  alv_head 'PEINH'        '價格單位'.
*  alv_head 'PS_PSP_PNR'   'WBS元素'.
  alv_head 'AUFNR'        '訂單號'.
  alv_head 'KOSTL'        '成本中心'.

  alv_head 'ANLN1'        '資產'.
  alv_head 'AFNAM'        '申請者'.
  alv_head 'UMSON'        '免費標識'.
  alv_head 'RETPO'        '退貨標識'.

  alv_head 'WW_MATNR'        '委外元件'.
  alv_head 'WW_MENGE'        '委外元件數量'.
  alv_head 'HXMWB'        '行專案文字'.


*  alv_head 'KONNR'        '採購合同'.
*  alv_head 'KTPNR'        '採購合同專案'.
  alv_head 'BANFN'        '採購申請號'.
  alv_head 'BNFPO'        '採購申請行專案'.
  alv_head 'IHREZ'        'U9採購訂單號'.
  alv_head 'EXT_RFX_ITEM' 'U9採購訂單行專案'.
  alv_head  'UNSEZ '       'U9採購訂單日期'.
*
*  alv_head 'SRM_CONTRACT_ID'        'U9 SRM合同號'.
*  alv_head 'SRM_CONTRACT_ITM'        'U9 SRM合同行專案'.



*呼叫ALV函式顯示資料
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_background_id          = 'ALV_BACKGROUND'
      i_callback_pf_status_set = 'SET_PF_STATUS'
      i_callback_user_command  = 'USER_COMMAND'
      i_callback_program       = l_repid
      is_layout                = lw_layout
      i_save                   = 'X'  "A:ALL U:USER X:SYSTEM
*     it_events                = gt_events
      it_fieldcat              = lt_fieldcat[]
    TABLES
      t_outtab                 = gt_main
    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.                    " ALV_DISP_DATA

*&--------------------------------------------------------------------*
*&      Form  set_pf_status
*&--------------------------------------------------------------------*
*       ALV自定義個工具條
*---------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'STANDARD' .
ENDFORM.                    "set_pf_status

*&--------------------------------------------------------------------*
*&      Form  user_command
*&--------------------------------------------------------------------*
*       響應自定義按鈕
*---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.

  DATA: gd_repid LIKE sy-repid,
        ref_grid TYPE REF TO cl_gui_alv_grid.

  DATA: l_mess TYPE string.


  CASE r_ucomm.
    WHEN 'ALL'.
      LOOP AT gt_main INTO gw_main.
        gw_main-select = 'X'.
        MODIFY gt_main FROM gw_main.
      ENDLOOP.
      rs_selfield-refresh = 'X'.

    WHEN 'UNALL'.
      LOOP AT gt_main INTO gw_main.
        gw_main-select = ''.
        MODIFY gt_main FROM gw_main.
      ENDLOOP.
      rs_selfield-refresh = 'X'.

    WHEN 'ZPOST'.
      SORT gt_main BY ebeln bsart lifnr  ekorg  ekgrp bukrs ihrez  gxx.
      CLEAR:gt_out,gt_out[].
      gt_out[] = gt_main[].

      READ TABLE gt_main WITH KEY select = 'X'  icon = '@

[email protected]'.
      IF sy-subrc = 0.
        MESSAGE '請不要選擇已檢查出錯誤的資料' TYPE 'E'.
        EXIT.
      ENDIF.

      DELETE gt_out WHERE select <> 'X'.
      SORT gt_out BY ebeln.
      DELETE ADJACENT DUPLICATES FROM gt_out COMPARING ebeln.
      LOOP AT gt_out INTO gw_out.
        LOOP AT gt_main INTO gw_main WHERE ebeln = gw_out-ebeln .


          PERFORM frm_create_data.
          IF gw_main-gxx EQ 'X'.
            PERFORM frm_callbapi.
*            MODIFY GT_MAIN FROM GW_MAIN.
          ENDIF.

        ENDLOOP.
      ENDLOOP.


*      SORT gt_main BY bsart lifnr ekorg  ekgrp bukrs ebelp.
      rs_selfield-refresh = 'X'.


    WHEN OTHERS.
  ENDCASE.
ENDFORM.                    "user_command
*&---------------------------------------------------------------------*
*&      Form  FRM_CREATE_DATA
*&---------------------------------------------------------------------*
*       建立物料主資料
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_create_data .
  DATA: l_netpr TYPE eine-netpr.
  DATA: lt_table_matnr TYPE TABLE OF string WITH HEADER LINE.
  DATA: lt_table_menge TYPE TABLE OF string WITH HEADER LINE.
  DATA: lv_tabix LIKE sy-tabix.
  DATA: lv_menge LIKE ekpo-menge.
  CLEAR lifnr.
  lifnr = gw_main-lifnr.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = lifnr
    IMPORTING
      output = lifnr.
  poheader-po_number     = gw_main-ebeln.
  poheader-doc_type     = gw_main-bsart.
  poheader-vendor       = lifnr.
  poheader-purch_org    = gw_main-ekorg.
  poheader-pur_group    = gw_main-ekgrp.
  poheader-comp_code    = gw_main-bukrs.
  poheader-doc_date     = '20181128'.
  poheader-langu        = sy-langu.
  poheader-ref_1        = gw_main-ihrez.
  poheader-our_ref        = gw_main-unsez.

  poheaderx-po_number   = 'X'.
  poheaderx-doc_type    = 'X'.
  poheaderx-vendor      = 'X'.
  poheaderx-purch_org   = 'X'.
  poheaderx-pur_group   = 'X'.
  poheaderx-comp_code   = 'X'.
  poheaderx-doc_date    = 'X'.
  poheaderx-langu       =  'X'.
  poheaderx-ref_1      =  'X'.
  poheaderx-our_ref      =  'X'.
  CLEAR: lt_table_matnr[],lt_table_menge[],lv_tabix.

  IF gw_main-bstyp EQ 'A'.
    SPLIT gw_main-anln1 AT '/' INTO TABLE lt_table_matnr.
    SPLIT gw_main-menge AT '/' INTO TABLE lt_table_menge.
    LOOP AT lt_table_matnr.
      lv_tabix = lv_tabix + 1.
      poaccount-po_item =   gw_main-ebelp. "採購憑證的專案編號
      poaccount-asset_no   = lt_table_matnr."資產
      READ TABLE lt_table_menge INDEX lv_tabix.
      poaccount-quantity = lt_table_menge.
      lv_menge = lv_menge + lt_table_menge.
      APPEND poaccount.
      CLEAR  poaccount.


      poaccountx-po_item =  gw_main-ebelp. "採購憑證的專案編號
      poaccountx-asset_no   = 'X'."資產
      poaccountx-quantity = 'X'."數量
      APPEND poaccountx.
      CLEAR  poaccountx.
    ENDLOOP.
  ELSE.
    poaccount-po_item =   gw_main-ebelp. "採購憑證的專案編號
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = gw_main-aufnr
      IMPORTING
        output = poaccount-orderid. "訂單號
 &nbs