Code: Alles auswählen.
OPEN DATASET ux_file FOR INPUT IN BINARY MODE.
DO.
CLEAR wa_tab_bin_data .
READ DATASET ux_file INTO wa_tab_bin_data.
IF sy-subrc NE 0.
EXIT.
ENDIF.
APPEND wa_tab_bin_data TO tab_bin_data.
ENDDO.
Close DATASET ux_file.
Unix nach Windows?Kenny hat geschrieben:Kommischerweise habe ich, in dem REPORT zum speichern auf dem AddServer in tab_bin_data 137 Zeilen, beim lesen aber nur noch 136.
Code: Alles auswählen.
OPEN DATASET ux_file FOR INPUT IN BINARY MODE.
DO.
CLEAR wa_tab_bin_data .
READ DATASET ux_file INTO wa_tab_bin_data.
IF sy-subrc NE 0.
EXIT.
ENDIF.
APPEND wa_tab_bin_data TO tab_bin_data.
ENDDO.
Close DATASET ux_file.
Code: Alles auswählen.
data:
ld_xstring type xstring.
OPEN DATASET ux_file FOR INPUT IN BINARY MODE.
READ DATASET ux_file INTO ld_xstring.
CLOSE DATASET ux_file.
Code: Alles auswählen.
ld_length = xstrlen( ld_xstring ).
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Kenny
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Kenny
Code: Alles auswählen.
FUNCTION test.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" REFERENCE(I_TARIFTYP) TYPE TARIFTYP
*" REFERENCE(I_SPARTE) TYPE SPARTE
*" REFERENCE(I_BUKRS) TYPE BUKRS
*" REFERENCE(I_DATUM) TYPE DATE
*" TABLES
*" E_TA_DATA_TAB
*"----------------------------------------------------------------------
************************************************************************
*Datendeklaration
************************************************************************
"Tabellen und WA's
DATA: ta_alb_pdf TYPE TABLE OF ziss_alb_pdf,
wa_alb_pdf LIKE LINE OF ta_alb_pdf.
"Hilfvariablen
DATA: li_content_bin_file TYPE solix_tab,
wa_content_bin_file LIKE LINE OF li_content_bin_file.
DATA: objpack TYPE TABLE OF sopcklsti1,
wa_objpack TYPE sopcklsti1,
tab_lines_file TYPE i,
tab_lines_smart TYPE i.
FIELD-SYMBOLS: <binary_data> TYPE solix.
DATA: tab_bin_data TYPE solix_tab,
wa_tab_bin_data TYPE solix,
tab_bin_data_length TYPE i,
v_file TYPE string,
ux_file TYPE authb-filename.
DATA: ta_ziss_alb_pdf TYPE TABLE OF ziss_alb_pdf,
wa_ziss_alb_pdf LIKE LINE OF ta_ziss_alb_pdf,
v_pfad TYPE localfile,
* tab_bin_data TYPE solix_tab,
* tab_bin_data_length TYPE i,
v_file2 TYPE string.
* ux_file TYPE authb-filename.
"ALB-Dokument_Pfad anhand Importparameter aus Customizing_Tabelle lesen
SELECT *
FROM ziss_alb_pdf
INTO TABLE ta_alb_pdf
WHERE tariftyp EQ i_tariftyp
AND sparte EQ i_sparte
AND bukrs EQ i_bukrs
AND datum_ab <= i_datum.
IF sy-subrc EQ 0.
"Tabelle absteigend nach Datum_Ab sortieren, um aktuellesten, gültigen Eintrag zu ermitteln
SORT ta_alb_pdf DESCENDING BY datum_ab.
"Ersten (aktuellsten) Eintrag lesen
READ TABLE ta_alb_pdf INTO wa_alb_pdf INDEX 1.
"PDF_Dokument aus Datenbank lesen
IF NOT wa_alb_pdf-pfad IS INITIAL.
v_file = wa_alb_pdf-pfad.
* CONCATENATE v_file '.pdf' INTO v_file.
TRANSLATE v_file TO LOWER CASE.
ux_file = v_file.
OPEN DATASET ux_file FOR INPUT IN BINARY MODE.
DO. "/ Zeilenweise Einlesen
CLEAR wa_tab_bin_data .
READ DATASET ux_file INTO wa_tab_bin_data.
IF sy-subrc NE 0. "/ kein Satz mehr
EXIT.
ENDIF.
APPEND wa_tab_bin_data TO tab_bin_data.
ENDDO.
Close DATASET ux_file.
ENDIF.
ELSE.
"Fehlerbehandlung: kein Eintrag gefunden
ENDIF.
*&---------------------------------------------------------------------*
* Datei auf dem Desktop speichern
*&---------------------------------------------------------------------*
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = 'C:\Users\tester\Desktop\test_rueckweg.pdf'
* FILETYPE = 'BIN'
* APPEND = ' '
* WRITE_FIELD_SEPARATOR = ' '
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* TRUNC_TRAILING_BLANKS_EOL = 'X'
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* WRITE_LF_AFTER_LAST_LINE = ABAP_TRUE
* SHOW_TRANSFER_STATUS = ABAP_TRUE
* VIRUS_SCAN_PROFILE = '/SCET/GUI_DOWNLOAD'
IMPORTING
FILELENGTH = tab_bin_data_length
tables
data_tab = tab_bin_data
* FIELDNAMES =
* 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 <> 0.
* Implement suitable error handling here
ENDIF.
BREAK-POINT.
*&---------------------------------------------------------------------*
* Datei auf dem AppServer speichern (Nur zum testen. wieder löschen)
* Prüfen, ob die neu gespeicherte Datei mit der TR: CG3Y abgerufen werden kann
*&---------------------------------------------------------------------*
IF sy-subrc = 0. "Daten erfolgreich aus Datei gelesen
v_pfad = v_file.
TRANSLATE v_pfad TO LOWER CASE.
ux_file = v_pfad.
OPEN DATASET ux_file FOR OUTPUT IN BINARY MODE.
LOOP AT tab_bin_data ASSIGNING <binary_data>.
IF tab_bin_data_length >= 255.
TRANSFER <binary_data>-line TO ux_file.
ELSE.
TRANSFER <binary_data>-line(tab_bin_data_length) TO ux_file.
ENDIF.
SUBTRACT 255 FROM tab_bin_data_length.
ENDLOOP.
CLOSE DATASET ux_file.
IF sy-subrc = 0.
MESSAGE text-003 TYPE 'I'.
ENDIF.
ELSE.
"Datei konnte nicht hochgeladen werden
MESSAGE text-005 TYPE 'S'.
ENDIF.
ENDFUNCTION.
Code: Alles auswählen.
...
*&---------------------------------------------------------------------*
* Datei auf dem Desktop speichern
*&---------------------------------------------------------------------*
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = 'C:\Users\tester\Desktop\test_rueckweg.pdf'
* FILETYPE = 'BIN'
* APPEND = ' '
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Kenny
black_adept hat geschrieben:Aha - kaum sieht man das Coding wird schon einiges klarer.
Die Defaultbelegung des (veralteten) FuBa GUI_DOWNLOAD ist nicht korrektMeines Wissens ist der Default des Übergabeparameters 'FILETYPE" schon immer "ASC" und nicht "BIN" --> bitte die entsprechende zeile in deinem Coding wieder aktivieren, denn momentan versuchst du die Daten zeilenweise statt binär abzulegen.Code: Alles auswählen.
... *&---------------------------------------------------------------------* * Datei auf dem Desktop speichern *&---------------------------------------------------------------------* CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING * BIN_FILESIZE = filename = 'C:\Users\tester\Desktop\test_rueckweg.pdf' * FILETYPE = 'BIN' * APPEND = ' '
Hier steht die folgende sehr wichtige Passage:Kenny hat geschrieben:Code: Alles auswählen.
... OPEN DATASET ux_file FOR INPUT IN BINARY MODE. DO. "/ Zeilenweise Einlesen CLEAR wa_tab_bin_data . READ DATASET ux_file INTO wa_tab_bin_data. IF sy-subrc NE 0. "/ kein Satz mehr EXIT. ENDIF. APPEND wa_tab_bin_data TO tab_bin_data. ENDDO. Close DATASET ux_file. ...
Fazit: Du vergisst einfach die letzte gelesene Zeile an deine Tabelle dranzuhängen.SAP-Hilfe zu READ DATASET hat geschrieben: Systemfelder
sy-subrc Bedeutung
0 Daten wurden gelesen, ohne das Dateiende zu erreichen.
4 Daten wurden gelesen und das Dateiende wurde erreicht oder es wurde versucht, hinter dem Dateiende zu lesen.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Kenny