안녕하세요
현재 테이블이
MANDT MANDT CLNT 3
RELID INDX_RELID CHAR 2
SRTFD CHAR 45
SRTF2 INDX_SRTF2 INT4 10
LOEKZ SYCHAR01 CHAR 1
SPERR SYCHAR01 CHAR 1
AEDAT SYDATS DATS 8
USERA USERNAME CHAR 12
PGMID PROGNAME CHAR 40
BEGDT SYDATS DATS 8
ENDDT SYDATS DATS 8
CLUSTR INDX_CLSTR INT2 5
CLUSTD INDX_CLUST LRAW 2886
이렇게 구성된 테이블에 들어있는 값이 엑셀 파일을 첨부하면 저장된다고 하는데...
얘를 어떻게 읽어와서 다운로드 받아야할지요....
현재 되어있는 프로그램에서는 load_doc 라는 매크로를 타고
_____프로그램 소스....
DATA: outfile LIKE lgrwo-exp_file,
docname LIKE z5pptd10-srtfd.
DATA : sourcepath LIKE draw-filep,
sourcefile LIKE draw-filep,
targetpath LIKE draw-filep,
targetfile LIKE draw-filep,
subrc(1).
* SAP(ZMPP22)에서 등록된 MJS 문서는 Sap DB(Z5PPTD10)에서 읽고,
* DM에서 I/F되어 등록된 MJS문서는 FTP로 PC에 다운받아 실행.
CLEAR: z5pptd09, filename, document, document_ovl,
outfile, tab_1239d8c1789[].
CONCATENATE dtab-pn '_' dtab-opn '_' dtab-rev INTO docname.
SELECT SINGLE * FROM z5pptd10
WHERE relid EQ '%O' AND srtfd EQ docname.
IF sy-subrc EQ 0. "SAP에서 등록됨.
SELECT SINGLE * FROM z5pptd09
WHERE pn = dtab-pn
AND opn = dtab-opn
AND rev = dtab-rev.
IF sy-subrc EQ 0.
CALL FUNCTION 'WS_ULDL_PATH'
IMPORTING
download_path = outfile.
IF save_ok EQ 'COM'.
outfile = 'C:'.
ENDIF.
TRANSLATE outfile TO UPPER CASE.
IF outfile IS INITIAL.
IF sy-ucomm EQ 'PPR'.
MESSAGE s003 WITH 'MJS 출력 작업이 취소 되었습니다.'.
ELSEIF sy-ucomm EQ 'COM'.
MESSAGE s003 WITH '승인 작업이 취소 되었습니다.'.
ELSE.
MESSAGE s003 WITH '작업이 취소 되었습니다.'.
ENDIF.
*{ REPLACE MI1K900127 1
* STOP.
*stop.
exit.
*} REPLACE
ENDIF.
CONCATENATE z5pptd09-pn '_' z5pptd09-opn '_' z5pptd09-rev
INTO document.
* CONCATENATE z5pptd09-ovlpn '_' z5pptd09-opn '_' z5pptd09-rev
* CONCATENATE z5pptd09-pn '_' z5pptd09-opn '_' z5pptd09-rev
* INTO document_ovl.
CONCATENATE outfile z5pptd09-pn '_' z5pptd09-opn '_' z5pptd09-rev
'.XLS' INTO filename.
CONDENSE: document, document_ovl, filename.
load_doc document to filename.
DEFINE load_doc.
* LOAD_DOC key TO f.
* load a binary document from Database to PC
if '&2' ne 'TO'. endif.
move &1 to key_1239d8c1789.
import %tab to tab_1239d8c1789 %l to l_1239d8c1789
from database z5pptd10(%o) id key_1239d8c1789.
download tab_1239d8c1789 to &3 length l_1239d8c1789.
END-OF-DEFINITION.
DEFINE download.
* DOWNLOAD tab TO file LENGTH length
* download a binary document
if '&2' ne 'TO'. endif.
if '&4' ne 'LENGTH'. endif.
move &3 to filename_1239d8c1789.
call function 'WS_DOWNLOAD'
exporting
filename = filename_1239d8c1789
filetype = 'BIN'
bin_filesize = &5
importing
filelength = file_length_1239d8c1789
tables
data_tab = &1
exceptions
file_open_error = 1
file_write_error = 2
invalid_filesize = 3
invalid_type = 5
no_batch = 6
unknown_error = 7.
END-OF-DEFINITION.
요런구문을 실행하고 나면 자동으로 경로에 파일이 들어와있습니다...
원래 4.6c 버전에서 이번에 ecc6.0 까지 올려놓고 실행해보니
4.6c 에서 문제없이 내용이 정확하게 나오는데
ecc6.0 시스템에서 동일한 구문을 타고 나와서 엑셀파일을 실행시켜보면
파일의 내용이 글자가 모두 깨져 있는 상태로 받아집니다....
혹시 위와 비슷한 내용을 아시는분... 파일 글자 안깨지게...
도움부탁드립니다... (non-unicode 에서 unicode 적용시킨 상황입니다....)
* 행복한 하루 되세요~~~ *
2Byte 글짜깨짐 현상 아닌가 싶습니다.
글짜가 깨지는 문자에 대해서 아래 Function을 적용해보세요.
호출구문==========================================================
CALL FUNCTION 'CORRECT_2BYTES_STR'
EXPORTING
I_STR = gt_pr-txz01
IMPORTING
O_STR = gt_pr-txz01.
Function==========================================================
IMPORT L_STR TYPE C
EXPORT O_STR TYPE C
FUNCTION CORRECT_2BYTES_STR.
*-----------------------------------------------------------------------
* Data Declaration
*-----------------------------------------------------------------------
DATA: STA TYPE I, " HEXA로 읽을위치
POS TYPE I, " Space로 조정할 위치
FLG, " 현재 2Byte Pair 상태
LEN TYPE I. " Input String 길이
FIELD-SYMBOLS: <FS_I>, <FS_O> " Input String의 Hexa Value
TYPE X. " 비교할 1byte Charater의 Hexa값
DATA : HEXA TYPE X.
*-----------------------------------------------------------------------
* Main Procedure of Function
*-----------------------------------------------------------------------
O_STR = I_STR.
*--- Input String이 없으면 그냥 Return
LEN = STRLEN( I_STR ).
IF LEN = 0.
EXIT.
ENDIF.
*--- Correction 시작
ASSIGN I_STR TO <FS_I> TYPE 'X'.
CLEAR: STA, POS, FLG.
DO LEN TIMES.
STA = SY-INDEX - 1.
ASSIGN I_STR+STA(1) TO <FS_O> TYPE 'X'.
IF <FS_O> >= '80'. " 2Byte Character인지 Check: MSB가 '1'
IF FLG = SPACE.
FLG = 'X'. " 2Byte문자의 첫번째 Byte임: 시작
ELSE.
FLG = SPACE. " 2Byte문자의 두번째 Byte이고, 정상상태: 종료
ENDIF.
ELSE. " 1Byte Character임
IF FLG = 'X'. " 바로 앞의 Byte가 2Byte문자의 첫번째Byte였음.
FLG = SPACE. " 비정상으로 짤려진 2Byte문자을 Space로 변환
POS = STA - 1.
O_STR+POS(1) = SPACE. " Correction
ENDIF.
ENDIF.
ENDDO.
IF FLG = 'X'. " 마지막 문자가 짤려진 2Byte문자인지 Check
O_STR+STA(1) = SPACE. " Correct
ENDIF.
ENDFUNCTION.
==================================================================