技术开发 频道

ABAP实例:BOM导入程序

【IT168 技术文章】

    *&---------------------------------------------------------------------*
    
*& Report  ZPP001
    
*&
    
*&---------------------------------------------------------------------*
    
*&
    
*&
    
*&---------------------------------------------------------------------*

    REPORT  ZPP001 NO STANDARD PAGE HEADING.
    
*-----------------------------------------------------------------------
    
* Identification
    
*   Modul-Name      : ZPPPR001
    
*   Author          : Samuel Liu Atos Origin    Modified by:wiele
    
*   Creation date   : 11.09.2006                Modified on:27.09.2007
    
*   Owner           : PP module
    
*   Dev. under SAP  : ECC6.0
    
*   Description     : Import BOM master Data
    
*-----------------------------------------------------------------------
    
************************************************************************
    
*Data
    
************************************************************************
    TABLES:ZPP_BOM.
    DATA: file type string,
               result type string.
    DATA  count TYPE I.
    DATA  Tcount(
10) TYPE C.
    
************************************************************************
    
*定义BOM结构
    
************************************************************************
    TYPES: BEGIN OF TYPE1,

           FACTORY(
4) TYPE C,                     " 工厂
           PNUMBER(18) TYPE C,                    "父阶物料编码
           VALID_FROM_DATE(8) TYPE C,             "有效日期
           PQUANTITY(13) TYPE C,                  "父阶物料数量
           PUNIT(3) TYPE C,                       "父阶物料单位

           SEQUENGE(
4) TYPE C,                    "BOM项目序号
           ITEM_CAT(1) TYPE C,                    "项目类别(物料单)
           SNUMBER(18) TYPE C,                    "子阶物料编码
           QUANTITY(13) TYPE C,                   "子阶物料数量
           UNIT(3) TYPE C,                        "子阶物料单位
    *      FIXED(1) TYPE C,                       "固定数量
           COMP_SCRAP(7) TYPE C ,                 "部件废品百分比

           REMARK1(
40)  TYPE C,
           REMARK2(
40) TYPE C,

           COST_REL(
1) TYPE C,                     "成本核算标志
           MEMO  TYPE string,                      "子项备注
           YMATNR(40) TYPE C,
           TABIX(
7) TYPE C,
           SPPROCTYPE(
2) type c,                   "子项目的特殊采购类型
           ISS_ST_LOC(4)  type c,                  "子项目生产订单的发货地点
          END OF TYPE1.

    DATA: STRU TYPE TYPE1,
          ITAB TYPE TABLE OF TYPE1.

    DATA: TSTRING TYPE STRING.

    DATA: BEGIN OF I_OUT OCCURS
0,
             LINE(
600),
          END OF I_OUT.

    DATA:BEGIN OF RETURN OCCURS
10.
            INCLUDE STRUCTURE  BAPIRET2.
    DATA: END OF RETURN.

    DATA:BEGIN OF ITAB1 OCCURS
10.
            INCLUDE STRUCTURE  ZPP_BOM.
    DATA: END OF ITAB1.
    DATA:BEGIN OF ITAB2 OCCURS
10.
            INCLUDE STRUCTURE  ZPP_BOM.
    DATA: END OF ITAB2.
    
************************************************************************
    
* Selection Screen
    
************************************************************************
    SELECTION
-SCREEN BEGIN OF BLOCK BLOCK2 WITH FRAME TITLE TEXT-B02.

    PARAMETER P_FILE LIKE KONSPARAM
-PCU40_FILE OBLIGATORY.

    SELECTION
-SCREEN END OF BLOCK BLOCK2.
    
************************************************************************
    
* At Selection Screen
    
************************************************************************
    AT SELECTION
-SCREEN ON VALUE-REQUEST FOR P_FILE.

    
*获得导入数据的文本名
      PERFORM GET_FILE.
    
************************************************************************
    
* Start of Selection
    
************************************************************************
    start
-of-selection.
    
************************************************************************
    
* 获取数据从TXT文件
    
************************************************************************
      PERFORM GET_DATA USING ITAB.      
"Upload data into itab
      DATA: DATE TYPE SY-DATUM.

      CLEAR I_OUT.
      REFRESH I_OUT.
    
************************************************************************
    
*准备传输
    
************************************************************************
      TSTRING
= '准备传输BOM'.
      perform record_log using TString.
    
************************************************************************
    
*检查接收的数据
    
************************************************************************
      perform check_data tables itab
                          using result.
    
************************************************************************
    
*导入BOM的数##
    
************************************************************************
      
if result = 'true'.
        perform bom_transport tables itab1.
      endif.

    
************************************************************************
    
*传输完毕
    
************************************************************************
      TString
= '传输BOM完毕'.
      perform record_log using TString.
    
************************************************************************
    
*打印LOG记录
    
************************************************************************
      perform print_log.
    
************************************************************************
    
*传出数据至文##
    
************************************************************************
      perform export_txt.

    
*&---------------------------------------------------------------------*
    
*&      Form  record_log
    
*&---------------------------------------------------------------------*
    
*       text
    
*----------------------------------------------------------------------*
    
*      -->P_TSTRING  text
    
*----------------------------------------------------------------------*
    FORM record_log  USING P_TSTRING TYPE STRING.

    
*log记录,生成文##

    
*格式化时##
      DATA: TIME(
10) TYPE C.
      CALL FUNCTION
'TIME_CHAR_CONVERSION'
        EXPORTING
          INPUT  
= SY-UZEIT
        IMPORTING
          TIMESTR
= TIME.

    
*增加文本内容
      CONCATENATE SY
-DATUM TIME P_TSTRING INTO I_OUT-LINE SEPARATED BY
      
'    '.
      APPEND I_OUT.

    ENDFORM.                    
" record_log
    *&---------------------------------------------------------------------*
    
*&      Form  check_data
    
*&---------------------------------------------------------------------*
    
*       text
    
*----------------------------------------------------------------------*
    
*      -->P_ITAB  text
    
*----------------------------------------------------------------------*
    FORM check_data  tables  P_ITAB STRUCTURE STRU
                     using  p_result.

    
*检查BOM数据##
      TString
= '检查BOM数据表'.
      perform record_log using TString.

    
*计算BOM里面的数据条##
      perform calculate tables p_itab
                        using tcount.

    
*判断记录条数
      
if tcount = 0 .

    
*记录数据条数

        TString
= 'BOM数据表记录数为0'.
        perform record_log using TString.
        p_result
= 'false'.

      
else.

    
*记录数据条数

        TString
= 'BOM数据表记录数为'.
        CONCATENATE TString Tcount
'' into TString.

        perform record_log using TString.

        TString
= '开始读取数据表'.
        perform record_log using TString.
        p_result
= 'true'.

      endif.

    ENDFORM.                    
" check_data
    *&---------------------------------------------------------------------*
    
*&      Form  bom_transport
    
*&---------------------------------------------------------------------*
    
*       text
    
*----------------------------------------------------------------------*
    
*      -->P_ITAB  text
    
*----------------------------------------------------------------------*
    FORM bom_transport  TABLES   P_ITAB STRUCTURE ZPP_BOM.
    
*首先删除.
      CALL FUNCTION
'ZFM_BOM_CREATE'
        EXPORTING
          ZFLAG          
= 'Y'
        TABLES
          BOM            
= P_ITAB
          RETURNS        
= RETURN
        EXCEPTIONS
          CREATE_BOM_FAIL
= 1.


        APPEND LINES OF P_ITAB TO ITAB2.

        CALL FUNCTION
'ZFM_BOM_CREATE'
          EXPORTING
            ZFLAG          
= 'X'
    
*        VERSION         = TMP-ZNUM
    
*        BOMTXT          = TMP-ZBOMTXT
          TABLES
            BOM            
= ITAB2
            RETURNS        
= RETURN
          EXCEPTIONS
            CREATE_BOM_FAIL
= 1.


    
*输出创建BOM的消##
        LOOP AT RETURN.

          TString
= RETURN-MESSAGE.
          perform record_log using TString.

        ENDLOOP.
    
*ENDIF.
    
*  ENDLOOP.

    ENDFORM.                    
" bom_transport
    *&---------------------------------------------------------------------*
    
*&      Form  calculate
    
*&---------------------------------------------------------------------*
    
*       text
    
*----------------------------------------------------------------------*
    
*      -->P_P_ITAB  text
    
*      -->P_COUNT  text
    
*----------------------------------------------------------------------*
    FORM calculate  TABLES   P_P_ITAB STRUCTURE STRU
                     USING    P_COUNT.

      CLEAR ITAB1.
      REFRESH ITAB1.

      DESCRIBE TABLE P_P_ITAB LINES P_COUNT.
      CONDENSE P_COUNT.

      IF  P_COUNT NE
0.
        LOOP AT P_P_ITAB.

          ITAB1
-FACTORY         = P_P_ITAB-FACTORY.
          ITAB1
-PNUMBER         = P_P_ITAB-PNUMBER.                   "父阶物料编码
          ITAB1-VALID_FROM_DATE = P_P_ITAB-VALID_FROM_DATE.           "有效日期
          ITAB1-SNUMBER         = P_P_ITAB-SNUMBER.                   "子阶物料编码
          ITAB1-PQUANTITY       = P_P_ITAB-PQUANTITY.                 "父阶物料数量
          ITAB1-PUNIT           = P_P_ITAB-PUNIT.                     "父阶物料单位

          ITAB1
-SEQUENGE        = P_P_ITAB-SEQUENGE.                  "BOM项目##
          ITAB1-ITEM_CAT        = P_P_ITAB-ITEM_CAT.                  "项目类别
          ITAB1-QUANTITY        = P_P_ITAB-QUANTITY.                  "子阶物料数量
          ITAB1-UNIT            = P_P_ITAB-UNIT.                      "子阶物料单位
          ITAB1-FIXED           = ''.                                 "固定数量
          ITAB1-COMP_SCRAP      = P_P_ITAB-COMP_SCRAP.                "部件废品百分##
          ITAB1-REMARK1         = P_P_ITAB-REMARK1.
          ITAB1
-REMARK2         = P_P_ITAB-REMARK2.
          ITAB1
-YMATNR          = P_P_ITAB-YMATNR.
          ITAB1
-MEMO            = P_P_ITAB-MEMO.
          ITAB1
-TABIX           = P_P_ITAB-TABIX.
          ITAB1
-COST_REL        = P_P_ITAB-COST_REL.                  "成本核算标志
          ITAB1-SPPROCTYPE      = P_P_ITAB-SPPROCTYPE.                "BOM 项目的特殊采购类##
          ITAB1-ISS_ST_LOC      = P_P_ITAB-ISS_ST_LOC.                "生产订单的发货地##
          APPEND ITAB1.

        ENDLOOP.
      ENDIF.

    ENDFORM.                    
" calculate
    *&---------------------------------------------------------------------*
    
*&      Form  GET_FILE
    
*&---------------------------------------------------------------------*
    
*       text
    
*----------------------------------------------------------------------*
    
*  -->  p1        text
    
*  <--  p2        text
    
*----------------------------------------------------------------------*
    FORM GET_FILE.
      CALL FUNCTION
'WS_FILENAME_GET'             "Get file name
            EXPORTING
    
*         DEF_FILENAME     = ' '
    
*         DEF_PATH         = ' '
                MASK            
= ',*.* ,*.*.'
                MODE            
= '0'
                TITLE            
= 'Get File name'
           IMPORTING
                FILENAME        
= P_FILE
    
*         RC               =
           EXCEPTIONS
                INV_WINSYS      
= 1
                NO_BATCH        
= 2
                SELECTION_CANCEL
= 3
                SELECTION_ERROR  
= 4
                OTHERS          
= 5.
      IF SY
-SUBRC <> 0.
    
*      MESSAGE E016 WITH P_PATH.
      ENDIF.

    ENDFORM.                    
" GET_FILE
    *&---------------------------------------------------------------------*
    
*&      Form  GET_DATA
    
*&---------------------------------------------------------------------*
    
*       text
    
*----------------------------------------------------------------------*
    
*      -->P_ITAB  text                                                 *
    
*----------------------------------------------------------------------*
    FORM GET_DATA USING    P_ITAB.

      CALL FUNCTION
'UPLOAD'
           EXPORTING
    
*            CODEPAGE                = 'IBM'
                FILENAME                
= P_FILE
                FILETYPE                
= 'DAT'
    
*            ITEM                    = ' '
    
*            FILEMASK_MASK           = ' '
    
*            FILEMASK_TEXT           = ' '
    
*            FILETYPE_NO_CHANGE      = ' '
    
*            FILEMASK_ALL            = ' '
    
*            FILETYPE_NO_SHOW        = ' '
    
*            LINE_EXIT               = ' '
    
*            USER_FORM               = ' '
    
*            USER_PROG               = ' '
    
*            SILENT                  = 'S'
    
*       IMPORTING
    
*            FILESIZE                =
    
*            CANCEL                  =
    
*            ACT_FILENAME            =
    
*            ACT_FILETYPE            =
    TABLES
                DATA_TAB                
= ITAB
           EXCEPTIONS
                CONVERSION_ERROR        
= 1
                INVALID_TABLE_WIDTH    
= 2
                INVALID_TYPE            
= 3
                NO_BATCH                
= 4
                UNKNOWN_ERROR          
= 5
                GUI_REFUSE_FILETRANSFER
= 6
                OTHERS                  
= 7.

    ENDFORM.                    
" GET_DATA
    *&---------------------------------------------------------------------*
    
*&      Form  print_log
    
*&---------------------------------------------------------------------*
    
*       text
    
*----------------------------------------------------------------------*
    
*  -->  p1        text
    
*  <--  p2        text
    
*----------------------------------------------------------------------*
    FORM print_log .
    
*打印记录数据
      LOOP AT I_OUT.
        write :
/ i_out.
      ENDLOOP.
    ENDFORM.                    
" print_log
    *&---------------------------------------------------------------------*
    
*&      Form  export_txt
    
*&---------------------------------------------------------------------*
    
*       text
    
*----------------------------------------------------------------------*
    
*  -->  p1        text
    
*  <--  p2        text
    
*----------------------------------------------------------------------*
    FORM export_txt .

    
*形成文件名称
      CONCATENATE
'C:\log' SY-DATUM '.TXT' INTO FILE.

    
*判断文件是否存在
      call method cl_gui_frontend_services
=>file_exist
        EXPORTING
          file  
= file
        RECEIVING
          result
= result.

      
if result = 'X'.
    
*文件已存在,采用插入补充数据的方##
        CALL FUNCTION
'GUI_DOWNLOAD'
          EXPORTING
            FILENAME            
= FILE
            FILETYPE            
= 'ASC'
            APPEND              
= 'X'
          TABLES
            DATA_TAB            
= I_OUT
          EXCEPTIONS
            FILE_OPEN_ERROR    
= 1
            FILE_WRITE_ERROR    
= 2
            INVALID_FILESIZE    
= 3
            INVALID_TABLE_WIDTH
= 4
            INVALID_TYPE        
= 5
            NO_BATCH            
= 6
            UNKNOWN_ERROR      
= 7
            OTHERS              
= 8.

        IF SY
-SUBRC EQ 0.

        ENDIF.
      
else.
    
*文件不存在,采用直接创建文件
        CALL FUNCTION
'GUI_DOWNLOAD'
          EXPORTING
            FILENAME            
= FILE
            FILETYPE            
= 'ASC'
          TABLES
            DATA_TAB            
= I_OUT
          EXCEPTIONS
            FILE_OPEN_ERROR    
= 1
            FILE_WRITE_ERROR    
= 2
            INVALID_FILESIZE    
= 3
            INVALID_TABLE_WIDTH
= 4
            INVALID_TYPE        
= 5
            NO_BATCH            
= 6
            UNKNOWN_ERROR      
= 7
            OTHERS              
= 8.

        IF SY
-SUBRC EQ 0.

        ENDIF.

      endif.

    ENDFORM.                    
" export_txt
1
相关文章