生产订单批导

TYPE-POOLS SLIS,ICON,TRUXS .



TYPES:
  BEGIN OF TY_ALV,
    BOX       TYPE C,
    PLNBEZ    TYPE AFKO-PLNBEZ"物料
    MAKTX     TYPE MAKT-MAKTX,   "物料描述
    WERKS     TYPE AUFK-WERKS"工厂
    AUART     TYPE AUFK-AUART"订单类型
    GAMNG     TYPE AFKO-GAMNG"总数量
    MEINS     TYPE MARA-MEINS,  "基本单位
    VERID     TYPE AFPO-VERID"生产版本
    ZBC001    TYPE AUFK-ZBC001"排产日期
    ZBC002    TYPE AUFK-ZBC002"班次
    ZBC003    TYPE AUFK-ZBC003"排产人员
    MESS(200TYPE C,
    AUFNR     TYPE AUFK-AUFNR"订单
    ZJIANCHA  TYPE C,
  END OF TY_ALV.
DATA GT_ALV TYPE TABLE OF TY_ALV,
       GS_ALV LIKE LINE OF GT_ALV.
DATA GT_ALV2 TYPE TABLE OF TY_ALV,
       GS_ALV2 LIKE LINE OF GT_ALV2.
TYPES:
  BEGIN OF TY_UPLOAD,
    PLNBEZ TYPE AFKO-PLNBEZ"物料
    WERKS  TYPE AUFK-WERKS"工厂
    AUART  TYPE AUFK-AUART"订单类型
    GAMNG  TYPE STRING"总数量
*    GAMNG  TYPE AFKO-GAMNG, "总数量
    VERID  TYPE AFPO-VERID"生产版本
    ZBC001 TYPE AUFK-ZBC001"排产日期
    ZBC002 TYPE AUFK-ZBC002"班次
    ZBC003 TYPE AUFK-ZBC003"排产人员
    AUFNR  TYPE AUFK-AUFNR"订单
  END OF TY_UPLOAD.
DATA GT_UPLOAD TYPE TABLE OF TY_UPLOAD,
       GS_UPLOAD LIKE LINE OF GT_UPLOAD.


DATA GT_BDCDATA TYPE TABLE OF BDCDATA WITH HEADER LINE"BDC执行内表
DATA GT_MSGTAB TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE "BDC返回信息表

TYPESBEGIN OF TY_MESSAGE,
         MESSAGE(100TYPE C,
         ZTYPE        TYPE C,
       END OF TY_MESSAGE.
DATA:GT_MES TYPE TABLE OF TY_MESSAGE,
     GS_MES TYPE TY_MESSAGE.

TYPES :
  BEGIN OF TY_MARC,
    MATNR TYPE MARC-MATNR,
    WERKS TYPE MARC-WERKS,
  END OF TY_MARC.
DATA GT_MARC TYPE TABLE OF TY_MARC,
       GS_MARC LIKE LINE OF GT_MARC.

TYPES :
  BEGIN OF TY_MAKT,
    MATNR TYPE MAKT-MATNR,
    MAKTX TYPE MAKT-MAKTX,
  END OF TY_MAKT.
DATA GT_MAKT TYPE TABLE OF TY_MAKT,
       GS_MAKT LIKE LINE OF GT_MAKT.


TYPES :
  BEGIN OF TY_MARA,
    MATNR TYPE MARA-MATNR,
    MEINS TYPE MARA-MEINS,
  END OF TY_MARA.
DATA GT_MARA TYPE TABLE OF TY_MARA,
       GS_MARA LIKE LINE OF GT_MARA.








*&---定义ALV显示的字段列及其描述等属性
DATAGT_FIELDCAT TYPE TABLE OF LVC_S_FCAT,
      GS_FIELDCAT TYPE LVC_S_FCAT,
      GS_LAYOUT   TYPE LVC_S_LAYO,
      G_REPID     LIKE SY-REPID VALUE SY-REPID.

*----------------------------------------------------------------------*
*---------------------------------选择屏幕-----------------------------*
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_PATH  LIKE RLGRAP-FILENAME,         "文件路径
           RB_UP   TYPE C RADIOBUTTON GROUP GRP1,
           RB_DOWN TYPE C RADIOBUTTON GROUP GRP1.
SELECTION-SCREEN END OF BLOCK BLK1.


*---------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PATH.    "P_PATH创建搜索帮助
  PERFORM FRM_BROWSER_FILE.         "选择屏幕获取本地EXCEL

START-OF-SELECTION.
  IF RB_UP 'X'.
    IF P_PATH IS INITIAL .
      MESSAGE '上传文件路径不能为空TYPE 'S' DISPLAY LIKE 'E' .
      LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0.
    ENDIF.

    PERFORM FRM_UP_EXCEL.       "上传Excel数据
    PERFORM FRM_CHK_DATA.       "检查数据
    PERFORM FRM_LAYOUT.
    PERFORM FRM_FIELDCAT.
    PERFORM FRM_DISPLAY.
  ELSEIF RB_DOWN 'X'.
    PERFORM FRM_DOWN_EXCEL.
  ENDIF.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_BROWSER_FILE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_BROWSER_FILE .
  DATALV_RC   TYPE I,
        LV_USER TYPE I,
        LT_FILE TYPE FILETABLE,
        LS_FILE TYPE FILE_TABLE.
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    
EXPORTING
      WINDOW_TITLE            '选择文件'
      FILE_FILTER             'EXCEL文件(*.XLSX)|*.XLS|*.XLSX|全部文件 (*.*)|*.*|'
    CHANGING
      FILE_TABLE              LT_FILE
      RC                      
LV_RC
      USER_ACTION             
LV_USER
    
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.
  ELSE.
    CHECK LV_RC 1
      AND LV_USER <> 9.
    READ TABLE LT_FILE INTO LS_FILE INDEX 1.
    P_PATH LS_FILE-FILENAME.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> GV_FULLPATH
*&---------------------------------------------------------------------*
FORM FRM_DOWN_EXCEL .

*&---变量定义
  DATA:LV_TEXT       TYPE STRING,                   "MESSAGE
       LV_FILENAME   TYPE STRING,                   "DOWNLOAD FILE NAME
       LV_PATH       TYPE STRING,                   "DOWNLOAD FILE PATH
       LV_FUNCTXT    TYPE SMP_DYNTXT,               "MENU NAME
       LV_FILEPATH   TYPE RLGRAP-FILENAME VALUE 'C'"FILE PATCH
       LV_TITLE      TYPE STRING ,                  "TITLE
       LV_TITLE_NAME TYPE STRING,                   "TITLE NAME
       LV_MOD(20),                                  "MODEL
       LV_FULLPATH   TYPE STRING,                   "FULL PATH
       LV_OBJECT     TYPE WWWDATATAB,               "OBJECT NAME
       LV_RC         TYPE SY-SUBRC.                 "RETURN CODE

* SMWO 模板名称
  LV_MOD 'ZPPB_142'"XXX下载文件名
调用OS 操作系统对话框
  LV_TITLE      '模板下载'.
  LV_TITLE_NAME '生产订单'.
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    
EXPORTING
      WINDOW_TITLE      LV_TITLE      保存'
      DEFAULT_FILE_NAME LV_TITLE_NAME 发票预制导入模板
    CHANGING
      FILENAME          LV_FILENAME
      PATH              
LV_PATH
      FULLPATH          
LV_FULLPATH.
操作系统文件路径
  CONCATENATE LV_PATH
  LV_FILENAME
  
'.XLS'
  INTO LV_FILEPATH.
* OS长度控制/下载模板
  IF STRLENLV_FILEPATH <> 4.
查询模板.
    SELECT SINGLE RELID
    OBJID
    
FROM WWWDATA
    
INTO CORRESPONDING FIELDS OF LV_OBJECT
    
WHERE SRTF2 '0'
    AND OBJID LV_MOD.    "SMW0里对象名称
    IF SY-SUBRC <> OR LV_OBJECT-OBJID SPACE .
      CONCATENATE TEXT-021"'模板文件:'
      LV_MOD
      
TEXT-022"'不存在,请用SMW0进行加载.'
      INTO LV_TEXT.
      MESSAGE LV_TEXT TYPE 'E'.
      STOP.
    ENDIF.
下载模板
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        KEY         LV_OBJECT
        DESTINATION 
LV_FILEPATH
      
IMPORTING
        RC          LV_RC.
    IF LV_RC <> 0.
      CONCATENATE '模板文件:LV_MOD  '下载失败,请与开发人员联系.'"''下载失败,请与开发人员联系.'
      INTO LV_TEXT.
      MESSAGE LV_TEXT TYPE 'E'.
      STOP.
    ENDIF.
* '已下载'
    MESSAGE '已下载TYPE 'S'.
  ELSE.
* '已取消下载'
    MESSAGE '已取消下载TYPE 'S'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UP_EXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_UP_EXCEL .

  DATALT_FILENAME TYPE RLGRAP-FILENAME,   "路径
        LT_DATA     TYPE TRUXS_T_TEXT_DATA.

  LT_FILENAME P_PATH.   "路径
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    = 'X'
      I_LINE_HEADER        'X'
      I_TAB_RAW_DATA       LT_DATA
      I_FILENAME           
LT_FILENAME
    
TABLES
      I_TAB_CONVERTED_DATA GT_UPLOAD
    
EXCEPTIONS
      CONVERSION_FAILED    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_CHK_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CHK_DATA .
  LOOP AT GT_UPLOAD INTO GS_UPLOAD.
    MOVE-CORRESPONDING GS_UPLOAD TO GS_ALV.

    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        INPUT        GS_ALV-PLNBEZ
      
IMPORTING
        OUTPUT       GS_ALV-PLNBEZ
      
EXCEPTIONS
        LENGTH_ERROR 1
        OTHERS       2.
    IF SY-SUBRC <> 0.
* Implement suitable error handling here
    ENDIF.

    APPEND GS_ALV TO GT_ALV.
    CLEAR GS_UPLOAD.
  ENDLOOP.

IF GT_ALV IS NOT INITIAL.
  SELECT
       MATNR
       WERKS
       
INTO CORRESPONDING FIELDS OF TABLE GT_MARC
       
FROM MARC
       
FOR ALL ENTRIES IN GT_ALV
       
WHERE WERKS GT_ALV-WERKS
       
AND   MATNR GT_ALV-PLNBEZ.

   SELECT
      MAKTX
      MATNR
      
INTO CORRESPONDING FIELDS OF TABLE GT_MAKT
      
FROM
      MAKT
     
FOR ALL ENTRIES IN GT_ALV
      
WHERE MATNR GT_ALV-PLNBEZ
      
AND SPRAS SY-LANGU.

    SELECT
      MEINS
      MATNR
      
INTO CORRESPONDING FIELDS OF TABLE GT_MARA
      
FROM
      MARA
     
FOR ALL ENTRIES IN GT_ALV
      
WHERE MATNR GT_ALV-PLNBEZ.
ENDIF.

LOOP AT GT_ALV INTO GS_ALV.
  READ TABLE GT_MARC  INTO GS_MARC WITH KEY  MATNR GS_ALV-PLNBEZ   WERKS GS_ALV-WERKS.
     IF SY-SUBRC <> 0.
       GS_ALV-MESS '物料不存在'.
      ENDIF.
  READ TABLE GT_MAKT INTO GS_MAKT WITH KEY  MATNR GS_ALV-PLNBEZ.
    IF SY-SUBRC 0.
      GS_ALV-MAKTX  GS_MAKT-MAKTX.
    ENDIF.

  READ TABLE GT_MARA INTO GS_MARA WITH KEY MATNR GS_ALV-PLNBEZ.
    IF SY-SUBRC 0.
      GS_ALV-MEINS GS_MARA-MEINS.
    ENDIF.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
      EXPORTING
        INPUT         GS_ALV-PLNBEZ
     
IMPORTING
       OUTPUT        GS_ALV-PLNBEZ   .

  MODIFY GT_ALV FROM GS_ALV.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_LAYOUT .
  GS_LAYOUT-ZEBRA 'X'.
  GS_LAYOUT-CWIDTH_OPT 'X'.
  GS_LAYOUT-BOX_FNAME  'BOX'.   " ALV 左侧选择框
  GS_LAYOUT-SEL_MODE 'A'.
ENDFORM.

FORM FRM_FIELDCAT .

*  CLEAR GS_FIELDCAT.
*  GS_FIELDCAT-FIELDNAME = 'BOX'.
*  GS_FIELDCAT-COLTEXT = '选择'.
*  GS_FIELDCAT-OUTPUTLEN = 10.
*  GS_FIELDCAT-EDIT = 'X'.
*  GS_FIELDCAT-CHECKBOX = 'X'.
*  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'AUFNR'.
  GS_FIELDCAT-COLTEXT '订单'.
*  GS_FIELDCAT-CONVEXIT = 'ALPHA'.
  GS_FIELDCAT-OUTPUTLEN 10.
  GS_FIELDCAT-NO_ZERO  'X'.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'PLNBEZ'.
  GS_FIELDCAT-COLTEXT '物料'.
*  GS_FIELDCAT-CONVEXIT = 'MATN1'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'MAKTX'.
  GS_FIELDCAT-COLTEXT '物料描述'.
*  GS_FIELDCAT-CONVEXIT = 'MATN1'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'WERKS'.
  GS_FIELDCAT-COLTEXT '工厂'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'AUART'.
  GS_FIELDCAT-COLTEXT '订单类型'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'GAMNG'.
  GS_FIELDCAT-COLTEXT '总数量'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'MEINS'.
  GS_FIELDCAT-COLTEXT '基本单位'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'VERID'.
  GS_FIELDCAT-COLTEXT '生产版本'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'ZBC001'.
  GS_FIELDCAT-COLTEXT '排产日期'.
  GS_FIELDCAT-OUTPUTLEN 10.
  GS_FIELDCAT-NO_ZERO   'X'.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'ZBC002'.
  GS_FIELDCAT-COLTEXT '班次'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'ZBC003'.
  GS_FIELDCAT-COLTEXT '排产人员'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'MESS'.
  GS_FIELDCAT-COLTEXT '信息'.
  GS_FIELDCAT-OUTPUTLEN 200.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .



ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       SY-REPID
      I_CALLBACK_PF_STATUS_SET 
'SET_PF_STATUS'
      I_CALLBACK_USER_COMMAND  'USER_COMMAND'
      IS_LAYOUT_LVC            GS_LAYOUT
      IT_FIELDCAT_LVC          
GT_FIELDCAT
    
TABLES
      T_OUTTAB                 GT_ALV
    
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 SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.

  SET PF-STATUS 'STATUS'.

ENDFORM.

FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
                        RS_SELFIELD 
TYPE SLIS_SELFIELD.
  DATAGV_GRID TYPE REF TO CL_GUI_ALV_GRID .

*--------------------刷新-------------------*
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID GV_GRID.

  CALL METHOD GV_GRID->CHECK_CHANGED_DATA.

  CALL METHOD GV_GRID->REFRESH_TABLE_DISPLAY.

  RS_SELFIELD-REFRESH 'X'.

  CASE R_UCOMM.
    WHEN 'ZSAVE'.
      PERFORM FRM_DEAL_DATE.
      PERFORM FRM_CHECK_DATE.
      PERFORM FRM_BDC.
  ENDCASE.

  CALL METHOD GV_GRID->REFRESH_TABLE_DISPLAY.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BDC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_BDC .

  LOOP AT GT_ALV INTO GS_ALV WHERE BOX 'X'
                              AND   MESS IS NOT INITIAL.
  ENDLOOP.
  IF SY-SUBRC 0.
    MESSAGE '不能选中错误数据导入'  TYPE 'E'.
  ENDIF.
  CLEAR GS_ALV.
  LOOP AT GT_ALV INTO GS_ALV WHERE BOX 'X' AND ZJIANCHA <> 'X'.

    PERFORM BDC_DYNPRO      USING 'SAPLCOKO1' '0100'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=ENTK'.
    PERFORM BDC_FIELD       USING 'CAUFVD-MATNR'
                                  GS_ALV-PLNBEZ.             "物料
    PERFORM BDC_FIELD       USING 'CAUFVD-WERKS'
                                  GS_ALV-WERKS.              "工厂
    PERFORM BDC_FIELD       USING 'AUFPAR-PP_AUFART'
                                  GS_ALV-AUART.              "订单类型

    PERFORM BDC_DYNPRO      USING 'SAPLCOKO1' '0115'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=SLAP'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'CAUFVD-GLTRP'.
    PERFORM BDC_FIELD       USING 'CAUFVD-GAMNG'
                                  GS_ALV-GAMNG.               "总数量

    PERFORM BDC_FIELD       USING 'CAUFVD-GLTRP'
                                  GS_ALV-ZBC001.               "排产日期
    PERFORM BDC_FIELD       USING 'CAUFVD-GSTRP'
                                  GS_ALV-ZBC001.               "排产日期


    PERFORM BDC_DYNPRO      USING 'SAPLCOKO1' '0115'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=STAK'.
    PERFORM BDC_DYNPRO      USING 'SAPLCOKO1' '0131'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=ENT1'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'RC62F-PROD_VERS'.         "生产版本
    PERFORM BDC_FIELD       USING 'RC62F-VER_SEL'
                                     'X'.    "生产版本
    PERFORM BDC_FIELD       USING 'RC62F-PROD_VERS'
                                  GS_ALV-VERID.         "生产版本


    PERFORM BDC_DYNPRO      USING 'SAPLCOKO1' '0115'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=+COI'.

    PERFORM BDC_DYNPRO      USING 'SAPLCOKO1' '0115'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=BU'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'ZCAUFVD-ZBC003'.

    PERFORM BDC_FIELD       USING 'ZCAUFVD-ZBC001'
                                  GS_ALV-ZBC001.              "排产日期
    PERFORM BDC_FIELD       USING 'ZCAUFVD-ZBC002'
                                  GS_ALV-ZBC002.              "班次
    PERFORM BDC_FIELD       USING 'ZCAUFVD-ZBC003'
                                  GS_ALV-ZBC003.              "排产人员

    CALL TRANSACTION 'CO01' USING GT_BDCDATA
                                
MODE 'N'
                                MESSAGES INTO GT_MSGTAB
                                
UPDATE 'S'.




    LOOP AT GT_MSGTAB."获取MESSAGE
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          MSGID               GT_MSGTAB-MSGID
          MSGNR               
GT_MSGTAB-MSGNR
          MSGV1               
GT_MSGTAB-MSGV1
          MSGV2               
GT_MSGTAB-MSGV2
          MSGV3               
GT_MSGTAB-MSGV3
          MSGV4               
GT_MSGTAB-MSGV4
        
IMPORTING
          MESSAGE_TEXT_OUTPUT GS_MES.

      IF GT_MSGTAB-MSGTYP 'S' AND  GT_MSGTAB-MSGID 'CO' AND GT_MSGTAB-MSGV1 <> ''.
*        IF SY-SUBRC = 0.
          GS_ALV-AUFNR GT_MSGTAB-MSGV1.
          GS_ALV-ZJIANCHA 'X'.
*        ENDIF.
         ELSE.
           GS_ALV-AUFNR ''.
           GS_ALV-ZJIANCHA 'X'.
      ENDIF.
    CLEARGT_BDCDATA[] .
    ENDLOOP.
    GS_ALV-MESS GS_MES-MESSAGE.
    MODIFY GT_ALV FROM GS_ALV TRANSPORTING AUFNR MESS ZJIANCHA.

    CLEARGT_BDCDATA[] ,GS_ALV.
  ENDLOOP.
ENDFORM.


*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR GT_BDCDATA.
  GT_BDCDATA-PROGRAM  PROGRAM.
  GT_BDCDATA-DYNPRO   DYNPRO.
  GT_BDCDATA-DYNBEGIN 'X'.
  APPEND GT_BDCDATA.
ENDFORM.
*----------------------------------------------------------------------*
*        INSERT FIELD                                                  *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
*  IF FVAL <> NODATA.
  CLEAR GT_BDCDATA.
  GT_BDCDATA-FNAM FNAM.
  GT_BDCDATA-FVAL FVAL.
  SHIFT GT_BDCDATA-FVAL LEFT DELETING LEADING SPACE.
  APPEND GT_BDCDATA.
*  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DEAL_DATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DEAL_DATE .
  CLEAR GT_ALV2,GS_ALV2.
  LOOP AT GT_ALV INTO GS_ALV WHERE  BOX 'X'.
    MOVE-CORRESPONDING GS_ALV TO  GS_ALV2.
    APPEND GS_ALV2 TO GT_ALV2.
  ENDLOOP.
  IF GT_ALV2  IS INITIAL.
    MESSAGE '请选择数据再保存TYPE 'S'  DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_DATE .
  SORT GT_ALV BY BOX ZJIANCHA.
  READ TABLE GT_ALV INTO GS_ALV WITH KEY BOX 'X'   ZJIANCHA 'X'.
  IF SY-SUBRC 0.
    MESSAGE '这条数据已经创建过,请重新选择TYPE 'E'.
    EXIT.
  ENDIF.
ENDFORM.

 

 

    1. 需要注意的要点

上传的接收内表数量类型定义STRING,不然导入的时候当数量小于1的时候会扩大倍数

TYPES:
  BEGIN OF TY_UPLOAD,
    PLNBEZ TYPE AFKO-PLNBEZ"物料
    WERKS  TYPE AUFK-WERKS"工厂
    AUART  TYPE AUFK-AUART"订单类型
    GAMNG  TYPE STRING"总数量
*    GAMNG  TYPE AFKO-GAMNG, "总数量
    VERID  TYPE AFPO-VERID"生产版本
    ZBC001 TYPE AUFK-ZBC001"排产日期
    ZBC002 TYPE AUFK-ZBC002"班次
    ZBC003 TYPE AUFK-ZBC003"排产人员
    AUFNR  TYPE AUFK-AUFNR"订单
  END OF TY_UPLOAD.
DATA GT_UPLOAD TYPE TABLE OF TY_UPLOAD,
       GS_UPLOAD LIKE LINE OF GT_UPLOAD.

 

 

1.3.2 BDC录屏之后的FORM BDC_FIELD USING FNAM FVAL. 要删除前导空格

 SHIFT GT_BDCDATA-FVAL LEFT DELETING LEADING SPACE.

FORM BDC_FIELD USING FNAM FVAL.
*  IF FVAL <> NODATA.
  CLEAR GT_BDCDATA.
  GT_BDCDATA-FNAM FNAM.
  GT_BDCDATA-FVAL FVAL.
  SHIFT GT_BDCDATA-FVAL LEFT DELETING LEADING SPACE.
  APPEND GT_BDCDATA.
*  ENDIF.
ENDFORM.

 

 

猜你喜欢

转载自blog.csdn.net/z_x_xing_/article/details/90173006
今日推荐