PDF aus Datenbank lesen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
28 Beiträge • Vorherige Seite 2 von 2 (current)
28 Beiträge Vorherige Seite 2 von 2 (current)

Re: PDF aus Datenbank lesen

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
Hallo Stefan,
EDIT
vielen Dank nochmal für deine Mühe.
Ich habe es hinbekommen. Das Problem lag daran, dass ich mir die Datein immer mit einem ZReport wieder auf den Präsentationsserver geladen habe. (Dieser war hier allgemein in Benutzung)

Über die von Dir genannten Transaktionen funktioniert es ohne Probleme. Ich könnte k****.

Vielen lieben Dank. :-)

Ihr seit echt spitze hier!!!

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: PDF aus Datenbank lesen

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
Stefan,

eine Frage habe ich noch.

In einem zweitem Report möchte ich die auf dem Server gespeicherte Datei wieder lesen und auf dem Präsentationsserver speichern. (Also der umgekehrte Fall)

Ich versuche es so:

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.

Kommischerweise habe ich, in dem REPORT zum speichern auf dem AddServer in tab_bin_data 137 Zeilen, beim lesen aber nur noch 136.

Mach ich etwas falsch?

Re: PDF aus Datenbank lesen

Beitrag von JHM (Top Expert / 1201 / 1 / 197 ) »
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.
Unix nach Windows?

Wenn ja dann schau dir mal das Zeilenende an. Unix verwendet ein anderes Zeilenendzeichen (CR) als Windows (CRLN).

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
Kenny

Gruß Hendrik

Re: PDF aus Datenbank lesen

Beitrag von black_adept (Top Expert / 4116 / 129 / 951 ) »
Hallo Kenny,

- haben die Strukturen beim Speichern und Lesen auch dieselbe Größe?
- setz doch mal einen Breakpunkt im Debugger bei beiden Programmen und vergleich dann visuell wo der Unterschied genau auftaucht
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: PDF aus Datenbank lesen

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
Hallo zusammen,

ich sitze dabei irgendwie, ich denke aufgrund von Unwissenheit, auf dem Schlauch.

Folgender Weg funktioniert dank Eurer Hilfe:
Datei vom Präsentationsserver auswählen und speichern auf dem AppServer.
Datei: Test.pdf (Gui_Upload: Daten: Guido: Upload 137 Zeilen, Größe/Filelenght: 34760)
Getestet: CG3Y (Datei vom AppServer auf den Desktop) Wird korrekt dargestellt!

Folgender Weg funktioniert nicht:
Datei vom AppServer lesen und mit GUI_Download auf den Präsentationsserver speichern.
Datei: Test.pdf (Gui_Download: Daten: Guido: Upload 136 Zeilen, Größe/Filelenght: 34952)
(Nebenversuch: Gelesene Daten als Test2.pdf erneut auf dem AppServer speichern und mit CG3Y lesen-> Datei kann nicht geöffnet werden!!

Lesen tue ich die Datei vom AppServer wie folgt:

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.
Muss ich hier vielleicht noch Längen beachten. (Stefan du machst sowas beim Speichern (>255)

Sorry das ich so viel frage, doch ist mir dieses Themengebiet neu.

Re: PDF aus Datenbank lesen

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
Ich hoffe, dass ich hier jetzt die Verwirrung nicht noch zusätzlich verschlimmere, aber ich würde das Ganze mit Hilfe von XSTRING machen:

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.
Die Länge der Datei ergibt sich dann aus:

Code: Alles auswählen.

ld_length = xstrlen( ld_xstring ).
Zum Umwandeln in das Format für den GUI-Download (Tabelle) kann man meine SPLIT & CONCATENATE für Byte verwenden. (Oder die Routinen aus dem Email-Versand für das aufsplitten der Dateianhänge)

Wichtig ist, dass man beim GUI Download bzw. Upload auch die Länge (LENGTH) beachtet.
Da bei einer statischen Zeilenlänge die letzte Zeile meist nicht vollständig befüllt wird, stehen ansonsten unnötige (oder falsche) Leerzeichen am Ende der Datei.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Kenny

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: PDF aus Datenbank lesen

Beitrag von black_adept (Top Expert / 4116 / 129 / 951 ) »
Hallo Kenny,

du unterschlägst wieder die wichtigen Informationen in deinem Codingblock:
Es fehlen:
- Die Definition von tab_bin_data
- Die Stelle wo du den (veralteten?) GUI-Download machst

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Kenny

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: PDF aus Datenbank lesen

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
Hallo zusammen,

danke schonmal für die Hilfe. Sorry ich wollte keine wichtigen Zeilen vergessen:

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.


Re: PDF aus Datenbank lesen

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
Original test.pdf (letzten zeilen)
0000000000 65535 f#
0000034074 00000 n#
0000000040 00000 n#
0000000225 00000 n#
0000000260 00000 n#
0000001377 00000 n#
0000001567 00000 n#
0000002685 00000 n#
0000002868 00000 n#
0000003970 00000 n#
0000005021 00000 n#
0000004998 00000 n#
0000005057 00000 n#
0000005253 00000 n#
0000006380 00000 n#
0000021696 00000 n#
0000021721 00000 n#
0000021971 00000 n#
0000033038 00000 n#
0000033063 00000 n#
0000033313 00000 n#
0000034152 00000 n#
trailer#
<<#
/Size 22#
/Root 21 0 R#
/Info 20 0 R#
>>#
startxref#
34228#
%%EOF#


Gelesene und zum Test erneut abgespeicherte Version (letzte Zeilen)
0000000000 65535 f#
0000034074 00000 n#
0000000040 00000 n#
0000000225 00000 n#
0000000260 00000 n#
0000001377 00000 n#
0000001567 00000 n#
0000002685 00000 n#
0000002868 00000 n#
0000003970 00000 n#
0000005021 00000 n#
0000004998 00000 n#
0000005057 00000 n#
0000005253 00000 n#
0000006380 00000 n#
0000021696 00000 n#
0000021721 00000 n#
0000021971 00000 n#
0000033038 00000 n#
0000033063 00000 n#
0000033313 00000 n#
0000034152 00000 n#


Hilft dies vielleicht???

Re: PDF aus Datenbank lesen

Beitrag von black_adept (Top Expert / 4116 / 129 / 951 ) »
Aha - kaum sieht man das Coding wird schon einiges klarer.
Die Defaultbelegung des (veralteten) FuBa GUI_DOWNLOAD ist nicht korrekt

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                          = ' '
Meines 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.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Kenny

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: PDF aus Datenbank lesen

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
black_adept hat geschrieben:Aha - kaum sieht man das Coding wird schon einiges klarer.
Die Defaultbelegung des (veralteten) FuBa GUI_DOWNLOAD ist nicht korrekt

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                          = ' '
Meines 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.

Hehe, sorry schreibe jetzt immer den Code dazu.
Ok, habe ich angepasst aber das ändert doch nicht den Fall, dass ich die gelesenen Daten wieder auf den AppServer schreibe und diese dort nicht korrekt sind, oder?.
Ich schreibe die Daten genauso wieder weg, wie ich es mit meinem anderen Report ( bei welchem Du mir geholfen hattest, weg) auch getan habe.

Re: PDF aus Datenbank lesen

Beitrag von black_adept (Top Expert / 4116 / 129 / 951 ) »
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.
...
Hier steht die folgende sehr wichtige Passage:
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.
Fazit: Du vergisst einfach die letzte gelesene Zeile an deine Tabelle dranzuhängen.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Kenny

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: PDF aus Datenbank lesen

Beitrag von Kenny (ForumUser / 68 / 28 / 0 ) »
Mein Gott, jetzt gehts´....

Mehr als Tausend Dank an Alle, besonders an Stefan, der am meisten unter mir gelitten hat :-)

Das war für mich eine echt schwere Geburt und das ich das mit dem sy-subrc nicht selbst endeckt habe ärgert mich gewaltig.

Ich denke ich habe in diesem Bereich jetzt aber auch eine Menge hinzu gelernt .....

SuperfettenDank !!!!

Vergleichbare Themen

5
Antw.
4841
Views
1
Antw.
8071
Views
Unterschied: Sequentielles lesen, direktes lesen
von MarkusW » 07.08.2008 16:46 • Verfasst in ABAP® für Anfänger
4
Antw.
3277
Views
Datenbank PNP(CE)
von Michael Weyland » 17.03.2016 15:39 • Verfasst in Human Resources
3
Antw.
1484
Views
Beschleunigen Datenbank ADA
von Der Mühlviertler » 19.06.2006 17:38 • Verfasst in Financials
6
Antw.
3472
Views
Datenbank modell
von kostonstyle » 18.09.2008 08:59 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1774
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2315

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1774
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2315

Unbeantwortete Forenbeiträge

Export von Spools in XLSX
vor 4 Tagen von abapamateur 1 / 342
Feldberechnung ME32K
vor einer Woche von ZF_SAPler 1 / 938
MS-Word als Editor
letzen Monat von tekko 1 / 4449