1. 生成CSV文件
通过OPEN HUB 到服务器上生成CSV文件(可以通过处理链),系统默认的地址是
/usr/sap/POP/DVEBMGS00/work/
2. SAPFTP_SERVERS
输入事务码:SE16,输入表名字:SAPFTP_SERVERS,增加一行数据。输入允许IP地址,端口号0
我没有改这个表的数据的权限,因此写了个程序
REPORT ZBW_SAPFTP_SERVERS.
DATA: wa1 TYPE SAPFTP_SERVERS.
wa1-CLIENT = '800'.
wa1-FTP_SERVER_NAME = '*'.
wa1-FTP_SERVER_PORT = '0'.
wa1-DESCRIPTION = '*'.
INSERT INTO SAPFTP_SERVERS VALUES wa1.
3. 写程序将数据传到FTP上
*&---------------------------------------------------------------------*
*& Report ZBW_FTP_SALES
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZBW_FTP_PAIYU.
DATA: mi_key TYPE i VALUE 26101957,
mi_handle TYPE i,
slen TYPE i.
DATA:BEGIN OF res OCCURS 0,
line(100) TYPE c,
END OF res.
DATA:lt_docs TYPE TABLE OF docs WITH HEADER LINE.
types truxs_t_text_data(4096) type c occurs 0.
DATA:csvtab1 TYPE truxs_t_text_data WITH HEADER LINE.
DATA:blob_length TYPE i.
DATA: in_data TYPE STANDARD TABLE OF bapiconten.
DATA: suser(30) TYPE c,
spwd(30) TYPE c,
shost(64) TYPE c.
suser = 'xxxx'."FTP账号
spwd = 'xxxx'."FTP密码
shost = 'ddd.ff.ss.xx'. "FTP服务器地址
slen = strlen( spwd ).
CALL FUNCTION 'HTTP_SCRAMBLE'
EXPORTING
source = spwd
sourcelen = slen
key = mi_key
IMPORTING
destination = spwd. "密码加密
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
user = suser
password = spwd
host = shost
rfc_destination = 'SAPFTP' "前台跑就用SAPFTP 如果是后台任务就用SAPFTPA
IMPORTING
handle = mi_handle
EXCEPTIONS
not_connected = 1
OTHERS = 2.
PERFORM sap_data_dowmload."先将SAP服务器上面的文件下载---修改名称 ---然后上传
"exit.
CALL FUNCTION 'SCMS_TEXT_TO_BINARY'"防止文件中文乱码
EXPORTING
encoding = '8400'
IMPORTING
output_length = blob_length
TABLES
text_tab = lt_docs[] " input
binary_tab = in_data " output
EXCEPTIONS
failed = 1
OTHERS = 2.
*CALL FUNCTION 'FTP_COMMAND'
* EXPORTING
* handle = mi_handle
* command = 'get /usr/sap/POD/DVEBMGS00/work/*.csv' "取到SAP服务器的文件
* compress = 'N'
* TABLES
* data = res "result
* EXCEPTIONS
* command_error = 1
* tcpip_error = 2.
*IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*ENDIF.
*CALL FUNCTION 'FTP_COMMAND'
* EXPORTING
* handle = mi_handle
* command = 'cd ' "放入FTP指定的文件夹 laomiao/
* compress = 'N'
* TABLES
* data = res "result
* EXCEPTIONS
* command_error = 1
* tcpip_error = 2.
*IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*ENDIF.
DATA: V_DATE TYPE SY-DATUM.
"DATA: V_MONTH TYPE /BI0/OICALMONTH."年月
DATA: V_MONTH2 TYPE /BI0/OICALMONTH2."月
DATA: V_YEAR TYPE /BI0/OICALYEAR."年
DATA: L_FILE(16) TYPE C.
V_DATE = SY-DATUM.
V_MONTH2 = V_DATE+4(2) - 1.
V_YEAR = V_DATE+0(4).
CONCATENATE 'Brand_' V_YEAR V_MONTH2 '.' 'CSV' INTO L_FILE.
*****
CALL FUNCTION 'FTP_R3_TO_SERVER'
EXPORTING
handle = mi_handle
"fname = '201804.csv'
fname = L_FILE
blob_length = blob_length
* character_mode = 'X'
TABLES
blob = in_data.
" TEXT = TEXT.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
handle = mi_handle
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*&---------------------------------------------------------------------*
*& Form SAP_DATA_DOWMLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sap_data_dowmload .
DATA: MESS(60),
FNAME(50) VALUE '/usr/sap/POP/DVEBMGS00/work/ZEBD_D02.CSV' .
OPEN DATASET FNAME MESSAGE MESS FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF SY-SUBRC <> 0.
WRITE: 'SY-SUBRC:', SY-SUBRC,
/ 'System Message:', MESS.
ENDIF.
do.
READ DATASET fname INTO lt_docs.
if sy-subrc ne 0.
exit.
else.
APPEND lt_docs.
" write:/ lt_docs.
endif.
enddo.
CLOSE DATASET fname.
* CALL FUNCTION 'ARCHIVFILE_SERVER_TO_TABLE'
* EXPORTING
* sourcepath = '/usr/sap/ECD/DVEBMGS02/work/ZEBD_D02.CSV'
* WITHOUT_DELETE = ' '
* IMPORTING
* LENGTH =
* TABLES
* archivobject = lt_docs[]
* EXCEPTIONS
* error_file = 1
* no_authority = 2
* OTHERS = 3.
* IF sy-subrc <> 0.
* Implement suitable error handling here
* ENDIF.
ENDFORM.