如何将BW报表传输到外部FTP服务器上

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Bruce_yin/article/details/80169237

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.

猜你喜欢

转载自blog.csdn.net/Bruce_yin/article/details/80169237
今日推荐