on 07-12-2018 7:24 AM
Hallo,
ich möchte einen Funktionsbaustein erstellen, der zu einem Fertigungsauftrag die DIS der angegebenen Dokumentenart dokar druckt. In diesem speziellen Fall geht es um Schaltpläne, die i.d.R. größer als ein DIN A4-Blatt sind. Folgendes macht der Baustein:
Nun zu meinem Problem:
Mein Beispielauftrag hat zwei Schaltpläne. Der erste Schaltplan wird auf DIN A3-Papier im Hochformat gedruckt und der zweite auf DIN A4-Papier im Hochformat. Vorgesehen ist eigentlich für alle Pläne DIN A4-Papier im Querformat.
Wenn ich die Auswahl von Papier und Format dem Adobe Reader überlasse, wird Plan 1 auf DIN A3 und Plan 2 auf DIN A4 gedruckt. Beide im Querformat. Ich habe schon geschaut, ob ich den verwendeten Funktionsbausteinen weitere Parameter dazu mitgeben kann (Fehlanzeige) und den Drucker mithilfe einer XDC-Datei zu steuern (ebenfalls nichts). Meine letzte Idee ist, einen Ausdruck auf einem Gerät, das nur DIN A4 Papier verwendet, zu versuchen. Bin allerdings noch nicht dazu gekommen. Ich vermute aber, dass dann im Hochformat gedruckt wird.
Code meines Funktionsbausteins:
* alle Dokumenteninfosätze auslesen
CALL FUNCTION 'CO_DM_AFDLD_READ_KEY'
EXPORTING
i_aufnr = aufnr
TABLES
et_afdld = lt_afdld.
* Identifizieren der Dokumente der Dokumentenart dokar
LOOP AT lt_afdld INTO ls_afdld WHERE dokar = dokar.
lv_bapi_doctype = ls_afdld-dokar.
lv_bapi_docnumber = ls_afdld-doknr.
lv_bapi_docpart = ls_afdld-doktl.
lv_bapi_docversion = ls_afdld-dokvr.
ls_documentfile-wsapplication = 'PDF'.
CONCATENATE c_path sy-sysid '\' INTO lv_docpath.
CALL FUNCTION 'BAPI_DOCUMENT_CHECKOUTVIEW2'
EXPORTING
documenttype = lv_bapi_doctype
documentnumber = lv_bapi_docnumber
documentpart = lv_bapi_docpart
documentversion = lv_bapi_docversion
documentfile = ls_documentfile
originalpath = lv_docpath
TABLES
documentfiles = lt_documentfiles.
APPEND LINES OF lt_documentfiles TO lt_docfiles.
CLEAR lt_documentfiles.
ENDLOOP.
* Spool-Auftrag öffnen
CLEAR ev_retcode.
CALL FUNCTION 'ADS_SR_OPEN'
EXPORTING
dest = 'TEST'
doctype = 'ADSP'
copies = 1
immediate_print = ' ' "'X'
auto_delete = ' '
IMPORTING
handle = lv_handle
spoolid = lv_spoolid
partname = lv_partname
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
ev_retcode = 4.
RETURN.
ENDIF.
* Verzeichnis für Einzeldateien des Spool-Auftrags
CLEAR lv_globaldir.
CALL FUNCTION 'ADS_GET_PATH'
IMPORTING
ads_path = lv_globaldir.
* Inhalt des Spool-Auftrags ermitteln
CLEAR ls_docfile.
LOOP AT lt_docfiles INTO ls_docfile.
lv_docfile = ls_docfile-docfile.
OPEN DATASET lv_docfile FOR INPUT IN BINARY MODE.
IF sy-subrc = 0 .
READ DATASET lv_docfile INTO lv_data.
lv_file_exists = 'X'.
ELSE.
lv_file_exists = ''.
ENDIF.
CLOSE DATASET lv_docfile.
IF lv_file_exists = abap_true.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_data
TABLES
binary_tab = lt_file.
* PDF erzeugen
"MOVE gv_document TO lv_document.
CLEAR: lv_dstfile, lv_filename.
CONCATENATE lv_globaldir '\' lv_partname '.pdf' INTO lv_dstfile.
lv_filename = |{ lv_partname }.pdf|.
CALL FUNCTION 'ADS_WRITE_TO_FILE'
EXPORTING
filename = lv_filename
buffer = lv_data
client = sy-mandt
EXCEPTIONS
OTHERS = 11.
* PDF dem Spool-Auftrag hinzufügen
lv_filesize = xstrlen( lv_data ).
lv_pages = 1.
CALL FUNCTION 'ADS_SR_CONFIRM'
EXPORTING
handle = lv_handle
partname = lv_partname
size = lv_filesize
pages = lv_pages
no_pdf = ' '
IMPORTING
new_partname = lv_partname
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
ev_retcode = 4.
RETURN.
ENDIF.
ENDIF.
CLEAR: lv_data, lt_file, lv_docfile, ls_docfile.
ENDLOOP.
* Spool-Auftrag schließen
CALL FUNCTION 'ADS_SR_CLOSE'
EXPORTING
handle = lv_handle
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
ev_retcode = 4.
RETURN.
ENDIF.
User | Count |
---|---|
93 | |
10 | |
10 | |
9 | |
9 | |
7 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.