博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

BOM导入程序

Posted on 2007-09-29 10:14  wiele  阅读(649)  评论(0编辑  收藏  举报
同时将BOM的导入程序也贴上。

*&---------------------------------------------------------------------*
*& 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