*&--------------------------------------------------------------------*
*& Report Y_BC_TA_EXCHANGE
*&
*&---------------------------------------------------------------------*
************************************************************************
* Programm zum Up- und Download von lokalen Transportaufträgen *
* *
* Version für ERP 2005 *
* ACHTUNG: DAS PROGRAMM DARF NICHT FÜR R/3 SYSTEME VERWENDET WERDEN, *
* DIE DEN EBCDIC-CODE (IBM Systeme) verwenden ! *
************************************************************************
REPORT Y_BC_TA_EXCHANGE LINE-SIZE 170.
TYPES: BEGIN OF s_buffer,
data(1024) TYPE x,
END OF s_buffer,
t_buffer TYPE STANDARD TABLE OF s_buffer WITH DEFAULT KEY.
DATA: gt_function TYPE ui_functions.
SELECTION-SCREEN BEGIN OF BLOCK opt WITH FRAME NO INTERVALS.
* Selection screen *
PARAMETERS: p_trkorr TYPE e070-trkorr OBLIGATORY.
PARAMETERS: p_lpath TYPE draw-filep OBLIGATORY DEFAULT 'c:\temp\'.
SELECTION-SCREEN SKIP.
PARAMETERS: p_down RADIOBUTTON GROUP func DEFAULT 'X'.
PARAMETERS: p_up RADIOBUTTON GROUP func.
SELECTION-SCREEN END OF BLOCK opt.
DATA: gv_e070 TYPE e070,
gv_answer TYPE char1.
DATA: pos TYPE i,
temp TYPE c.
DATA: path TYPE filep,
path_cofile TYPE filep,
path_data TYPE filep,
path_bin TYPE filep.
DATA: fk TYPE filep,
fr TYPE filep,
fd TYPE filep.
DATA: separator TYPE c.
CONSTANTS: c_true TYPE char1 VALUE 'X',
c_false TYPE char1 VALUE ' ',
c_released TYPE trstatus VALUE 'R'.
*----------------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
* some standard functions are not supported:
APPEND: 'PRIN' TO gt_function,
'SPOS' TO gt_function,
'SJOB' TO gt_function,
'DELS' TO gt_function,
'DELA' TO gt_function,
'LVUV' TO gt_function,
'SCRH' TO gt_function.
CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
EXPORTING
p_status = sy-pfkey
TABLES
p_exclude = gt_function.
AT SELECTION-SCREEN.
pos = STRLEN( p_lpath ) - 1.
temp = p_lpath+pos(1).
CHECK NOT temp = '\'.
CONCATENATE p_lpath '\' INTO p_lpath.
AT SELECTION-SCREEN ON BLOCK opt.
SELECT SINGLE * INTO gv_e070
FROM e070
WHERE trkorr = p_trkorr.
IF p_up EQ c_true.
IF sy-subrc EQ 0.
MESSAGE i208(00) WITH text-006.
ENDIF.
ELSE.
IF sy-subrc NE 0.
* Transportauftrag &1 ist nicht vorhanden
MESSAGE e016(sctm) WITH p_trkorr.
ELSE.
IF NOT gv_e070-strkorr IS INITIAL.
* Geben Sie eine Transportauftragsnummer ein
MESSAGE e074(scpr).
ELSEIF NOT gv_e070-trstatus EQ c_released.
* Transportauftrag & ist nicht freigegeben
MESSAGE e381(stralan_msag) WITH p_trkorr.
ENDIF.
ENDIF.
ENDIF.
START-OF-SELECTION.
* Determine transport base directory *
CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'DIR_TRANS'
ID 'VALUE' FIELD path. "#EC CI_CCALL
* Determine file/path separator *
IF sy-opsys = 'Windows NT'.
separator = '\'. "#EC NOTEXT
ELSE. "LINUX
separator = '/'. ""#EC NOTEXT
ENDIF.
* Determine transport directories *
CONCATENATE path separator 'cofiles' separator INTO path_cofile.
CONCATENATE path separator 'data' separator INTO path_data.
CONCATENATE path separator 'data' separator INTO path_bin.
WRITE / 'Paths:'. "#EC NOTEXT
WRITE: / path_cofile,path_data,path_bin.
SKIP.
* Build filenames *
CONCATENATE p_trkorr+3(7) p_trkorr+0(3) INTO fk SEPARATED BY '.'.
CONCATENATE 'R' p_trkorr+4(6) '.' p_trkorr+0(3) INTO fr.
CONCATENATE 'D' p_trkorr+4(6) '.' p_trkorr+0(3) INTO fd.
* Up- or download transport request *
IF p_down = 'X'. "#EC NOTEXT
PERFORM download USING path_cofile p_lpath fk.
PERFORM download USING path_data p_lpath fr.
PERFORM download USING path_data p_lpath fd.
ELSE.
CLEAR gv_answer.
IF p_trkorr EQ gv_e070-trkorr.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = text-001
text_question = text-002
text_button_1 = text-003
text_button_2 = text-004
default_button = '2'
display_cancel_button = c_false
IMPORTING
answer = gv_answer
EXCEPTIONS
text_not_found = 0
OTHERS = 0.
ENDIF.
IF gv_answer IS INITIAL OR
gv_answer EQ 'J'. "#EC NOTEXT
PERFORM upload USING p_lpath path_cofile fk.
PERFORM upload USING p_lpath path_data fr.
PERFORM upload USING p_lpath path_data fd.
ELSE.
WRITE:/ text-005.
CLEAR gv_e070.
ENDIF.
ENDIF.
*---------------------------------------------------------------------*
* FORM download *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM download USING srcpath TYPE filep
dstpath TYPE filep
file TYPE filep.
DATA: lt_buffer TYPE t_buffer,
ls_buffer TYPE s_buffer.
DATA: filename TYPE rlgrap-filename,
lv_filename TYPE string,
reclen TYPE i,
filelen TYPE i.
DATA: lv_subrc TYPE sy-subrc.
*-----------------------------------------------------------------------
* Read input file *
CONCATENATE srcpath file INTO filename.
OPEN DATASET filename FOR INPUT IN BINARY MODE.
CHECK sy-subrc EQ 0.
* entry for while NEW FOR ERP 2005 !!!
lv_subrc = 0.
WHILE lv_subrc = 0.
READ DATASET filename INTO ls_buffer LENGTH reclen.
lv_subrc = sy-subrc.
filelen = filelen + reclen.
INSERT ls_buffer INTO TABLE lt_buffer.
ENDWHILE.
CLOSE DATASET filename.
CHECK NOT lt_buffer IS INITIAL.
* Download file *
CONCATENATE dstpath file INTO filename.
lv_filename = filename.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = filelen
filename = lv_filename
filetype = 'BIN'
TABLES
data_tab = lt_buffer
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 EQ 0.
WRITE: / text-007, file.
ELSE.
WRITE: / text-008, file.
ENDIF.
FREE: lt_buffer.
ENDFORM. "download
*---------------------------------------------------------------------*
* FORM upload *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM upload USING srcpath TYPE filep
dstpath TYPE filep
file TYPE filep.
DATA: lt_buffer TYPE t_buffer,
ls_buffer TYPE s_buffer.
DATA: filename TYPE rlgrap-filename,
lv_filename TYPE string,
reclen TYPE i,
filelen TYPE i.
*-----------------------------------------------------------------------
* Check if file exists *
CONCATENATE srcpath file INTO filename.
lv_filename = filename.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = lv_filename
filetype = 'BIN'
IMPORTING
filelength = filelen
TABLES
data_tab = lt_buffer
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
OTHERS = 17.
IF sy-subrc EQ 0.
* Write file to server *
CONCATENATE dstpath file INTO filename.
OPEN DATASET filename FOR OUTPUT IN BINARY MODE.
CHECK sy-subrc EQ 0.
LOOP AT lt_buffer INTO ls_buffer.
DESCRIBE FIELD ls_buffer-data LENGTH reclen
IN BYTE MODE.
IF filelen > reclen.
filelen = filelen - reclen.
ELSE.
reclen = filelen.
ENDIF.
TRANSFER ls_buffer TO filename LENGTH reclen.
ENDLOOP.
CLOSE DATASET filename.
WRITE: / text-011, file.
ELSEIF sy-subrc NE 1.
* a real error occured
WRITE:/ text-009, file.
ELSE.
* it can be an error but it must be an error
WRITE:/ text-010, file.
ENDIF.
FREE: lt_buffer.
ENDFORM. "upload
Y_BC_TA_EXCHANGE
猜你喜欢
转载自blog.csdn.net/tsj19881202/article/details/84949816
今日推荐
周排行