文件夹选择对话框

1.文件夹选择对话框


PARAMETERS: P_FPATH  LIKE  RLGRAP-FILENAME LOWER CASE  OBLIGATORY

..........

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FPATH.


  DATA :

    LW_DIR TYPE RLGRAP-FILENAME,

    LW_LENGTH TYPE I.

*----- TMP_GUI_BROWSE_FOR_FOLDER

  CALL FUNCTION 'TMP_GUI_BROWSE_FOR_FOLDER'

    IMPORTING

      SELECTED_FOLDER = LW_DIR      "FOLDER

    EXCEPTIONS

      CNTL_ERROR      = 1

      OTHERS          = 2.


  IF SY-SUBRC <> 0 OR LW_DIR IS INITIAL.

    EXIT.

  ENDIF.


  LW_LENGTH = STRLEN( LW_DIR ) - 1 .

  IF LW_DIR+LW_LENGTH(1) = CNS_PATH.

    W_PATH = LW_DIR.

  ELSE.

    CONCATENATE LW_DIR CNS_PATH INTO W_PATH .

  ENDIF.

    CONCATENATE W_PATH 'TEMP.TXT' INTO P_FPATH .

  W_PATH = P_FPATH.


 2.文件选择对话框

DATA: IT_TABFILE TYPE FILETABLE,

      GD_SUBRCFILE TYPE I.


REFRESH: IT_TABFILE.

*----- 文件选择对话框

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG

    EXPORTING

      WINDOW_TITLE      = '选择文件'

      DEFAULT_EXTENSION = '*.TXT'

      DEFAULT_FILENAME  = 'TEMP.TXT'

      FILE_FILTER = '*.TXT'

      INITIAL_DIRECTORY = 'D:\'

      MULTISELECTION    = ' '  "NO MULTIPLE SELECTION

    CHANGING

      FILE_TABLE        = IT_TABFILE

      RC                = GD_SUBRCFILE.

 


  IF SY-SUBRC <> 0.

    EXIT.

  ENDIF.


  READ TABLE IT_TABFILE INDEX 1 INTO P_FPATH.

如果 MULTISELECTION 参数值不为'',表示可以选择多个文件,此时要用loop循环从

IT_TABFILE中获取各个文件的完整路径(含文件名)


3.关于文件选择对话框,找到另一Function        TMP_GUI_FILE_OPEN_DIALOG.

    CALL FUNCTION 'TMP_GUI_FILE_OPEN_DIALOG'
    EXPORTING
      WINDOW_TITLE      = '选择文件'
      DEFAULT_EXTENSION = '*.TXT'
      DEFAULT_FILENAME  = 'TEMP.TXT'
      FILE_FILTER = '*.TXT'
      INITIAL_DIRECTORY = 'C:\'
      MULTISELECTION    = ''  "NO MULTIPLE SELECTION
    CHANGING
      FILETABLE = IT_TABFILE
      RC = GD_SUBRCFILE      "SELECTED FILE AMOUNT
    EXCEPTIONS
      CNTL_ERROR = 1.
以上调用代码编译没问题,但运行时总是报FILE_TABLE 参数错误,

可是这个参数难道不是和2.中一样赋值吗?莫名其妙的ABAP啊,又让我不爽


4.按日期条件取凭证的优化代码


  DATA: TAB_BSEG_ZJ TYPE STANDARD TABLE OF TYP_BSEG WITH HEADER LINE.

  DATA: TAB_BKPF TYPE STANDARD TABLE OF TYP_BKPF .

.................

*取本月的凭证号用于过滤BSEG的数据.

REFRESH: TAB_BKPF,TAB_BSEG_ZJ.

*BKPF中有记账日期字段和输入的期间匹配(BSEG中则没有)

SELECT BELNR BUDAT GJAHR APPENDING TABLE TAB_BKPF FROM BKPF

 WHERE BUKRS = P_BUKRS AND BUDAT <= L_DATL AND BUDAT >= L_DATF.


*从BSEG取数,按凭证号和BKPF关联

 SELECT BSEG~DMBTR BSEG~BELNR BSEG~SHKZG BSEG~XNEGP

 BSEG~ANLN1 BSEG~ANLN2 BSEG~GJAHR

  APPENDING TABLE TAB_BSEG_ZJ

 FROM BSEG " 获得本月折旧增减的凭证号、记账方向和反记账标记

 FOR ALL ENTRIES IN TAB_BKPF

 WHERE BUKRS = P_BUKRS

       AND GJAHR = TAB_BKPF-BUDAT+0(4)"考虑跨年度的情况

       AND KOART = 'A' " 账户类型

       AND ALTKT LIKE '001502%' "科目,表示折旧

       AND BELNR = TAB_BKPF-BELNR.

这里先把满足条件的所有凭证全取到TAB_BSEG_ZJ里,然后在后面对其循环处理

从而避免了在循环中用sql语句访问数据库的低效率做法,换句话说,是典型的用空间换时间

(内表TAB_BSEG_ZJ中保存了大量数据),MSEG和MKPF也可以用同样的做法进行优化。

5.外部文件读入内表/系统数据下载到本地文件

    CALL FUNCTION 'WS_UPLOAD'
      EXPORTING
        FILENAME = W_PATH             "FILE NAME
        FILETYPE = 'DAT'             "FILE TYPE
      IMPORTING
        FILELENGTH = FILELEN
      TABLES
        DATA_TAB = TD_TXT
      EXCEPTIONS
        OTHERS   = 1.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值