zoukankan      html  css  js  c++  java
  • 独立需求

    *&---------------------------------------------------------------------*
    *& Transcation Code :  ZPPC014                                           *
    *& Program Name     :  ZPPC014                                           *
    *& Module Name      :  PP                                                     *
    *& Sub-Module       :                                                            *
    *& Author           :  linyu                                                    *
    *& Create Date      :  2012/04/18                                          *
    *& Responsible      :                                                             *
    *& Program Type     :  Other                                                 *
    *& Description      :  计划独立需求导入程序                       *
    *& SAP Release      :  7.2                                             *
    *&---------------------------------------------------------------------*
    *& REVISION LOG                                                        *
    *&                                                                     *
    *& LOG#       DATE       AUTHOR              DESCRIPTION               *
    *& ----       ----       ------              -----------               *
    *& 0001     12/04/18     zengql               Created                   *
    
    REPORT  ZPPC014.
    
    
    *存放导入的数据
    DATA: BEGIN OF GT_UPLOAD OCCURS 0,
    
            PBDNR LIKE AM60X-PBDNR,   "需求计划编号
            WERKS LIKE AM60X-WERKS,   "工厂         "
            VERSB LIKE AM60X-VERSB,   "版本号
            DATVE LIKE RM60X-DATVE,   "计划开始日期
            DATBE LIKE RM60X-DATBE,   "计划截至日期
            ENTLU LIKE RM60X-ENTLU,   "计划周期
            MATNR LIKE PBPT-MATNR,    "产品编码
            WERKS1 LIKE PBPT-WERKS,   "工厂
            VERSB1 LIKE PBPT-VERSB,   "版本号
            PLN01 LIKE RM60X-PLN01,   "第一个月
            PLN02 LIKE RM60X-PLN02,   "第二个月
            PLN03 LIKE RM60X-PLN03,   "第三个月
            PLN04 LIKE RM60X-PLN04,   "第四个月
    
          END OF GT_UPLOAD.
    
    *bapi data
    DATA: REQ_ITEM LIKE BAPISITEMR.
    DATA: REQ_DATA LIKE BAPISSHDIN OCCURS 0 WITH HEADER LINE.
    DATA: RETURN LIKE BAPIRETURN1 OCCURS 0 WITH HEADER LINE.
    DATA: MATERTEMP LIKE BAPISITEMR-MATERIAL.
    
    DATA: MATEMP LIKE BAPISITEMR-MATERIAL.  "物料编码
    DATA: BEGIN OF LOG OCCURS 0,
             INDEX TYPE I,  "序号
             MESSAGE LIKE RETURN-MESSAGE,  "消息文本
          END OF LOG.
    
    PARAMETERS:  F_FILE LIKE RLGRAP-FILENAME
                DEFAULT 'C:\DATA.XLS'
                MEMORY ID F_FILE VISIBLE LENGTH 30 OBLIGATORY.
    
    PARAMETERS: LOGFILE LIKE RLGRAP-FILENAME DEFAULT
      'c:\log.txt' OBLIGATORY.
    
    ***------------------------------------------------------------------------------------***
    ***    SELECTION-SCREEN ON VALUE-REQUEST
    ***------------------------------------------------------------------------------------***
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR F_FILE .
      PERFORM WS_FILENAME_GET USING F_FILE.                        " 打开本地文件的帮助
    
    
    START-OF-SELECTION.
    
      PERFORM UPLOAD_FILE .
      PERFORM UPDATE_DATA .
    
    *&---------------------------------------------------------------------*
    *&      Form  UPLOAD_FILE
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM UPLOAD_FILE.
    * UPLOAD FILE FROM TXT TO INT_MAT.
      DATA: BEGIN OF UP_EXCLE OCCURS 0.
              INCLUDE STRUCTURE  KCDE_CELLS.
      DATA: END OF UP_EXCLE.
    
      CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
        EXPORTING
          FILENAME                = F_FILE
          I_BEGIN_COL             = 1
          I_BEGIN_ROW             = 2
          I_END_COL               = 50
          I_END_ROW               = 65000
        TABLES
          INTERN                  = UP_EXCLE
        EXCEPTIONS
          INCONSISTENT_PARAMETERS = 1
          UPLOAD_OLE              = 2
          OTHERS                  = 3.
      CASE SY-SUBRC .
    
        WHEN '1' OR '2' OR '3'.
          MESSAGE I398(00) WITH  F_FILE.
        WHEN OTHERS.
          FORMAT COLOR COL_GROUP.
          WRITE : '上传成功!'.
    
      ENDCASE..
    
      FIELD-SYMBOLS: <F>.
      DATA:INDEX TYPE I.
      DATA: TYP.
    
    
      LOOP AT UP_EXCLE.
        INDEX = UP_EXCLE-COL.
        ASSIGN COMPONENT INDEX OF STRUCTURE GT_UPLOAD TO <F>.
        IF SY-SUBRC = 0.
          DESCRIBE FIELD <F> TYPE TYP.
          CASE TYP.
            WHEN 'C'.
              <F> = UP_EXCLE-VALUE.
              CONDENSE <F>.
            WHEN 'I'  "数字串
            OR 's'
            OR 'b'
            OR 'N'
            OR 'F'
            OR 'P'.
              CATCH SYSTEM-EXCEPTIONS  ARITHMETIC_ERRORS = 5
                             CONVERSION_ERRORS = 6
                             BCD_OVERFLOW  = 7
                             BCD_FIELD_OVERFLOW = 8
                             .
                <F> = UP_EXCLE-VALUE.
              ENDCATCH.
              IF SY-SUBRC <> 0.
                MESSAGE E000(SU) WITH '数据转化错误!'.
              ENDIF.
            WHEN OTHERS.
              <F> = UP_EXCLE-VALUE.
          ENDCASE.
        ENDIF.
    
        AT END OF ROW.
          IF GT_UPLOAD-PBDNR NE SPACE.
            APPEND GT_UPLOAD.
            CLEAR  GT_UPLOAD.
          ENDIF.
        ENDAT.
      ENDLOOP.
    
    ENDFORM.                    "UPLOAD_FILE
    
    *&---------------------------------------------------------------------*
    *&      Form  UPDATE_DATA
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM UPDATE_DATA .
      DATA: LV_INDEX TYPE I.
      DATA: LV_DATE TYPE SY-DATUM.
      DATA: LV_LAST_DAY TYPE SY-DATUM.   "月末最后一天
      DATA: LV_FIRST_DAY TYPE SY-DATUM.  "下月第一天
      DATA: LV_MATNR TYPE MATNR.
      DATA: LV_DISGR TYPE DISGR,
            LV_STRGR TYPE STRGR,
            LV_BEDVP TYPE BEDVP.
    
    
      LOOP AT GT_UPLOAD.
    
        CLEAR: LV_DATE,LV_LAST_DAY,LV_FIRST_DAY.
        LV_INDEX = LV_INDEX + 1.
    
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = GT_UPLOAD-MATNR
          IMPORTING
            OUTPUT = REQ_ITEM-MATERIAL.
    
    *    CONCATENATE '00000000000' GT_UPLOAD-MATNR INTO MATERTEMP.
    *    REQ_ITEM-MATERIAL = MATERTEMP.
        REQ_ITEM-PLANT = GT_UPLOAD-WERKS.
        SELECT SINGLE DISGR STRGR FROM MARC
          INTO (LV_DISGR,LV_STRGR)
          WHERE MATNR = REQ_ITEM-MATERIAL
          AND   WERKS = REQ_ITEM-PLANT.
        IF SY-SUBRC = 0.
    
          IF LV_STRGR IS INITIAL.
    
            SELECT SINGLE STRGR INTO LV_STRGR
              FROM T438M
              WHERE WERKS = REQ_ITEM-PLANT
                AND MTART = LV_DISGR.
           ENDIF.
    
          SELECT SINGLE BEDVP INTO LV_BEDVP
            FROM T461S
            WHERE STRA1 = LV_STRGR.
        ENDIF.
    
        IF LV_BEDVP IS INITIAL.
            LOG-INDEX = LV_INDEX.
             CONCATENATE '请维护物料' GT_UPLOAD-MATNR '的MRP组!' into  LOG-MESSAGE.
            APPEND LOG.
            continue.
         ELSE.
    
        ENDIF.
    *    req_item-REQU_TYPE = 'VSE'.
        REQ_ITEM-VERSION = GT_UPLOAD-VERSB.
        REQ_ITEM-VERS_ACTIV = 'X'.
        REQ_ITEM-REQ_NUMBER = GT_UPLOAD-PBDNR.
    
        LV_DATE = GT_UPLOAD-DATVE.
    
        REQ_DATA-DATE_TYPE = 3.
        REQ_DATA-REQ_DATE = LV_DATE.
        REQ_DATA-REQ_QTY = GT_UPLOAD-PLN01.
        APPEND REQ_DATA.
        CLEAR REQ_DATA.
    
        REQ_DATA-DATE_TYPE = 3.
        CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
          EXPORTING
            DAY_IN            = LV_DATE
          IMPORTING
            LAST_DAY_OF_MONTH = LV_LAST_DAY
          EXCEPTIONS
            DAY_IN_NO_DATE    = 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.
        LV_FIRST_DAY = LV_LAST_DAY + 1.
        REQ_DATA-REQ_DATE = LV_FIRST_DAY.
        REQ_DATA-REQ_QTY = GT_UPLOAD-PLN02.
        APPEND REQ_DATA.
        CLEAR REQ_DATA.
        REQ_DATA-DATE_TYPE = 3.
        CLEAR LV_LAST_DAY.
        CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
          EXPORTING
            DAY_IN            = LV_FIRST_DAY
          IMPORTING
            LAST_DAY_OF_MONTH = LV_LAST_DAY
          EXCEPTIONS
            DAY_IN_NO_DATE    = 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.
        LV_FIRST_DAY = LV_LAST_DAY + 1.
        REQ_DATA-REQ_DATE = LV_FIRST_DAY.
        REQ_DATA-REQ_QTY = GT_UPLOAD-PLN03.
        APPEND REQ_DATA.
        CLEAR REQ_DATA.
    
        SELECT SINGLE MATNR FROM  PBIM INTO LV_MATNR
               WHERE  MATNR       = REQ_ITEM-MATERIAL
               AND    WERKS       = GT_UPLOAD-WERKS
               AND    BEDAE       = LV_BEDVP
               AND    VERSB       = REQ_ITEM-VERSION
               AND    PBDNR       = REQ_ITEM-REQ_NUMBER.
        IF SY-SUBRC <> 0.
    
          CALL FUNCTION 'BAPI_REQUIREMENTS_CREATE'
            EXPORTING
              REQUIREMENTS_ITEM              = REQ_ITEM
    *           REQUIREMENT_PARAM              =
            IMPORTING
             MATERIAL                       = MATEMP
    *           PLANT                          =
    *           REQUIREMENTSTYPE               =
    *           VERSION                        =
    *           REQMTSPLANNUMBER               =
            TABLES
              REQUIREMENTS_SCHEDULE_IN       = REQ_DATA
    *           REQUIREMENTS_CHAR_IN           =
              RETURN                         = RETURN.
          IF NOT MATEMP IS INITIAL.
            WRITE:/(10) MATEMP COLOR 4,
                   (50) '创建成功'.
          ELSE.
            LOG-INDEX = LV_INDEX.
            LOG-MESSAGE = RETURN-MESSAGE.
            APPEND LOG.
          ENDIF.
        ELSE.
    *      CALL FUNCTION 'BAPI_REQUIREMENTS_CHANGE'
    *        EXPORTING
    *          MATERIAL                       =
    *          PLANT                          =
    *          REQUIREMENTSTYPE               =
    *          VERSION                        =
    *          REQMTSPLANNUMBER               =
    *          VERS_ACTIV                     =
    **         REQUIREMENT_PARAM              =
    **         MRP_AREA                       =
    **         DO_COMMIT                      = 'X'
    **         UPDATE_MODE                    = 'X'
    **         DELETE_OLD                     = 'X'
    **         NO_WITHDR                      = ' '
    **         MATERIAL_EVG                   =
    **       IMPORTING
    **         REQUIREMENT_ITEM_OUT           =
    *        TABLES
    **         REQUIREMENTS_SCHEDULE_IN       =
    **         REQUIREMENTS_CHAR_IN           =
    *          RETURN                         =
    *                .
    
          CALL FUNCTION 'BAPI_REQUIREMENTS_CHANGE'
            EXPORTING
              MATERIAL             = REQ_ITEM-MATERIAL
              PLANT                = GT_UPLOAD-WERKS
              REQUIREMENTSTYPE     = LV_BEDVP
              VERSION              = REQ_ITEM-VERSION
              REQMTSPLANNUMBER     = REQ_ITEM-REQ_NUMBER
              VERS_ACTIV           = 'X'
              DELETE_OLD           = ''
            TABLES
              REQUIREMENTS_SCHEDULE_IN       = REQ_DATA
    *         REQUIREMENTS_CHAR_IN           =
              RETURN                         = RETURN
              .
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    *   EXPORTING
    *     WAIT          =
    *   IMPORTING
    *     RETURN        =
                .
    
          IF SY-SUBRC = 0.
            WRITE:/(10) REQ_ITEM-MATERIAL COLOR 4,
                   (50) '更改成功'.
          ELSE.
            LOG-INDEX = LV_INDEX.
            LOG-MESSAGE = RETURN-MESSAGE.
            APPEND LOG.
          ENDIF.
        ENDIF.
        CLEAR MATEMP.
        REFRESH REQ_DATA.
        CLEAR MATERTEMP.
        CLEAR REQ_ITEM.
      ENDLOOP.
      CLEAR: LV_INDEX,LV_DATE,LV_LAST_DAY,LV_FIRST_DAY.
      CALL FUNCTION 'WS_DOWNLOAD'
        EXPORTING
          FILENAME                = LOGFILE
          FILETYPE                = 'DAT'
        TABLES
          DATA_TAB                = LOG
        EXCEPTIONS
          INVALID_FILESIZE        = 1
          INVALID_TABLE_WIDTH     = 2
          INVALID_TYPE            = 3
          NO_BATCH                = 4
          UNKNOWN_ERROR           = 5
          GUI_REFUSE_FILETRANSFER = 6
          CUSTOMER_ERROR          = 7
          OTHERS                  = 8.
      IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    
      IF LOG[] IS NOT INITIAL.
        WRITE: /2 '文件行号',
                   6 '消息'.
    *
        LOOP AT LOG.
          WRITE: /2 LOG-INDEX,
                    6 LOG-MESSAGE.
        ENDLOOP.
    
      ENDIF.
      WRITE : '批输入结束!导入详情请检查LOG文件!'.
    
    ENDFORM.                    "UPDATE_DATA
    *&---------------------------------------------------------------------*
    *&      Form  WS_FILENAME_GET
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->P_F_FILE  text
    *----------------------------------------------------------------------*
    FORM WS_FILENAME_GET  USING    P_F_FILE LIKE RLGRAP-FILENAME.
    
      CALL FUNCTION 'WS_FILENAME_GET'
        EXPORTING
          DEF_FILENAME     = P_F_FILE
          DEF_PATH         = ' '
          MASK             = ',Excel File,*.xls.'
          MODE             = 'O'
          TITLE            = '选择文件'
        IMPORTING
          FILENAME         = P_F_FILE
        EXCEPTIONS
          INV_WINSYS       = 01  " rc = subrc
          NO_BATCH         = 02
          SELECTION_CANCEL = 03
          SELECTION_ERROR  = 04.
    
      IF SY-SUBRC <> 0 AND SY-SUBRC <> 3.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    
    ENDFORM.                    " WS_FILENAME_GET
  • 相关阅读:
    swf上传地址
    Nape 获取碰撞点加特效
    vbs打包exe工具
    Air打包exe
    JDK12的安装搭建
    Dubble 入门
    FastDFS 集群
    PAT Advanced 1077 Kuchiguse (20 分)
    高可用4层lvs——keepalived
    PAT Advanced 1035 Password (20 分)
  • 原文地址:https://www.cnblogs.com/huangjianisgood/p/2717460.html
Copyright © 2011-2022 走看看