码迷,mamicode.com
首页 > 其他好文 > 详细

ZTEST004FORM

时间:2018-05-06 22:19:31      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:exce   splay   write   NPU   header   div   flush   illegal   inpu   

*&---------------------------------------------------------------------*
*&  Include           ZTEST004FORM
*&---------------------------------------------------------------------*

*--------------------------------------------------------------------*
*      Form  GET_DATA
*--------------------------------------------------------------------*
FORM GET_DATA .

  DATA: LO_CSV        TYPE REF TO CL_RSDA_CSV_CONVERTER,
        LV_CPCODEPAGE TYPE CPCODEPAGE,
        LV_CSV        TYPE STRING.
  DATA: LV_PATH TYPE STRING,
        LV_DATA TYPE STRING.

  CALL METHOD CL_RSDA_CSV_CONVERTER=>CREATE
*   EXPORTING
*     i_delimiter = C_DEFAULT_DELIMITER
*     i_separator = C_DEFAULT_SEPARATOR
    RECEIVING
      R_R_CONV    = LO_CSV
      .

  IF P_CKUBUN = CNS_KEY_L.

    LV_PATH = P_LFILE.
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
      EXPORTING
        FILENAME                = LV_PATH
        FILETYPE                = ASC
        HAS_FIELD_SEPARATOR     = ABAP_TRUE
      CHANGING
        DATA_TAB                = IT_TEMP
      EXCEPTIONS
        FILE_OPEN_ERROR         = 1
        FILE_READ_ERROR         = 2
        NO_BATCH                = 3
        GUI_REFUSE_FILETRANSFER = 4
        INVALID_TYPE            = 5
        NO_AUTHORITY            = 6
        UNKNOWN_ERROR           = 7
        BAD_DATA_FORMAT         = 8
        HEADER_NOT_ALLOWED      = 9
        SEPARATOR_NOT_ALLOWED   = 10
        HEADER_TOO_LONG         = 11
        UNKNOWN_DP_ERROR        = 12
        ACCESS_DENIED           = 13
        DP_OUT_OF_MEMORY        = 14
        DISK_FULL               = 15
        DP_TIMEOUT              = 16
        NOT_SUPPORTED_BY_GUI    = 17
        ERROR_NO_GUI            = 18
        OTHERS                  = 19.

    IF SY-SUBRC <> 0.
      LEAVE LIST-PROCESSING.
    ENDIF.

    LOOP AT IT_TEMP INTO WA_TEMP.
      LV_DATA = WA_TEMP-TEXTLINE.
      CALL METHOD LO_CSV->CSV_TO_STRUCTURE
        EXPORTING
          I_DATA   = LV_DATA
        IMPORTING
          E_S_DATA = WA_WULIAO.
      APPEND WA_WULIAO TO IT_WULIAO.

    ENDLOOP.

  ELSE.

    OPEN DATASET P_SFILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.
    IF SY-SUBRC = 0.
      DO.
        READ DATASET P_SFILE INTO LV_CSV.
        IF SY-SUBRC = 0.

          CLEAR WA_WULIAO.
          CALL METHOD LO_CSV->CSV_TO_STRUCTURE
            EXPORTING
              I_DATA   = LV_CSV
            IMPORTING
              E_S_DATA = WA_WULIAO.
          APPEND WA_WULIAO TO IT_WULIAO.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
      CLOSE DATASET P_SFILE.
    ELSE.
      MESSAGE Cannot open file! TYPE E .
    ENDIF.

  ENDIF.

ENDFORM.                    " GET_DATA
*---------------------------------------------------------------------*
*      Form  APPEND_BDCDATA
*---------------------------------------------------------------------*
FORM APPEND_BDCDATA .
  DATA LV_MESSAGE TYPE C LENGTH 200.

*  DATA LV_GROUP   TYPE APQI-GROUPID VALUE ‘ZTEST004_BDC_GROUP‘.
*  CALL FUNCTION ‘BDC_OPEN_GROUP‘
*   EXPORTING
**     CLIENT                    = SY-MANDT
**     DEST                      = FILLER8
*     GROUP                     = LV_GROUP
**     HOLDDATE                  = FILLER8
*     KEEP                      = ‘X‘
*     USER                      = SY-UNAME
**     RECORD                    = FILLER1
**     PROG                      = SY-CPROG
**     DCPFM                     = ‘%‘
**     DATFM                     = ‘%‘
**   IMPORTING
**     QID                       =
*   EXCEPTIONS
*     CLIENT_INVALID            = 1
*     DESTINATION_INVALID       = 2
*     GROUP_INVALID             = 3
*     GROUP_IS_LOCKED           = 4
*     HOLDDATE_INVALID          = 5
*     INTERNAL_ERROR            = 6
*     QUEUE_ERROR               = 7
*     RUNNING                   = 8
*     SYSTEM_LOCK_ERROR         = 9
*     USER_INVALID              = 10
*     OTHERS                    = 11
*            .
*  IF SY-SUBRC <> 0.
*    EXIT.
*  ENDIF.

  LOOP AT IT_WULIAO INTO WA_WULIAO .
    CLEAR: BDCDATA, BDCDATA[],
           MESSTAB, MESSTAB[].
    PERFORM BDC_DYNPRO USING SAPLMGMM 0060.
    PERFORM BDC_FIELD USING BDC_CURSOR RMMG1-MATNR.
    PERFORM BDC_FIELD USING BDC_OKCODE =ENTR.
    PERFORM BDC_FIELD USING RMMG1-MATNR WA_WULIAO-MATNR.

    PERFORM BDC_DYNPRO USING SAPLMGMM 0070.
    PERFORM BDC_FIELD USING BDC_CURSOR MSICHTAUSW-DYTXT(01).
    PERFORM BDC_FIELD USING BDC_OKCODE =ENTR.
    PERFORM BDC_FIELD USING MSICHTAUSW-KZSEL(01)R X.

    PERFORM BDC_DYNPRO USING SAPLMGMM 4004.
    PERFORM BDC_FIELD USING BDC_OKCODE =BU.
    PERFORM BDC_FIELD USING MAKT-MAKTX WA_WULIAO-MAKTX.
    PERFORM BDC_FIELD USING BDC_CURSOR MARA-GEWEI.
    PERFORM BDC_FIELD USING MARA-BRGEW WA_WULIAO-BRGEW.
    PERFORM BDC_FIELD USING MARA-GEWEI WA_WULIAO-GEWET.
    PERFORM BDC_FIELD USING MARA-NTGEW WA_WULIAO-NTGEW.

    CALL TRANSACTION MM02 USING BDCDATA
                            UPDATE P_UPDATE   "更新模式 S同步,A异步
                            MODE   P_MODE     "显示模式  A前台, N后台,E只显示错误
                            MESSAGES INTO MESSTAB.

    LOOP AT  MESSTAB .
      PERFORM MSG_SET USING MESSTAB-MSGID
                              MESSTAB-MSGTYP
                              MESSTAB-MSGNR
                              MESSTAB-MSGV1
                              MESSTAB-MSGV2
                              MESSTAB-MSGV3
                              MESSTAB-MSGV4
                              .
    ENDLOOP.

*    CALL FUNCTION ‘BDC_INSERT‘
*     EXPORTING
*       TCODE                  = ‘MM02‘
**       POST_LOCAL             = NOVBLOCAL
**       PRINTING               = NOPRINT
**       SIMUBATCH              = ‘ ‘
**       CTUPARAMS              = ‘ ‘
*      TABLES
*        DYNPROTAB              = BDCDATA
*     EXCEPTIONS
*       INTERNAL_ERROR         = 1
*       NOT_OPEN               = 2
*       QUEUE_ERROR            = 3
*       TCODE_INVALID          = 4
*       PRINTING_INVALID       = 5
*       POSTING_INVALID        = 6
*       OTHERS                 = 7
*              .
*    IF SY-SUBRC <> 0.
*      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*    ENDIF.


*    READ TABLE MESSTAB WITH KEY MSGID = ‘M3‘
*                                             MSGNR = ‘801‘.
*    IF SY-SUBRC = 0.
*      WRITE:/ ‘物料‘, WA_WULIAO-MATNR ,‘修改成功!‘.
*    ELSE.
*
*      READ TABLE MESSTAB INTO MESSTAB WITH KEY MSGID = ‘M3‘
*                                               MSGNR = ‘810‘.
*      IF SY-SUBRC = 0.
*        WRITE:/ ‘物料‘, WA_WULIAO-MATNR ,‘修改成功!‘.
*      ELSE.
*
*        LOOP AT  MESSTAB WHERE MSGTYP = ‘E‘ .
*          CALL FUNCTION ‘MESSAGE_TEXT_BUILD‘
*            EXPORTING
*              MSGID               = MESSTAB-MSGID
*              MSGNR               = MESSTAB-MSGNR
*              MSGV1               = MESSTAB-MSGV1
*              MSGV2               = MESSTAB-MSGV2
*              MSGV3               = MESSTAB-MSGV3
*              MSGV4               = MESSTAB-MSGV4
*            IMPORTING
*              MESSAGE_TEXT_OUTPUT = LV_MESSAGE.
*          WRITE:/ ‘物料修改失败原因:‘,
*                  LV_MESSAGE.
*
*        ENDLOOP.
*      ENDIF.
*
*    ENDIF.

  ENDLOOP.
  IF IT_LOG IS NOT INITIAL.
    PERFORM LOG_WRITE.
  ENDIF.

*  CALL FUNCTION ‘BDC_CLOSE_GROUP‘
*    EXCEPTIONS
*      NOT_OPEN    = 1
*      QUEUE_ERROR = 2
*      OTHERS      = 3.
*  IF SY-SUBRC <> 0.
*    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*  ENDIF.
*
*  SUBMIT RSBDCSUB WITH MAPPE EQ LV_GROUP
*               WITH VON EQ SY-DATUM
*               WITH BIS EQ SY-DATUM
*               WITH FEHLER EQ ‘.‘
*               EXPORTING LIST TO MEMORY
*               AND RETURN.
*
*  WAIT UP TO 10 SECONDS .
ENDFORM.                    " APPEND_BDCDATA
*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = X.
  APPEND BDCDATA.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
  CLEAR BDCDATA.
  BDCDATA-FNAM = FNAM.
  BDCDATA-FVAL = FVAL.
  APPEND BDCDATA.
ENDFORM.                    "BDC_FIELD
*---------------------------------------------------------------------*
*      Form  GET_FILENAME
*---------------------------------------------------------------------*

FORM GET_FILENAME .

  DATA: LIT_FILE_NAMES TYPE FILETABLE,
        LWA_FILE_NAME  LIKE LINE OF LIT_FILE_NAMES,
        LV_COUNT       TYPE I.

  IF P_CKUBUN = CNS_KEY_L.
*   ファイルを開くダイアログを表示FM
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
      EXPORTING
        WINDOW_TITLE            = ファイル選択                "ファイルを開くダイアログの表題
        FILE_FILTER             = Excel Files (*.CSV)|*.CSV|Text File(*.txt)|*.txt   "ファイル拡張フィルタストリング
        INITIAL_DIRECTORY       = C:                          "第一ディレクトリ
        MULTISELECTION          = SPACE                         "複数選択可能 (X複数可能)
      CHANGING
        FILE_TABLE              = LIT_FILE_NAMES                "選択したファイルを維持するテーブル
        RC                      = LV_COUNT                      "打开文件的数量 (ファイル数かエラーの場合は -1)
      EXCEPTIONS
        FILE_OPEN_DIALOG_FAILED = 1
        CNTL_ERROR              = 2
        ERROR_NO_GUI            = 3
        NOT_SUPPORTED_BY_GUI    = 4
        OTHERS                  = 5.

    READ TABLE LIT_FILE_NAMES INTO LWA_FILE_NAME INDEX 1.
    IF SY-SUBRC = 0.
      P_LFILE = LWA_FILE_NAME-FILENAME.
    ELSE.
      MESSAGE ファイルを選択してください TYPE E.
      EXIT.
    ENDIF.
  ELSE.
    CONCATENATE P_SFILE CSV_TEST.CSV INTO P_SFILE.
  ENDIF.
ENDFORM.                    " F4_GET_FILENAME
*---------------------------------------------------------------------*
*      Form  SELECTION_SCREEN_PAI.
*---------------------------------------------------------------------*
FORM  SELECTION_SCREEN_PAI.

  IF SSCRFIELDS-UCOMM = FC01.
    PERFORM FILE_DOWNLOAD.
  ENDIF.

ENDFORM.                    "SELECTION_SCREEN_PAI
*---------------------------------------------------------------------*
*      Form  FILE_DOWNLOAD.
*---------------------------------------------------------------------*
FORM FILE_DOWNLOAD.

  DATA LV_FILE TYPE STRING.
  REFRESH IT_WULIAOTMP.
  APPEND  IT_WULIAOTMP.


* 1.获取文件路径
  CALL FUNCTION WS_FILENAME_GET
   EXPORTING
*    DEF_FILENAME           = ‘ ‘
*    DEF_PATH               = ‘ ‘
     MASK                   = ,EXCEL.xls,*.xls.
     MODE                   = O" O保存,S打开
     TITLE                  = 选择保存文件路径"窗口的显示标题
   IMPORTING
     FILENAME               = LV_FILE
*    RC                     =
   EXCEPTIONS
     INV_WINSYS             = 1
     NO_BATCH               = 2
     SELECTION_CANCEL       = 3
     SELECTION_ERROR        = 4
     OTHERS                 = 5
            .
  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.

  CHECK LV_FILE IS NOT INITIAL.
* 2. 下载文件保存到指定路径文件中
  CHECK LV_FILE IS NOT INITIAL.
  CALL FUNCTION GUI_DOWNLOAD
    EXPORTING
*     BIN_FILESIZE                    =
      FILENAME                        = LV_FILE
*     FILETYPE                        = ‘ASC‘
*     APPEND                          = ‘X‘
*     WRITE_FIELD_SEPARATOR           = ‘X‘
*     HEADER                          = ‘00‘
*     TRUNC_TRAILING_BLANKS           = ‘ ‘
*     WRITE_LF                        = ‘X‘
*     COL_SELECT                      = ‘ ‘
*     COL_SELECT_MASK                 = ‘ ‘
*     DAT_MODE                        = ‘ ‘
*     CONFIRM_OVERWRITE               = ‘ ‘
*     NO_AUTH_CHECK                   = ‘ ‘
*     CODEPAGE                        = ‘ ‘
*     IGNORE_CERR                     = ABAP_TRUE
*     REPLACEMENT                     = ‘#‘
*     WRITE_BOM                       = ‘ ‘
*     TRUNC_TRAILING_BLANKS_EOL       = ‘X‘
*     WK1_N_FORMAT                    = ‘ ‘
*     WK1_N_SIZE                      = ‘ ‘
*     WK1_T_FORMAT                    = ‘ ‘
*     WK1_T_SIZE                      = ‘ ‘
*   IMPORTING
*     FILELENGTH                      =
    TABLES
      DATA_TAB                        = IT_WULIAO
*     FIELDNAMES                      =
   EXCEPTIONS
     FILE_WRITE_ERROR                = 1
     NO_BATCH                        = 2
     GUI_REFUSE_FILETRANSFER         = 3
     INVALID_TYPE                    = 4
     NO_AUTHORITY                    = 5
     UNKNOWN_ERROR                   = 6
     HEADER_NOT_ALLOWED              = 7
     SEPARATOR_NOT_ALLOWED           = 8
     FILESIZE_NOT_ALLOWED            = 9
     HEADER_TOO_LONG                 = 10
     DP_ERROR_CREATE                 = 11
     DP_ERROR_SEND                   = 12
     DP_ERROR_WRITE                  = 13
     UNKNOWN_DP_ERROR                = 14
     ACCESS_DENIED                   = 15
     DP_OUT_OF_MEMORY                = 16
     DISK_FULL                       = 17
     DP_TIMEOUT                      = 18
     FILE_NOT_FOUND                  = 19
     DATAPROVIDER_EXCEPTION          = 20
     CONTROL_FLUSH_ERROR             = 21
     OTHERS                          = 22
            .
  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.                    "FILE_DOWNLOAD
*&---------------------------------------------------------------------*
*&      Form  fill_data_to_auart
*&---------------------------------------------------------------------*
FORM DATA_SETTO_LISTBOX .
  DATA: NAME  TYPE VRM_ID,        " list box的名称
        LIST  TYPE VRM_VALUES,    " list box的值
        VALUE LIKE LINE OF LIST ." list box的结构

  REFRESH LIST .
  VALUE-KEY  = CNS_KEY_L.
  VALUE-TEXT = CNS_TEXT_L.
  APPEND VALUE TO LIST.

  VALUE-KEY  = CNS_KEY_S.
  VALUE-TEXT = CNS_TEXT_S.
  APPEND VALUE TO LIST.

  "---〉调用函数显示listbox里面的值
  CALL FUNCTION VRM_SET_VALUES
    EXPORTING
      ID     = P_CKUBUN  " PARAMETERS‘s Name
      VALUES = LIST.
ENDFORM.                    " fill_data_to_auart
*&---------------------------------------------------------------------*
*&      Form  LFILE_SFILE_DISPLAY
*&---------------------------------------------------------------------*
FORM SCREEN_DISPLAY.

  LOOP AT SCREEN.

    IF SCREEN-NAME = P_LFILE .
      SCREEN-INPUT = 0.  "不可输入
    ENDIF.
    IF SCREEN-NAME = P_SFILE .
      IF P_CKUBUN = CNS_KEY_S.
        SCREEN-INPUT = 1.  "可输入
      ELSE.
        SCREEN-INPUT = 0.  "不可输入
      ENDIF.
    ENDIF.
    IF SCREEN-NAME = P_SLOG .
      IF P_CKUBUN = CNS_KEY_S.
        SCREEN-INPUT = 1.  "可输入
      ELSE.
        SCREEN-INPUT = 0.  "不可输入
      ENDIF.
    ENDIF.
    MODIFY SCREEN.

  ENDLOOP.

ENDFORM.                    "LFILE_SFILE_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  remove_cr_lf
*&---------------------------------------------------------------------*
FORM REMOVE_CR_LF  CHANGING  P_STR.
  DATA: TCODEPAGE TYPE CPCODEPAGE.
  CALL FUNCTION NLS_GET_FRONTEND_CP
    EXPORTING
      LANGU                 = SY-LANGU
      FETYPE                = MS
    IMPORTING
      FRONTEND_CODEPAGE     = TCODEPAGE
    EXCEPTIONS
      ILLEGAL_SYST_CODEPAGE = 1
      NO_FRONTEND_CP_FOUND  = 2
      INTERNAL_OR_DB_ERROR  = 3
      OTHERS                = 4.

  CALL FUNCTION SCP_REPLACE_STRANGE_CHARS
    EXPORTING
      INTEXT            = P_STR
      INTER_CP          = TCODEPAGE
      REPLACEMENT       = 32     " 等于space, ASC
    IMPORTING
      OUTTEXT           = P_STR
    EXCEPTIONS
      INVALID_CODEPAGE  = 1
      CODEPAGE_MISMATCH = 2
      INTERNAL_ERROR    = 3
      CANNOT_CONVERT    = 4
      FIELDS_NOT_TYPE_C = 5
      OTHERS            = 6.
ENDFORM.                    " REMOVE_CR_LF

*&---------------------------------------------------------------------*
*&      Form  MSG_SET
*&---------------------------------------------------------------------*
FORM MSG_SET USING    P_MSGID P_MSGTY
                      P_MSGNR P_MSGV1
                      P_MSGV2 P_MSGV3
                              P_MSGV4.

  DATA: LV_MESSAGE TYPE C LENGTH 200.

*  CLEAR WA_LOG.
  CALL FUNCTION MESSAGE_TEXT_BUILD
    EXPORTING
      MSGID               = P_MSGID
      MSGNR               = P_MSGNR
      MSGV1               = P_MSGV1
      MSGV2               = P_MSGV2
      MSGV3               = P_MSGV3
      MSGV4               = P_MSGV4
    IMPORTING
      MESSAGE_TEXT_OUTPUT = LV_MESSAGE.

  WA_LOG-OUTDATE =  SY-DATUM.
  WA_LOG-MSGTYPE =  P_MSGTY.
  WA_LOG-MSGTEXT =  LV_MESSAGE.

  APPEND WA_LOG TO IT_LOG.
ENDFORM.                    "MSG_SET
*&---------------------------------------------------------------------*
*&      Form  CHECK_LOGFILE
*&---------------------------------------------------------------------*
FORM CHECK_LOGFILE.

  CONCATENATE P_LOG SY-REPID _ SY-DATUM .txt INTO G_LOGFILE.

  OPEN DATASET G_LOGFILE FOR APPENDING IN TEXT MODE  ENCODING DEFAULT .  "打开文件
  IF SY-SUBRC <> 0.
    MESSAGE OPEN ERROR!! TYPE E.
  ELSE.
    CLOSE DATASET G_LOGFILE.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  LOG_WRITE
*&---------------------------------------------------------------------*
FORM LOG_WRITE.
  DATA: LV_OUTPUT  TYPE C LENGTH 256.
  OPEN DATASET G_LOGFILE FOR APPENDING  IN TEXT MODE  ENCODING DEFAULT .  "打开文件
  IF SY-SUBRC = 0.
    LOOP AT IT_LOG INTO WA_LOG.
      CONCATENATE WA_LOG-OUTDATE
                  WA_LOG-MSGTYPE
                  WA_LOG-MSGTEXT
             INTO LV_OUTPUT  SEPARATED BY space.
      TRANSFER LV_OUTPUT TO G_LOGFILE .
    ENDLOOP.
    CLOSE DATASET G_LOGFILE.
    CLEAR: IT_LOG,WA_LOG.
  ELSE.
    MESSAGE OPEN ERROR!! TYPE E.
  ENDIF.

ENDFORM.                    "LOG_WRITE

 

ZTEST004FORM

标签:exce   splay   write   NPU   header   div   flush   illegal   inpu   

原文地址:https://www.cnblogs.com/wangxiaowen/p/8999671.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!