Smart Forms sind das Standard-Werkzeug für die Formularentwicklung in SAP. Sie ermöglichen die Erstellung professioneller Druckausgaben wie Rechnungen, Bestellungen und Lieferscheine.
Komponente Transaktion Beschreibung Form SMARTFORMS Formularlayout Style SMARTSTYLES Formatvorlagen Text Module SO10 Wiederverwendbare Texte Grafiken SE78 Logos und Bilder
Element Beschreibung Global Definitions Typen, Daten, Initialisierung Form Interface Import/Export Parameter Pages Seiten mit Header/Footer Windows Ausgabebereiche Nodes Text, Tabelle, Grafik, etc.
Grundlegende Beispiele
DATA : lv_fm_name TYPE rs38l_fnam,
ls_output TYPE ssfcompop,
ls_control TYPE ssfctrlop,
ls_job_info TYPE ssfcrescl.
" Funktionsbaustein-Name ermitteln
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
MESSAGE 'Smart Form nicht gefunden' TYPE 'E' .
ls_output-tdnewid = abap_true . " Neuer Spool-Auftrag
ls_output-tddest = 'LP01' . " Drucker
ls_control-no_dialog = abap_true . " Kein Druckdialog
ls_control-preview = abap_true . " Druckvorschau
control_parameters = ls_control
output_options = ls_output
is_header = ls_invoice_header
job_output_info = ls_job_info
it_items = lt_invoice_items
WRITE : / 'Formular erfolgreich erstellt' .
WRITE : / 'Spool-ID:' , ls_job_info-spoolids[ 1 ].
PDF generieren und speichern
DATA : lt_pdf_lines TYPE TABLE OF tline,
lv_pdf_xstring TYPE xstring .
ls_output-tdgetotf = abap_true . " OTF-Daten zurückgeben
control_parameters = ls_control
output_options = ls_output
is_header = ls_invoice_header
job_output_info = ls_job_info
it_items = lt_invoice_items.
" OTF in PDF konvertieren
CALL FUNCTION 'CONVERT_OTF'
bin_filesize = lv_pdf_size
otf = ls_job_info-otfdata
err_conv_not_possible = 3
" PDF-Zeilen zu XSTRING konvertieren
CALL FUNCTION 'CONVERT_OTF_2_PDF'
use_otf_mc_cmd = abap_true
bin_file = lv_pdf_xstring
otf = ls_job_info-otfdata
DATA : lv_filename TYPE string VALUE 'C:\temp\invoice.pdf' .
CALL METHOD cl_gui_frontend_services=>gui_download
bin_filesize = lv_pdf_size
PDF per E-Mail versenden
DATA : lo_send_request TYPE REF TO cl_bcs,
lo_document TYPE REF TO cl_document_bcs,
lo_recipient TYPE REF TO if_recipient_bcs,
lv_size TYPE sood-objlen.
" XSTRING in SOLIX konvertieren
lt_solix = cl_bcs_convert=>xstring_to_solix( lv_pdf_xstring ).
lv_size = xstrlen ( lv_pdf_xstring ).
lo_send_request = cl_bcs=>create_persistent( ).
" Dokument mit Anhang erstellen
lo_document = cl_document_bcs=>create_document(
i_text = VALUE #( ( line = 'Anbei die Rechnung als PDF.' ) )
i_subject = 'Rechnung' ).
lo_document->add_attachment(
i_attachment_type = 'PDF'
i_attachment_subject = 'Rechnung.pdf'
i_attachment_size = lv_size
i_att_content_hex = lt_solix ).
lo_send_request->set_document( lo_document ).
lo_recipient = cl_cam_address_bcs=>create_internet_address(
i_address_string = 'kunde@example.com' ).
lo_send_request->add_recipient( lo_recipient ).
lo_send_request->send( ).
CATCH cx_bcs INTO DATA (lx_bcs).
MESSAGE lx_bcs->get_text( ) TYPE 'E' .
Druckvorschau anzeigen
" Druckvorschau aktivieren
ls_control-preview = abap_true .
ls_control-no_dialog = abap_true .
control_parameters = ls_control
output_options = ls_output
is_header = ls_invoice_header
it_items = lt_invoice_items
MESSAGE 'Vorschau abgebrochen' TYPE 'S' .
Mehrere Exemplare drucken
ls_output-tdimmed = abap_true . " Sofortdruck
" Original und Kopie mit verschiedenen Texten
ls_header-doc_type = 'ORIGINAL' .
ls_header-doc_type = 'KOPIE' .
control_parameters = ls_control
output_options = ls_output
Dynamische Tabellenausgabe
" Im Smart Form - Global Definitions
" Tabelle IT_ITEMS definieren
" Im ABAP - Daten übergeben
DATA : lt_items TYPE TABLE OF zsf_item.
( posnr = '10' matnr = 'MAT001' menge = 5 preis = '100.00' )
( posnr = '20' matnr = 'MAT002' menge = 3 preis = '250.00' )
( posnr = '30' matnr = 'MAT003' menge = 1 preis = '500.00' )
control_parameters = ls_control
output_options = ls_output
Grafik/Logo einbinden
" Grafik in SE78 hochladen (BMAP oder OTF)
" Im Smart Form: Graphic Node erstellen
" Alternativ: Grafik dynamisch übergeben
DATA : lv_bmp TYPE xstring .
" Grafik aus Datenbank lesen
SELECT SINGLE content FROM stxbitmaps
WHERE tdobject = 'GRAPHICS'
" An Smart Form übergeben
Barcode generieren
" 1. Barcode-Feld im Window erstellen
" 2. Barcode-Typ auswählen (z.B. CODE128, EAN13)
" Im ABAP - Barcode-Wert übergeben
DATA : lv_barcode TYPE char40.
lv_barcode = |{ ls_order-order_id ALPHA = IN }| .
Spool-Verwaltung
DATA : lv_spoolid TYPE rspoid.
" Spool-ID nach Formulardruck
lv_spoolid = ls_job_info-spoolids[ 1 ].
CALL FUNCTION 'RSPO_DELETE_SPOOL_REQUEST'
" Spool in PDF konvertieren
DATA : lt_pdf TYPE TABLE OF tline.
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
" Verschiedene Layouts basierend auf Bedingung
DATA : lv_form_name TYPE tdsfname.
CASE ls_order-order_type.
lv_form_name = 'ZSF_ORDER_STANDARD' .
lv_form_name = 'ZSF_ORDER_EXPRESS' .
lv_form_name = 'ZSF_ORDER_DEFAULT' .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
" Smart Form in verschiedenen Sprachen pflegen
" Transaktion SMARTFORMS -> Übersetzung
" Sprache beim Aufruf setzen
ls_control-langu = 'E' . " Englisch
ls_control-langu = sy - langu .
control_parameters = ls_control
Hintergrund-Druck (ohne Dialog)
" Für Batch-Jobs und Massendruck
ls_control-no_dialog = abap_true .
ls_control-device = 'PRINTER' .
ls_output-tddest = 'LP01' . " Drucker
ls_output-tdimmed = abap_true . " Sofort drucken
ls_output-tddelete = abap_true . " Spool nach Druck löschen
ls_output-tdnewid = abap_true . " Neuer Spool-Auftrag
LOOP AT lt_orders INTO DATA (ls_order).
control_parameters = ls_control
output_options = ls_output
Archivierung (ArchiveLink)
DATA : ls_archive TYPE arc_params.
ls_archive-archiv_mode = '2' . " Drucken und Archivieren
ls_archive-ar_object = 'ZORDER' .
ls_archive-ar_date = sy - datum .
ls_archive-mandant = sy - mandt .
ls_archive-doc_type = 'PDF' .
ls_output-tdarmod = ls_archive-archiv_mode.
control_parameters = ls_control
output_options = ls_output
archive_index = ls_archive
Fehlerbehandlung
DATA : lv_error_msg TYPE string .
control_parameters = ls_control
output_options = ls_output
MESSAGE 'Formular erfolgreich erstellt' TYPE 'S' .
lv_error_msg = 'Formatierungsfehler im Formular' .
MESSAGE lv_error_msg TYPE 'E' .
lv_error_msg = 'Interner Fehler bei Formularverarbeitung' .
MESSAGE lv_error_msg TYPE 'E' .
lv_error_msg = 'Fehler beim Senden/Drucken' .
MESSAGE lv_error_msg TYPE 'E' .
MESSAGE 'Vom Benutzer abgebrochen' TYPE 'S' .
MESSAGE 'Unbekannter Fehler' TYPE 'E' .
Smart Styles
" Style im Smart Form referenzieren
" Transaktion SMARTSTYLES
" Beispiel Style-Definition:
" - Paragraph Format: P1 (Standard), H1 (Überschrift)
" - Character Format: B (Bold), I (Italic)
" - Tab Positions für Spalten
│ ├── Form Interface (Import/Export)
│ └── FIRST (Erste Seite)
│ ├── HEADER (Kopfbereich)
│ ├── MAIN (Hauptfenster)
│ └── FOOTER (Fußbereich)
Best Practices
Wiederverwendung : Text-Module für wiederkehrende Texte
Styles : Zentrale Style-Verwaltung für konsistentes Layout
Performance : Daten vor Aufruf aufbereiten, nicht im Form
Testing : Verschiedene Drucker und Datenkonstellationen testen
Fehlerbehandlung : Alle Exceptions abfangen
Sprachen : Übersetzbare Texte verwenden
Wichtige Transaktionen
Transaktion Beschreibung SMARTFORMS Form Builder SMARTSTYLES Style Editor SE78 Grafikverwaltung SO10 Textbausteine SP01 Spool-Verwaltung NACE Ausgabesteuerung
Verwandte Themen