1. 程式人生 > 其它 >2021-01-25

2021-01-25

技術標籤:abap

*& REPORT  ZEWM_RE0006
*&
*&---------------------------------------------------------------------*
*& CREATE BY QIANYUN.LIU 2018.8.21
*&
*&---------------------------------------------------------------------*

REPORT ZEWM_RE0006.
TYPE-POOLS SLIS.
TABLES:LIKP,AUFK.
*&---------------------------------------------------------------------*
*&              TABLES
*&---------------------------------------------------------------------*
* 模板資料結構
TYPES: BEGIN OF GTY_UPLOAD,
         VALUE_0001(10) TYPE  C ,    "銷售憑證
         VALUE_0002 TYPE   POSNR_VA,     "銷售憑證專案
         VALUE_0003(12)  TYPE C,     "生產訂單號
         VALUE_0004(18)  TYPE C,     "物料號
         VALUE_0005(13) TYPE C,      "目標數量
         VALUE_0006(40) TYPE C,      "PO/日期碼
         VALUE_0007(40) TYPE C,      "客戶貨號
       END OF GTY_UPLOAD.

TYPES : BEGIN OF TY_DATA ,
          VBELN       TYPE VBELN_VA, "銷售憑證
          POSNR       TYPE POSNR_VA, "銷售憑證專案
          AUFNR       TYPE AUFNR,    "生產訂單號
          MATNR       TYPE MATNR,    "物料號
          MAKTX       TYPE ARKTXT,   "物料描述
          ZMENG       TYPE DZMENG,   "目標數量
          ZPODAT      TYPE ZPODAT,   "PO/日期碼
          ZZHH        TYPE ZZHH,     "客戶貨號
          ID(30)      TYPE  C,       "
          MSG         TYPE CHAR255,  "
          TYPE        TYPE CHAR1,    "
*--------2018/9/28 ADD BY LQY START---------*
          WERKS       TYPE WERKS_D,
*--------2018/9/28 ADD BY LQY END-----------*
          CHK,"20181023 ADD BY LQY
        END OF TY_DATA.

TYPES : BEGIN OF TY_MSG ,
          INDEX  TYPE I,
          ID(30) TYPE  C,
          MSG    TYPE CHAR255,
          TYPE   TYPE CHAR1,

        END OF TY_MSG .

DATA: BEGIN OF GT_TEMPLATE OCCURS 0,
        TAB1(40) TYPE C  VALUE  '銷售憑證',
        TAB2(10) TYPE C  VALUE  '銷售憑證專案',
        TAB3(6)  TYPE C  VALUE  '生產訂單號',
        TAB4(3)  TYPE C  VALUE  '物料號',
        TAB5(10) TYPE C  VALUE  '目標數量(PCS)',
        TAB6(18) TYPE C  VALUE  'PO/日期碼',
        TAB7(18) TYPE C  VALUE  '客戶貨號',
        TAB8(18) TYPE C  VALUE  '',
        TAB9(18) TYPE C  VALUE  '',
        TAB10(50) TYPE C VALUE  '銷售憑證,銷售憑證專案,物料號3個必填,PO/日期碼 與 客戶貨號 二選一',
      END OF GT_TEMPLATE.

DATA: GT_UPLOAD TYPE STANDARD TABLE OF GTY_UPLOAD,
      GS_UPLOAD TYPE  GTY_UPLOAD.
DATA : GT_DATA TYPE STANDARD TABLE OF TY_DATA,
       GS_DATA TYPE TY_DATA,
       LT_DATA TYPE STANDARD TABLE OF TY_DATA,
       LS_DATA TYPE TY_DATA,
       GT_VBAK TYPE STANDARD TABLE OF VBAK,
       GS_VBAK TYPE VBAK,
       GT_MARA TYPE STANDARD TABLE OF MARA,
       GS_MARA TYPE MARA,
       GT_ZTPP069 TYPE STANDARD TABLE OF ZTPP069_C,
       GS_ZTPP069 TYPE ZTPP069_C
       .
DATA: GT_AUFK TYPE STANDARD TABLE OF AUFK,
      GS_AUFK TYPE AUFK,
      GT_AFKO TYPE STANDARD TABLE OF AFKO,
      GS_AFKO TYPE AFKO.
DATA: GT_VBAP TYPE STANDARD TABLE OF VBAP,
      GS_VBAP TYPE VBAP.
DATA: IT_FIELD  TYPE SLIS_T_FIELDCAT_ALV,
      LS_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: LV_TXT TYPE /LIME/CUST_CATSP-TXT .
DATA: LT_MSG TYPE STANDARD TABLE OF TY_MSG,
      LS_MSG TYPE TY_MSG.
DATA:GT_MAKT  TYPE STANDARD TABLE OF MAKT,
     GS_MAKT  TYPE MAKT.
DATA:  GT_ZSOPOCON TYPE STANDARD TABLE OF ZTEWM_ZSOPOCON WITH HEADER LINE,
       GS_ZSOPOCON TYPE ZTEWM_ZSOPOCON,
       GS1_ZSOPOCON TYPE ZTEWM_ZSOPOCON,
       LT_ZSOPOCON TYPE STANDARD TABLE OF ZTEWM_ZSOPOCON,
       LS_ZSOPOCON TYPE ZTEWM_ZSOPOCON,
       LT1_ZSOPOCON TYPE STANDARD TABLE OF ZTEWM_ZSOPOCON,
       LS1_ZSOPOCON TYPE ZTEWM_ZSOPOCON,
       LT_ZSOPOCONL TYPE STANDARD TABLE OF ZTEWM_ZSOPOCON_L,
       LS_ZSOPOCONL TYPE ZTEWM_ZSOPOCON_L,
       GT_DEL       TYPE STANDARD TABLE OF ZTEWM_ZSOPOCON,
       GS_DEL       TYPE ZTEWM_ZSOPOCON,
       GT_DEL_L     TYPE STANDARD TABLE OF ZTEWM_ZSOPOCON_L,
       GS_DEL_L     TYPE ZTEWM_ZSOPOCON_L,
       LV_MSG TYPE CHAR50,
       GV_MSG TYPE CHAR1,
       LV_RFCDEST TYPE RFCDEST,
       G_GRID TYPE REF TO CL_GUI_ALV_GRID,
       ZTABIX TYPE I.
DATA:EXCEL_NAME TYPE STRING.
DATA:WL_ANSWER TYPE C. "ADD BY LQY 20181023
*---------------------------------------------------------------------*
*  說明: 定義選擇螢幕                                                  *
*---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK T1 WITH FRAME TITLE TEXT-001.
PARAMETERS:
    P_PLDR RADIOBUTTON GROUP G1 USER-COMMAND UC ,      "批量匯入
    P_CXXG RADIOBUTTON GROUP G1 DEFAULT 'X'. "查詢與修改
SELECTION-SCREEN END OF BLOCK T1.
SELECTION-SCREEN BEGIN OF BLOCK T2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS:
    S_VBELN FOR LIKP-VBELN,
    S_AUFNR FOR AUFK-AUFNR.
SELECTION-SCREEN END OF BLOCK T2.
SELECTION-SCREEN BEGIN OF BLOCK T3 WITH FRAME TITLE TEXT-003.
PARAMETERS:
    "P1_PLDR AS CHECKBOX,
    P_XZLJ LIKE RLGRAP-FILENAME MODIF ID TP1 .
SELECTION-SCREEN END OF BLOCK T3.


*----------------------------------------------------------------------*
*  說明: 初始化事件
*----------------------------------------------------------------------*
INITIALIZATION.
  SET PF-STATUS 'STATUS'.
*----------------------------------------------------------------------*
*  說明: 螢幕輸出前處理
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF P_PLDR <> 'X'.
      CASE SCREEN-GROUP1.
        WHEN  'TP1'.
          SCREEN-ACTIVE = '0'.
        WHEN OTHERS.
      ENDCASE.
    ENDIF.
    IF P_PLDR = 'X'.
      CASE SCREEN-GROUP1.
        WHEN  'TP1'.
          SCREEN-ACTIVE = '1'.
        WHEN OTHERS.
      ENDCASE.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.
*----------------------------------------------------------------------*
*  說明: 處理選擇螢幕欄位事件
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
  CASE SY-UCOMM .
    WHEN 'DOWNLOAD'.
      " PERFORM FRM_TEMPLATE.
      PERFORM   FRM_GER_TEMPLATE USING EXCEL_NAME .
  ENDCASE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_XZLJ.
  PERFORM GET_P_XZLJ.
*----------------------------------------------------------------------*
* 說明: 資料檢索
*----------------------------------------------------------------------*
START-OF-SELECTION.
  IF P_PLDR = 'X'.
    PERFORM FRM_UPLOAD_FILE.
    PERFORM FRM_IMPORT_DATA.
  ELSE.
    PERFORM FRM_GET_DATA.
  ENDIF.
*----------------------------------------------------------------------*
* END OF SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
  PERFORM FRM_DISPLAY_DATA.
*&---------------------------------------------------------------------*
*&      FORM  FRM_TEMPLATE
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*

FORM FRM_GER_TEMPLATE  USING    EXCEL_NAME.
  DATA:
     LO_OBJDATA          LIKE WWWDATATAB,
     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,
    L_TITLE             TYPE STRING,
    L_DFNAME            TYPE STRING,
    L_FILENAME          TYPE STRING,
    L_PATH              TYPE STRING,
    L_L_PATH            TYPE STRING.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    EXPORTING
      WINDOW_TITLE      = L_TITLE
      DEFAULT_EXTENSION = 'xls'
      DEFAULT_FILE_NAME = L_DFNAME
      FILE_FILTER       = '(EXCEL)'
    CHANGING
      FILENAME          = L_FILENAME
      PATH              = L_PATH
      FULLPATH          = L_L_PATH.

  LO_OBJDATA-RELID = 'MI'.
  LO_OBJDATA-OBJID = 'ZEWM006'.
  LS_DESTINATION = L_L_PATH.

  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      KEY         = LO_OBJDATA
      DESTINATION = LS_DESTINATION
    IMPORTING
      RC          = LI_RC.
  IF LI_RC NE 0.
    MESSAGE '下載失敗,檢查輸入資料及模板是否上傳' TYPE 'E'.
  ENDIF.
ENDFORM.                    " FRM_GER_TEMPLATE

*&---------------------------------------------------------------------*
*&      Form  FRM_TEMPLATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_TEMPLATE .
  REFRESH GT_TEMPLATE.
  APPEND GT_TEMPLATE.
  "1.獲取檔案路徑 "
  DATA LV_FILE TYPE STRING.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      MASK             = ',EXCEL,*.XLS.'
      MODE             = 'S'
    IMPORTING
      FILENAME         = LV_FILE
    EXCEPTIONS
      INV_WINSYS       = 1
      NO_BATCH         = 2
      SELECTION_CANCEL = 3
      SELECTION_ERROR  = 4
      OTHERS           = 5.
  IF SY-SUBRC <> 0.

  ENDIF.

  "2.把內表下載到指定檔案路徑
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      FILENAME              = LV_FILE
      WRITE_FIELD_SEPARATOR = 'X'
    TABLES
      DATA_TAB              = GT_TEMPLATE
    EXCEPTIONS
      FILE_WRITE_ERROR      = 1
      OTHERS                = 22.
  IF SY-SUBRC <> 0.
    MESSAGE '下載失敗,檢查輸入資料及模板是否上傳' TYPE 'E'.
  ENDIF.
ENDFORM.                    "FRM_TEMPLATE
*&---------------------------------------------------------------------*
*&      FORM  GET_P_XZLJ
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM GET_P_XZLJ .
  DATA: L_RC     TYPE I,
        L_ACTION TYPE I,
        LD_FILE  TYPE FILE_TABLE,
        LT_FILE  TYPE FILETABLE.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    CHANGING
      FILE_TABLE              = LT_FILE
      RC                      = L_RC
      USER_ACTION             = L_ACTION
    EXCEPTIONS
      FILE_OPEN_DIALOG_FAILED = 1
      CNTL_ERROR              = 2
      ERROR_NO_GUI            = 3
      NOT_SUPPORTED_BY_GUI    = 4
      OTHERS                  = 5.

  IF SY-SUBRC = 0
    AND L_ACTION IS INITIAL.
    READ TABLE LT_FILE INTO LD_FILE INDEX 1.
    P_XZLJ = LD_FILE-FILENAME.
  ENDIF.
ENDFORM.                    "GET_P_XZLJ
*&---------------------------------------------------------------------*
*&      FORM  FRM_UPLOAD_FILE
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM FRM_UPLOAD_FILE .
  DATA:LT_EXCEL LIKE TABLE OF ALSMEX_TABLINE,
       LS_EXCEL TYPE ALSMEX_TABLINE.
  CLEAR LS_EXCEL.
  FIELD-SYMBOLS <FS> TYPE ANY.
  DATA:
    LV_TIND(4)    TYPE N,
    LV_ZFIELD(25) TYPE C.
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                = P_XZLJ
      I_BEGIN_COL             = 1
      I_BEGIN_ROW             = 2
      I_END_COL               = 7
      I_END_ROW               = 10000
    TABLES
      INTERN                  = LT_EXCEL   "以單元格來儲存值
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.
  IF SY-SUBRC <> 0.
* IMPLEMENT SUITABLE ERROR HANDLING HERE
  ENDIF.

  IF LT_EXCEL IS INITIAL.
    MESSAGE '匯入檔案沒有資料,請檢查!' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  LOOP AT LT_EXCEL INTO LS_EXCEL.
    AT NEW ROW.
      CLEAR GS_UPLOAD.
    ENDAT.
    LV_TIND = LS_EXCEL-COL.
    CONCATENATE 'GS_UPLOAD-VALUE_' LV_TIND INTO LV_ZFIELD.
    ASSIGN (LV_ZFIELD) TO <FS>.
    <FS> = LS_EXCEL-VALUE.
    AT END OF ROW.
*-------2018/9/21 ADD BY LQY START----*
      IF GS_UPLOAD-VALUE_0001 IS INITIAL.
        CLEAR:LV_MSG .
        CONCATENATE '第' LV_TIND '行銷售憑證為空!' INTO LV_MSG.
        MESSAGE LV_MSG TYPE 'S' DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.

      IF GS_UPLOAD-VALUE_0002 IS INITIAL.
        CLEAR:LV_MSG .
        CONCATENATE '第' LV_TIND '行銷售憑證專案為空!' INTO LV_MSG.
        MESSAGE LV_MSG TYPE 'S' DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.

      IF GS_UPLOAD-VALUE_0003 IS INITIAL.
        CLEAR:LV_MSG .
        CONCATENATE '第' LV_TIND '行生產訂單號為空!' INTO LV_MSG.
        MESSAGE LV_MSG TYPE 'S' DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.
      IF GS_UPLOAD-VALUE_0004 IS INITIAL.
        CLEAR:LV_MSG .
        CONCATENATE '第' LV_TIND '行物料號為空!' INTO LV_MSG.
        MESSAGE LV_MSG TYPE 'S' DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.

      IF GS_UPLOAD-VALUE_0006 IS INITIAL.
        CLEAR:GV_MSG .
        CONCATENATE '第' LV_TIND '行PO/日期碼為空!' INTO LV_MSG.
        MESSAGE LV_MSG TYPE 'S' DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.

      IF GS_UPLOAD-VALUE_0007 IS INITIAL.
        CLEAR:LV_MSG .
        CONCATENATE '第'  LV_TIND '行客戶貨號為空!' INTO LV_MSG.
        MESSAGE LV_MSG TYPE 'S' DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.
*------2018/9/21 ADD BY LQY END-------*
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = GS_UPLOAD-VALUE_0001
        IMPORTING
          OUTPUT = GS_UPLOAD-VALUE_0001.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = GS_UPLOAD-VALUE_0002
        IMPORTING
          OUTPUT = GS_UPLOAD-VALUE_0002.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = GS_UPLOAD-VALUE_0003
        IMPORTING
          OUTPUT = GS_UPLOAD-VALUE_0003.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = GS_UPLOAD-VALUE_0004
        IMPORTING
          OUTPUT = GS_UPLOAD-VALUE_0004.
      APPEND GS_UPLOAD TO GT_UPLOAD.
    ENDAT.
  ENDLOOP.
  IF GT_UPLOAD IS INITIAL.
    MESSAGE '匯入檔案沒有資料,請檢查!' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  SORT LT_EXCEL BY ROW COL.
ENDFORM.                    "FRM_UPLOAD_FILE
*&---------------------------------------------------------------------*
*&      FORM  FRM_IMPORT_DATA
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM FRM_IMPORT_DATA .
  DATA: IR_LGPLA TYPE RSELOPTION,
        IS_LGPLA TYPE RSDSSELOPT.
  DATA: IR_MATNR TYPE RSELOPTION,
        IS_MATNR TYPE RSDSSELOPT.
  DATA :IR_CAT TYPE RSELOPTION,
        IS_CAT TYPE RSDSSELOPT.
  DATA :IR_ENTITLED TYPE RSELOPTION,
        IS_ENTITLED TYPE  RSDSSELOPT.
*--------2018/9/13 ADD BY LQY START-------------*
  DATA: GT1_VBAP TYPE STANDARD TABLE OF VBAP,
        GS1_VBAP TYPE VBAP,
        GT_ZEWM006QX TYPE STANDARD TABLE OF ZTEWM006_QX,
        GS_ZEWM006QX TYPE ZTEWM006_QX,
        ZAUFNR TYPE AFKO-AUFNR.
*--------2018/9/13 ADD BY LQY END---------------*
  IF GT_UPLOAD IS NOT INITIAL.
*--------2018/9/13 ADD BY LQY START----------*
    SELECT
      VBELN
      POSNR
      MATNR
      FROM VBAP
      INTO CORRESPONDING FIELDS OF TABLE GT1_VBAP
      FOR ALL ENTRIES IN GT_UPLOAD
      WHERE VBELN = GT_UPLOAD-VALUE_0001
      AND   POSNR = GT_UPLOAD-VALUE_0002.
    IF GT1_VBAP IS NOT INITIAL.
      SELECT
        MATNR
        ZZCPLY
        FROM MARA
        INTO CORRESPONDING FIELDS OF TABLE GT_MARA
        FOR ALL ENTRIES IN GT1_VBAP
        WHERE MATNR = GT1_VBAP-MATNR.
      IF GT_MARA IS NOT INITIAL.
        SELECT
          ZZCPLY
          WERKS
          FROM ZTPP069_C
          INTO CORRESPONDING FIELDS OF TABLE GT_ZTPP069
          FOR ALL ENTRIES IN GT_MARA
          WHERE ZZCPLY = GT_MARA-ZZCPLY.
      ENDIF.
    ENDIF.
    SELECT
      WERKS
      ZZH
      FROM ZTEWM006_QX
      INTO CORRESPONDING FIELDS OF TABLE GT_ZEWM006QX.
    SORT GT_ZEWM006QX BY WERKS ZZH.
    LOOP AT  GT_ZTPP069 INTO GS_ZTPP069.
      READ TABLE GT_ZEWM006QX INTO GS_ZEWM006QX WITH KEY WERKS = GS_ZTPP069-WERKS ZZH = SY-UNAME BINARY SEARCH.
      IF SY-SUBRC <> 0.
        CLEAR:LV_MSG.
        CONCATENATE '使用者' SY-UNAME '沒有工廠'  GS_ZTPP069-WERKS '的許可權!' INTO LV_MSG.
        MESSAGE LV_MSG TYPE 'S' DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.
      CLEAR:GS_ZTPP069,GS_ZEWM006QX.
    ENDLOOP.
*-------2018/9/13 ADD BY LQY END-------------*
    SELECT
      VBELN "銷售憑證
      FROM VBAK
      INTO CORRESPONDING FIELDS OF TABLE GT_VBAK
      FOR ALL ENTRIES IN GT_UPLOAD
      WHERE VBELN  = GT_UPLOAD-VALUE_0001.
    SORT GT_VBAK BY VBELN.
    SELECT
      AUFNR "生產訂單
      KDAUF "銷售訂單
      KDPOS "銷售訂單專案
      FROM AUFK
      INTO CORRESPONDING FIELDS OF TABLE GT_AUFK
      FOR ALL ENTRIES IN GT_UPLOAD
      WHERE AUFNR = GT_UPLOAD-VALUE_0003.
    SORT GT_AUFK BY AUFNR.

    SELECT
     MATNR "物料
     SPRAS "語言
     MAKTX "描述
     FROM MAKT
     INTO CORRESPONDING FIELDS OF TABLE GT_MAKT
     FOR ALL ENTRIES IN GT_UPLOAD
     WHERE MATNR = GT_UPLOAD-VALUE_0004.
    SORT GT_MAKT BY MATNR SPRAS.
    IF GT_AUFK IS NOT INITIAL.
      SELECT
        VBELN  "銷售訂單
        POSNR  "行專案
        MATNR  "物料
        FROM VBAP
        INTO CORRESPONDING FIELDS OF TABLE GT_VBAP
        FOR ALL ENTRIES IN GT_AUFK
        WHERE VBELN = GT_AUFK-KDAUF
        AND   POSNR = GT_AUFK-KDPOS
        .
      SORT GT_VBAP BY VBELN POSNR.
    ENDIF.
  ENDIF.
  REFRESH: LT_DATA.
  LOOP AT  GT_UPLOAD INTO GS_UPLOAD .
    GS_DATA-VBELN = GS_UPLOAD-VALUE_0001.
    GS_DATA-POSNR = GS_UPLOAD-VALUE_0002.
    GS_DATA-AUFNR = GS_UPLOAD-VALUE_0003.
    GS_DATA-MATNR = GS_UPLOAD-VALUE_0004.
    GS_DATA-ZMENG = GS_UPLOAD-VALUE_0005.
    GS_DATA-ZPODAT = GS_UPLOAD-VALUE_0006.
    GS_DATA-ZZHH = GS_UPLOAD-VALUE_0007.
    LS_DATA-AUFNR = GS_UPLOAD-VALUE_0003.
    LS_DATA-ZMENG = GS_UPLOAD-VALUE_0005.
*-------2018/9/28 ADD BY LQY START-------*
    "工廠
    READ TABLE GT_MARA INTO GS_MARA WITH KEY MATNR = GS_UPLOAD-VALUE_0004.
    IF SY-SUBRC = 0.
      READ TABLE  GT_ZTPP069  INTO GS_ZTPP069 WITH KEY ZZCPLY = GS_MARA-ZZCPLY.
      IF SY-SUBRC = 0.
        GS_DATA-WERKS = GS_ZTPP069-WERKS.
      ENDIF.
    ENDIF.
    CLEAR:GS_MARA,GS_ZTPP069.
*-------2018/9/28 ADD BY LQY END---------*
    "物料描述
    READ TABLE GT_MAKT INTO GS_MAKT WITH KEY MATNR = GS_UPLOAD-VALUE_0004 SPRAS = '1' BINARY SEARCH.
    IF SY-SUBRC = 0.
      GS_DATA-MAKTX = GS_MAKT-MAKTX.
    ENDIF.
    IF GS_UPLOAD-VALUE_0003 IS NOT INITIAL.
      "檢查生產訂單號是否存在。
      READ TABLE GT_AUFK INTO GS_AUFK WITH KEY AUFNR = GS_UPLOAD-VALUE_0003 BINARY SEARCH.
      IF SY-SUBRC <> 0.
        CLEAR:ZAUFNR.
        ZAUFNR = GS_UPLOAD-VALUE_0003.
        "去前導零
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            INPUT  = ZAUFNR
          IMPORTING
            OUTPUT = ZAUFNR.
        IF STRLEN( ZAUFNR ) = 9.
          CLEAR :LV_MSG.
          CONCATENATE  '生產訂單號' GS_UPLOAD-VALUE_0003 '不存在!' INTO  LV_MSG.
          CONDENSE LV_MSG  NO-GAPS .
          GS_DATA-MSG  = LV_MSG .
          GS_DATA-TYPE = 'E'.
          GS_DATA-ID  = '@
[email protected]
' . APPEND GS_DATA TO GT_DATA . CLEAR:GS_UPLOAD,GS_AUFK,GS_DATA. CONTINUE. ENDIF. ELSE. ENDIF. READ TABLE GT_VBAP INTO GS_VBAP WITH KEY VBELN = GS_UPLOAD-VALUE_0001 POSNR = GS_UPLOAD-VALUE_0002 BINARY SEARCH. IF SY-SUBRC = 0. "檢查物料號是否存在。 IF GS_VBAP-MATNR IS INITIAL. CLEAR :LV_MSG. CONCATENATE '物料號' GS_VBAP-MATNR '不存在!' INTO LV_MSG. CONDENSE LV_MSG NO-GAPS . GS_DATA-MSG = LV_MSG . GS_DATA-TYPE = 'E'. GS_DATA-ID = '@
[email protected]
' . APPEND GS_DATA TO GT_DATA . CLEAR:GS_UPLOAD,GS_AUFK,GS_VBAP,GS_DATA. CONTINUE. ENDIF. ELSE. IF STRLEN( ZAUFNR ) = 9. "檢查銷售憑證行專案是否存在。 CLEAR :LV_MSG. CONCATENATE '銷售憑證' GS_UPLOAD-VALUE_0001 '行專案' GS_UPLOAD-VALUE_0002 '不存在!' INTO LV_MSG. CONDENSE LV_MSG NO-GAPS . GS_DATA-MSG = LV_MSG . GS_DATA-TYPE = 'E'. GS_DATA-ID = '@
[email protected]
' . APPEND GS_DATA TO GT_DATA . CLEAR:GS_UPLOAD,GS_AUFK,GS_VBAP,GS_DATA. CONTINUE. ENDIF. ENDIF. ELSE. "如果生產訂單號為空就只檢查銷售憑證是否存在。 READ TABLE GT_VBAK TRANSPORTING NO FIELDS WITH KEY VBELN = GS_UPLOAD-VALUE_0001 BINARY SEARCH. IF SY-SUBRC <> 0. CLEAR :LV_MSG. CONCATENATE '銷售憑證' GS_UPLOAD-VALUE_0001 '不存在!' INTO LV_MSG. CONDENSE LV_MSG NO-GAPS . GS_DATA-MSG = LV_MSG . GS_DATA-TYPE = 'E'. GS_DATA-ID = '@[email protected]' . APPEND GS_DATA TO GT_DATA . CLEAR:GS_UPLOAD,GS_AUFK,GS_VBAP,GS_DATA. CONTINUE. ENDIF. ENDIF. IF GS_DATA-TYPE = ''. GS_DATA-MSG = '檢查成功!' . GS_DATA-TYPE = 'S'. GS_DATA-ID = '@[email protected]' . ELSE . SHIFT GS_DATA-MSG . ENDIF. APPEND GS_DATA TO GT_DATA . COLLECT LS_DATA INTO LT_DATA. CLEAR: GS_UPLOAD ,LV_MSG,GS_DATA,GS_AUFK,GS_VBAP. ENDLOOP. * IF LT_DATA IS NOT INITIAL. * SELECT * AUFNR "訂單 * GAMNG "目標數量 * FROM AFKO * INTO CORRESPONDING FIELDS OF TABLE GT_AFKO * FOR ALL ENTRIES IN LT_DATA * WHERE AUFNR = LT_DATA-AUFNR. * ENDIF. * LOOP AT LT_DATA INTO LS_DATA. * READ TABLE GT_AFKO INTO GS_AFKO WITH KEY AUFNR = LS_DATA-AUFNR. * IF SY-SUBRC = 0. * IF LS_DATA-ZMENG > GS_AFKO-GAMNG. * CLEAR:LV_MSG. * CONCATENATE '生產訂單' LS_DATA-AUFNR '的數量合計大於訂單目標數量!' INTO LV_MSG. * MESSAGE LV_MSG TYPE 'S' DISPLAY LIKE 'E'. * LEAVE LIST-PROCESSING. * ENDIF. * ENDIF. * CLEAR:LS_DATA,GS_AFKO. * ENDLOOP. ENDFORM. "FRM_IMPORT_DATA * **&---------------------------------------------------------------------* **& FORM FRM_DISPLAY_DATA **&---------------------------------------------------------------------* ** TEXT **----------------------------------------------------------------------* ** --> P1 TEXT ** <-- P2 TEXT **----------------------------------------------------------------------* FORM FRM_DISPLAY_DATA . *報表顯示 PERFORM FRM_FIELD_INFO . LS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. LS_LAYOUT-ZEBRA = 'X'. LS_LAYOUT-BOX_FIELDNAME = 'CHK'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID I_CALLBACK_PF_STATUS_SET = 'SET_STATUS' I_CALLBACK_USER_COMMAND = 'USER_COMMAND ' I_SAVE = 'A' IS_LAYOUT = LS_LAYOUT IT_FIELDCAT = IT_FIELD TABLES T_OUTTAB = GT_DATA EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. * IMPLEMENT SUITABLE ERROR HANDLING HERE ENDIF. ENDFORM. "FRM_DISPLAY_DATA *&---------------------------------------------------------------------* *& FORM SET_STATUS *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * -->P_EXTAB TEXT *----------------------------------------------------------------------* FORM SET_STATUS USING P_EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS'ZST01'. ENDFORM. "SET_STATUS *&---------------------------------------------------------------------* *& Form USER_COMMAND *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_UCOMM text * -->RS_SELFIELD text *----------------------------------------------------------------------* FORM USER_COMMAND USING P_UCOMM TYPE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. CASE P_UCOMM. WHEN '%IMPORT'. " 重新整理ALV報表 CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING E_GRID = G_GRID. CALL METHOD G_GRID->CHECK_CHANGED_DATA. CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY. RS_SELFIELD-REFRESH = 'X'. "檢查是否有報錯資訊 READ TABLE GT_DATA TRANSPORTING NO FIELDS WITH KEY TYPE = 'E'. IF SY-SUBRC = 0. MESSAGE '有錯誤資訊!' TYPE 'E'. ENDIF. "數量檢查 REFRESH:LT_DATA. LOOP AT GT_DATA INTO GS_DATA. LS_DATA-AUFNR = GS_DATA-AUFNR. LS_DATA-ZMENG = GS_DATA-ZMENG. COLLECT LS_DATA INTO LT_DATA. CLEAR:GS_DATA,LS_DATA. ENDLOOP. IF P_PLDR <> 'X' AND LT_DATA IS NOT INITIAL. SELECT AUFNR "訂單 GAMNG "目標數量 FROM AFKO INTO CORRESPONDING FIELDS OF TABLE GT_AFKO FOR ALL ENTRIES IN LT_DATA WHERE AUFNR = LT_DATA-AUFNR. ENDIF. "檢查報表輸出後數量可能有所更改再次對數量進行檢查。 LOOP AT LT_DATA INTO LS_DATA. READ TABLE GT_AFKO INTO GS_AFKO WITH KEY AUFNR = LS_DATA-AUFNR. IF SY-SUBRC = 0. IF LS_DATA-ZMENG > GS_AFKO-GAMNG. CLEAR:LV_MSG. CONCATENATE '生產訂單' LS_DATA-AUFNR '的數量合計大於訂單目標數量!' INTO LV_MSG. MESSAGE LV_MSG TYPE 'E'. ENDIF. ENDIF. CLEAR:LS_DATA,GS_AFKO. ENDLOOP. *-----2018/9/20 ADD BY LQY START-------------* DELETE GT_DATA WHERE ZPODAT IS INITIAL. DELETE GT_DATA WHERE ZZHH IS INITIAL. *----2018/9/20 ADD BY LQY END----------------* IF P_PLDR = 'X' AND GT_DATA IS NOT INITIAL. SELECT * VBELN "銷售憑證 * POSNR "專案 * GUID "UUID * AUFNR "訂單號 * ERNAM "建立者 * ERDAT "建立日期 * ERZET "時間 * FROM ZTEWM_ZSOPOCON INTO CORRESPONDING FIELDS OF TABLE GT_ZSOPOCON FOR ALL ENTRIES IN GT_DATA WHERE VBELN = GT_DATA-VBELN AND POSNR = GT_DATA-POSNR. SORT GT_ZSOPOCON BY VBELN POSNR. ENDIF. LOOP AT GT_DATA INTO GS_DATA. MOVE-CORRESPONDING GS_DATA TO LS_ZSOPOCON. MOVE-CORRESPONDING GS_DATA TO LS_ZSOPOCONL. "READ TABLE GT_ZSOPOCON INTO GS_ZSOPOCON WITH KEY VBELN = GS_DATA-VBELN POSNR = GS_DATA-POSNR. CLEAR:ZTABIX. READ TABLE GT_ZSOPOCON INTO GS1_ZSOPOCON WITH KEY VBELN = GS_DATA-VBELN POSNR = GS_DATA-POSNR. IF SY-SUBRC = 0. "如果原先有記錄就只修改修改人 ZTABIX = SY-TABIX. LS_ZSOPOCON-ERNAM = GS1_ZSOPOCON-ERNAM. LS_ZSOPOCON-ERDAT = GS1_ZSOPOCON-ERDAT. LS_ZSOPOCON-ERZET = GS1_ZSOPOCON-ERZET. LS_ZSOPOCON-GUID = CL_SYSTEM_UUID=>CREATE_UUID_X16_STATIC( ). LS_ZSOPOCONL-GUID = LS_ZSOPOCON-GUID. LS_ZSOPOCONL-ERNAM = GS1_ZSOPOCON-ERNAM. LS_ZSOPOCONL-ERDAT = GS1_ZSOPOCON-ERDAT. LS_ZSOPOCONL-ERZET = GS1_ZSOPOCON-ERZET. LS_ZSOPOCONL-CHNAM = SY-UNAME. LS_ZSOPOCONL-CHDAT = SY-DATUM. LS_ZSOPOCONL-CHZET = SY-UZEIT. LOOP AT GT_ZSOPOCON INTO GS_ZSOPOCON FROM ZTABIX WHERE VBELN = GS_DATA-VBELN AND POSNR = GS_DATA-POSNR. APPEND GS_ZSOPOCON TO LT1_ZSOPOCON. CLEAR:GS_ZSOPOCON. ENDLOOP. ELSE. "如果原先表裡面沒有資料就賦值當前值 LS_ZSOPOCON-ERNAM = SY-UNAME. LS_ZSOPOCON-ERDAT = SY-DATUM. LS_ZSOPOCON-ERZET = SY-UZEIT. LS_ZSOPOCON-GUID = CL_SYSTEM_UUID=>CREATE_UUID_X16_STATIC( ). LS_ZSOPOCONL-GUID = LS_ZSOPOCON-GUID. LS_ZSOPOCONL-ERNAM = SY-UNAME. LS_ZSOPOCONL-ERDAT = SY-DATUM. LS_ZSOPOCONL-ERZET = SY-UZEIT. LS_ZSOPOCONL-CHNAM = SY-UNAME. LS_ZSOPOCONL-CHDAT = SY-DATUM. LS_ZSOPOCONL-CHZET = SY-UZEIT. ENDIF. APPEND LS_ZSOPOCON TO LT_ZSOPOCON. APPEND LS_ZSOPOCONL TO LT_ZSOPOCONL. CLEAR:GS_DATA,LS_ZSOPOCON,LS_ZSOPOCONL,GS1_ZSOPOCON. ENDLOOP. * IF SY-MANDT = '120'. * LV_RFCDEST = 'WMDCLNT120'. * ELSEIF SY-MANDT = '210'. * LV_RFCDEST = 'WMQCLNT200'. * ELSEIF SY-MANDT = '800'. * LV_RFCDEST = 'WMPCLNT800'. * ENDIF. "更新資料庫表 DELETE ADJACENT DUPLICATES FROM LT1_ZSOPOCON COMPARING VBELN POSNR AUFNR MATNR ZMENG ZPODAT ZZHH ERNAM ERDAT ERZET. * DELETE ADJACENT DUPLICATES FROM LT_ZSOPOCON COMPARING VBELN POSNR AUFNR MATNR ZMENG ZPODAT ZZHH ERNAM ERDAT ERZET. * DELETE ADJACENT DUPLICATES FROM LT_ZSOPOCONL COMPARING VBELN POSNR AUFNR MATNR ZMENG ZPODAT ZZHH ERNAM ERDAT ERZET CHNAM CHDAT CHZET. DELETE ZTEWM_ZSOPOCON FROM TABLE LT1_ZSOPOCON. MODIFY ZTEWM_ZSOPOCON FROM TABLE LT_ZSOPOCON. MODIFY ZTEWM_ZSOPOCON_L FROM TABLE LT_ZSOPOCONL. IF SY-SUBRC = 0. * CALL FUNCTION 'ZFM_EWM0002_008' * DESTINATION LV_RFCDEST * IMPORTING * EV_MSG = GV_MSG * TABLES * IT_ZSOPOCON = LT_ZSOPOCON * IT1_ZSOPOCON = LT1_ZSOPOCON. "調整程式:改用proxy呼叫po介面 by sean 20190809 "定義資料 DATA LV_INPUT TYPE ZZFM_EWM0002_008_INPUT. DATA LV_OUTPUT TYPE ZZFM_EWM0002_008_OUTPUT. DATA LV_IF_MTYPE TYPE C. DATA LV_IF_MSG TYPE BAPI_MSG. "處理輸入資料 PERFORM CONVERT_TABLES(ZPO_FORMPOOL001) IF FOUND TABLES LT_ZSOPOCON "輸入表 LV_INPUT-IT_ZSOPOCON."輸處表 PERFORM CONVERT_TABLES(ZPO_FORMPOOL001) IF FOUND TABLES LT1_ZSOPOCON "輸入表 LV_INPUT-IT1_ZSOPOCON."輸處表 "呼叫介面 PERFORM CALL_INTERFACE_METHOD(ZPO_FORMPOOL001) IF FOUND USING 'ZCO_SI_EWM016_ERP2EWM_PROXY2PR' "proxy類名稱 'SI_EWM016_ERP2EWM_PROXY2PROXY' "方法名稱 LV_INPUT "輸入引數 CHANGING LV_OUTPUT "輸出引數 LV_IF_MTYPE "是否出現異常 LV_IF_MSG "異常資訊 . "處理返回資料 GV_MSG = LV_OUTPUT-EV_MSG. IF LV_IF_MTYPE = 'E'. GV_MSG = LV_IF_MTYPE. ENDIF. IF GV_MSG = 'S'. COMMIT WORK AND WAIT. MESSAGE '資料更新成功' TYPE 'S'. ELSE. ROLLBACK WORK. IF LV_IF_MTYPE = 'E'. MESSAGE LV_IF_MSG TYPE 'S' DISPLAY LIKE 'E'. ELSE. MESSAGE 'EWM資料更新失敗' TYPE 'S' DISPLAY LIKE 'E'. ENDIF. ENDIF. ELSE. ROLLBACK WORK. MESSAGE 'ECC資料更新失敗' TYPE 'S' DISPLAY LIKE 'E'. ENDIF. REFRESH:LT_ZSOPOCON,LT_ZSOPOCONL. WHEN '%DEL'. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING TEXT_QUESTION = '該操作會刪除選中的資料,確認刪除?' ICON_BUTTON_1 = '是' ICON_BUTTON_2 = '否' DEFAULT_BUTTON = '1' DISPLAY_CANCEL_BUTTON = 'X' START_COLUMN = 25 START_ROW = 6 IMPORTING ANSWER = WL_ANSWER EXCEPTIONS TEXT_NOT_FOUND = 1 OTHERS = 2. CHECK WL_ANSWER = '1' . LOOP AT GT_DATA INTO GS_DATA WHERE CHK = 'X'. MOVE-CORRESPONDING GS_DATA TO GS_DEL. MOVE-CORRESPONDING GS_DATA TO GS_DEL_L. APPEND GS_DEL TO GT_DEL. APPEND GS_DEL_L TO GT_DEL_L. DELETE GT_DATA INDEX SY-TABIX. ENDLOOP. * MODIFY ZTEWM_ZSOPOCON FROM TABLE LT_ZSOPOCON. * MODIFY ZTEWM_ZSOPOCON_L FROM TABLE LT_ZSOPOCONL. LOOP AT GT_DEL INTO GS_DEL. DELETE FROM ZTEWM_ZSOPOCON WHERE VBELN = GS_DEL-VBELN AND POSNR = GS_DEL-POSNR AND MATNR = GS_DEL-MATNR. DELETE FROM ZTEWM_ZSOPOCON_L WHERE VBELN = GS_DEL-VBELN AND POSNR = GS_DEL-POSNR AND MATNR = GS_DEL-MATNR. ENDLOOP. IF SY-MANDT = '120'. LV_RFCDEST = 'WMDCLNT120'. ELSEIF SY-MANDT = '210'. LV_RFCDEST = 'WMQCLNT200'. ELSEIF SY-MANDT = '800'. LV_RFCDEST = 'WMPCLNT800'. ENDIF. CLEAR:GV_MSG. CALL FUNCTION 'ZFM_EWM0002_009' DESTINATION LV_RFCDEST IMPORTING EV_FLAG = GV_MSG TABLES IT_SCAN = GT_DEL. IF GV_MSG = 'X'. COMMIT WORK AND WAIT. MESSAGE '資料更新成功' TYPE 'S'. ELSE. ROLLBACK WORK . MESSAGE '資料更新失敗' TYPE 'S' DISPLAY LIKE 'E'. ENDIF. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING E_GRID = G_GRID. CALL METHOD G_GRID->CHECK_CHANGED_DATA. CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY. RS_SELFIELD-REFRESH = 'X'. WHEN OTHERS. ENDCASE. RS_SELFIELD-REFRESH = 'X'. ENDFORM. "USER_COMMAND *&---------------------------------------------------------------------* *& FORM FRM_FIELD_INFO *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM FRM_FIELD_INFO . CLEAR IT_FIELD. PERFORM FRM_FIELDCAT_SET USING: 'VBELN' '銷售憑證' 15 'X' '' 'X' , 'POSNR' '銷售憑證專案' 8 '' '' '' , 'AUFNR' '生產訂單號' 10 '' '' '' , *---------------2018/9/28 ADD BY LQY START------------* 'WERKS' '工廠' 10 '' '' '', *--------------2018/9/28 ADD BY LQY END----------------* 'MATNR' '物料號' 15 'X' '' '' , 'MAKTX' '物料描述' 15 'X' '' '' , 'ZMENG' '目標數量' 15 '' 'X' '' , 'ZPODAT' 'PO/日期碼' 8 '' 'X' '' , 'ZZHH' '客戶貨號' 15 'X' 'X' '' , 'MSG' '訊息' 15 '' '' '' , 'TYPE' '狀態' 8 '' '' '', 'ID' '備註' 8 '' '' '' . ENDFORM. "FRM_FIELD_INFO *&---------------------------------------------------------------------* *& FORM FRM_FIELDCAT_SET *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * -->P_1640 TEXT * -->P_1641 TEXT * -->P_15 TEXT * -->P_1643 TEXT * -->P_1644 TEXT * -->P_1645 TEXT *----------------------------------------------------------------------* FORM FRM_FIELDCAT_SET USING FIELDNAME TYPE SLIS_FIELDCAT_ALV-FIELDNAME SELTEXT TYPE SLIS_FIELDCAT_ALV-SELTEXT_L OUTPUTLEN TYPE SLIS_FIELDCAT_ALV-OUTPUTLEN NO_ZERO TYPE SLIS_FIELDCAT_ALV-NO_ZERO EDIT TYPE SLIS_FIELDCAT_ALV-EDIT KEY TYPE SLIS_FIELDCAT_ALV-KEY . DATA:IS_FIELDCAT TYPE SLIS_FIELDCAT_ALV. IS_FIELDCAT-FIELDNAME = FIELDNAME. IS_FIELDCAT-SELTEXT_S = SELTEXT. IS_FIELDCAT-SELTEXT_M = SELTEXT. IS_FIELDCAT-SELTEXT_L = SELTEXT. IS_FIELDCAT-OUTPUTLEN = OUTPUTLEN. IS_FIELDCAT-NO_ZERO = NO_ZERO. IS_FIELDCAT-EDIT = EDIT. IS_FIELDCAT-KEY = KEY . IF IS_FIELDCAT-FIELDNAME = 'VSOLA'. IS_FIELDCAT-DECIMALS_OUT = 3. ENDIF. APPEND IS_FIELDCAT TO IT_FIELD. CLEAR IS_FIELDCAT. ENDFORM. "FRM_FIELDCAT_SET *&---------------------------------------------------------------------* *& Form FRM_GET_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_GET_DATA . SELECT VBELN "銷售憑證 POSNR "銷售憑證專案 AUFNR "訂單號 MATNR "物料號 ZMENG "銷售單位目標數量 ZPODAT "PO/日期碼 ZZHH "貨號 ERNAM "建立者 ERDAT "建立日期 ERZET "時間 FROM ZTEWM_ZSOPOCON INTO CORRESPONDING FIELDS OF TABLE GT_ZSOPOCON WHERE VBELN IN S_VBELN AND AUFNR IN S_AUFNR. IF GT_ZSOPOCON[] IS NOT INITIAL. SELECT MATNR "物料 SPRAS "語言 MAKTX "描述 FROM MAKT INTO CORRESPONDING FIELDS OF TABLE GT_MAKT FOR ALL ENTRIES IN GT_ZSOPOCON[] WHERE MATNR = GT_ZSOPOCON-MATNR AND SPRAS = '1' . SELECT MATNR ZZCPLY FROM MARA INTO CORRESPONDING FIELDS OF TABLE GT_MARA FOR ALL ENTRIES IN GT_ZSOPOCON[] WHERE MATNR = GT_ZSOPOCON-MATNR. IF GT_MARA IS NOT INITIAL. SELECT ZZCPLY WERKS FROM ZTPP069_C INTO CORRESPONDING FIELDS OF TABLE GT_ZTPP069 FOR ALL ENTRIES IN GT_MARA WHERE ZZCPLY = GT_MARA-ZZCPLY. ENDIF. ENDIF. LOOP AT GT_ZSOPOCON INTO GS_ZSOPOCON. MOVE-CORRESPONDING GS_ZSOPOCON TO GS_DATA. READ TABLE GT_MAKT INTO GS_MAKT WITH KEY MATNR = GS_DATA-MATNR SPRAS = '1'. IF SY-SUBRC = 0. GS_DATA-MAKTX = GS_MAKT-MAKTX. ENDIF. *------2018/9/28 ADD BY LQY START--------* "工廠 READ TABLE GT_MARA INTO GS_MARA WITH KEY MATNR = GS_ZSOPOCON-MATNR. IF SY-SUBRC = 0. READ TABLE GT_ZTPP069 INTO GS_ZTPP069 WITH KEY ZZCPLY = GS_MARA-ZZCPLY. IF SY-SUBRC = 0. GS_DATA-WERKS = GS_ZTPP069-WERKS. ENDIF. ENDIF. CLEAR:GS_MARA,GS_ZTPP069. *------2018/9/28 ADD BY LQY END----------* GS_DATA-MSG = '檢查成功!' . GS_DATA-TYPE = 'S'. GS_DATA-ID = '@[email protected]' . APPEND GS_DATA TO GT_DATA. CLEAR:GS_ZSOPOCON,GS_DATA,GS_MAKT. ENDLOOP. ENDFORM. " FRM_GET_DATA