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.