Adobe Formular mehrmals

Getting started ... Alles für einen gelungenen Start.
21 Beiträge • Seite 1 von 2 (current) Nächste
21 Beiträge Seite 1 von 2 (current) Nächste

Adobe Formular mehrmals

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hallo zusammen,

ich habe ein Adobe Formular erstellt, welche einige Daten wie Materialnummer, Kundenname, Adresse usw. darstellt. Nun hätte ich es gerne so, dass wenn aufgrund der Eingabe mehrere Materialnummern gefunden werden, pro Materialnummer jeweils ein neues Formular erstellt wird (also das gleiche bloß, mit der nächsten Materialnummer). Weiß jemand ob und wenn ja, wie so etwas geht. Es würde sich um ein Adobe Formular handeln.

Vielen Dank im Voraus.

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


Re: Adobe Formular mehrmals

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
Da führen viele Wege zum Ziel:
  1. Der Aufrufer kümmert sich darum indem je Materialnummer der Ausdruck aufgerufen wird.
  2. Der Aufrufer übergibt eine Liste von Materialnummern und im Formular wird mit "Wiederholen" und Seitumbruch der Mehrseitige Ausdruck implementiert.
  3. Die Materialnummern werden im Formularkontext ermittelt und weiter so behandelt als ob der Aufrufer die Liste übergeben hätte (siehe 2).
  4. ... (Es gibt mit Sicherheit noch weitere Möglichkeiten)
Die Frage ist daher eher, wie schaut dein Aufruf aus und was willst du am Ende erreichen?

Je nachdem welchen Ansatz man wählt hat man andere Vor- und Nachteile:
Bei 1 werden zum Beispiel je Materialnummer eigene Druckaufträge bzw. PDF/PCL-Dateien erzeugt.
Bei 2 und 3 sind alle Materialnummer in einem einzigen Druckauftrag bzw. PDF/PCL-Datei.
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: Adobe Formular mehrmals

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
hmm also es wäre so, dass in der VL71 jemand eine Liefernummer eingibt und ich aufgrund dessen die Daten ermittle. Nun kann es sein, dass es mehrere Datensätze gibt. Nun soll für jeden Datensatz separat ein Formular erstellt werden. Ich habe die Daten in der Schnittstelle ja am wickel, aber wie führe ich das genaus aus?

Vielen Dank im Voraus.

Re: Adobe Formular mehrmals

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
Leider kenne ich die VL71 nicht.
Aber wenn für jeden Datensatz ein separates Dokument erstellt werden soll, dann wirst du die Variante 1 umsetzen müssen. Sprich im User-Exit oder BAdI das von der VL71 für den Ausdruck aufgerufen wird, den Aufruf des Adobe-Formulars in einer Schleife über alle Datensätze ausführen.
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: Adobe Formular mehrmals

Beitrag von gregor84 (ForumUser / 9 / 1 / 1 ) »
Mir fallen da spontan zwei Lösungen ein:
1.
Meisten kann man das Druckprogramm im Customizing tauschen.
Eine Lösung könnte sein, ein neues Druckprogramm zu schreiben und dies einzutragen. Dann könnte man pro Materialnummer ein Dokument erstellen.
=> Die Lösung würde ich favorisieren, wenn das Formular und die Daten weit vom SAP-Standard-Programm entfernt sind,
2.
Ein Dokument erstellen, was im Ausdruck wie mehrere Dokumente aussieht.
Also Pro Materialnummer ein Seitenumbruch, eigener Seiten-Zähler, Kopfinformationen wiederholen etc. .....

Re: Adobe Formular mehrmals

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hmm also es wäre so, dass dies durch einen Chargensplit vorkommen kann. Ich habe die Daten ja in der Schnittstelle. Also sollte ich über ein Badi für die VL71 einen Loop programmieren, der für jedes Material den Aufruf von dem Adobe Formular erzeugt?

Hmm klingt ziemlich umständlich, gibt es da nicht eine einfachere Lösung?

Re: Adobe Formular mehrmals

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
Irgendwo musst du den "LOOP" aber trotzdem implementieren:
- Im Druckprogramm/BAdI damit du einzelne PDF- bzw. PCL-Dateien je Material erhältst.
- Im Formular damit du eine gemeinsame PDF- bzw. PCL-Datei für alle Materialien erhältst.
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: Adobe Formular mehrmals

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
hmm okay, ich glaube, ich weiß nicht ganz, wie ich da vorgehen soll.

Ich loope jetzt über die gt_lips drüber, in welcher Mehrere Datensätze drin sein können. Leider funktioniert es so nicht. Es wird trotzdem nur 1 erstellt : /.

Das wäre mein Code:

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*&      Form  entry
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RETURN_CODE  text
*      -->US_SCREEN    text
*----------------------------------------------------------------------*
FORM entry USING return_code us_screen.

  CLEAR retcode.
  xscreen = us_screen.
  PERFORM processing.
  IF retcode NE 0.
    return_code = 1.
  ELSE.
    return_code = 0.
  ENDIF.

ENDFORM.                    "entry

*---------------------------------------------------------------------*
*       FORM PROCESSING                                               *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM processing.

      TYPES: BEGIN OF ty_lips,
          kdmat TYPE lips-kdmat,
          matnr TYPE lips-matnr,
          vbeln TYPE lips-vbeln,
          lgmng TYPE lips-lgmng,
          charg TYPE lips-charg,
       END OF ty_lips.

  DATA: lv_docparams TYPE sfpdocparams,     "Doc Parameters
        lv_outparams TYPE sfpoutputparams,  "Output Parameters
        result       TYPE sfpjoboutput.     "Output parameter returned in job close

  DATA: lv_form_name TYPE fpwbformname,
        lv_fm_name   TYPE rs38l_fnam,
        lv_mess      TYPE string,
        l_cx_root    TYPE  REF TO cx_root.

  DATA: l_status  TYPE char1,
        l_mtart   TYPE mtart,
        l_maktx   TYPE maktx,
        l_name    TYPE tdobname,
        l_message TYPE na_kschl.

  DATA: t_lines TYPE tline_t,
        w_lines TYPE tline.

  DATA: gv_code TYPE char12.

  DATA: gt_lips TYPE TABLE OF ty_lips,
        gs_lips like line of gt_lips.

  CLEAR l_status.

fp_outputparams-preview = 'X'.

  PERFORM get_data.

SELECT kdmat, matnr, vbeln, lgmng, charg
  FROM lips
  INTO CORRESPONDING FIELDS OF TABLE @gt_lips
  WHERE vbeln = @gv_nast-objky
  and CHARG <> ''.

LOOP at gt_lips INTO gs_lips.

CALL FUNCTION 'FP_JOB_OPEN'
  CHANGING
    ie_outputparams       = fp_outputparams
 EXCEPTIONS
   cancel                = 1
   usage_error           = 2
   system_error          = 3
   internal_error        = 4
   OTHERS                = 5
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

TRY.
  CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
    EXPORTING
      i_name                     = form
    IMPORTING
      e_funcname                 = fm_name.
  CATCH cx_fp_api INTO lx_fp_api.
*    MESSAGE ID lx_fp_api->msgid TYPE lx_fp_api->msgty
*      NUMBER lx_fp_api->msgno
*        WITH lx_fp_api->msgv1 lx_fp_api->msgv2
*             lx_fp_api->msgv3 lx_fp_api->msgv4

    EXIT.
ENDTRY.

fp_docparams-langu = sy-langu.
SELECT SINGLE laiso
  FROM t002
  INTO cntry
  WHERE spras EQ sy-langu.
 fp_docparams-country = cntry.

 CALL FUNCTION fm_name
 EXPORTING
   /1bcdwb/docparams = fp_docparams
   is_nast  = gv_nast
   gs_lips  = gs_lips
   EXCEPTIONS
     usage_error = 1
     system_error = 2
     internal_error = 3.
IF sy-subrc <> 0.
ENDIF.


 PERFORM close_form_pdf .

ENDLOOP.

ENDFORM.                    "processing


*---------------------------------------------------------------------*
*       FORM GET_DATA                                                 *
*---------------------------------------------------------------------*
*       General provision of data for the form                        *
*---------------------------------------------------------------------*
FORM get_data.

  gv_nast = nast.

ENDFORM.                    "GET_DATA


*---------------------------------------------------------------------*
*      FORM close_form_pdf                                             *
*---------------------------------------------------------------------*
*                                                                     *
*---------------------------------------------------------------------*
FORM close_form_pdf .

CALL FUNCTION 'FP_JOB_CLOSE'
* IMPORTING
*   E_RESULT             =
 EXCEPTIONS
   usage_error          = 1
   system_error         = 2
   internal_error       = 3
   OTHERS               = 4
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

ENDFORM.                    " close_form_pdf

Re: Adobe Formular mehrmals

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
Allgemeine Anmerkungen:
Den Aufruf von FP_FUNCTION_MODULE_NAME müsstest du nicht in jedem Schleifendurchlauf machen. Einmal reicht.
Auch die Ermittlung der Sprache bzw. des Landes reicht einmalig.

Zum Problem:
Hast du geprüft ob zur Laufzeit auch tatsächlich mehr als ein Datensatz in "gt_lips" vorkommt?
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: Adobe Formular mehrmals

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Ja, es wären mehrere Datensätze drin. Allerdings durchläuft er die Schleife nur einmal und danach zeigt er mir das Formular an. Also das von dem ersten Datensatz, wenn ich auf Druckvorschau gehe : /.

Re: Adobe Formular mehrmals

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
Ja, das ist klar.
Und wenn du die Druckvorschau schließt sollte eigentlich der nächste Datensatz gedruckt und in der Druckvorschau angezeigt werden.
Außer das EXIT nach FP_FUNCTION_MODULE_NAME beendet die Schleife vorzeitig.
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: Adobe Formular mehrmals

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hmm nein, leider klappt es nicht.

Re: Adobe Formular mehrmals

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
Gibt es ne Fehlermeldung oder irgendetwas?
Ist der sy-subrc irgendwann nicht 0?
Wird die Schleife (im Debugger) irgendwo vorzeitig beendet?

Normalerweise sollte die Druckvorschau mit Aufruf des Funktionsbaustein des Formulars (oder mit FP_JOB_CLOSE) erfolgen und danach sollte das Programm weiter fortgesetzt werden.
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: Adobe Formular mehrmals

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Okay, ich habe es jetzt hinbekommen. Es wäre jetzt so, dass wenn man in die Druckvorschau reingeht, wird zuerst das erste aufgerufen und wenn man dann auf zurück klickt und dann wieder Druckvorschau klickt, wird das nächste aufgerufen usw.

Gibt es aber nicht die Möglichkeit, dass man nur einmal die Druckvorschau aufruft, und dann gleich mehrere Seiten hat?

Re: Adobe Formular mehrmals

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
Dazu musst du deine ganzen Daten (die Tabelle) über die Schnittstelle an das Druckformular übergeben und dann die Schleifenverarbeitung im Formular implementieren.

Siehe:
gregor84 hat geschrieben:
26.08.2021 08:18
2.
Ein Dokument erstellen, was im Ausdruck wie mehrere Dokumente aussieht.
Also Pro Materialnummer ein Seitenumbruch, eigener Seiten-Zähler, Kopfinformationen wiederholen etc. .....
Du musst dazu im Layout ein Teilformular im "Binding" mit deiner Tabelle aus dem Kontext verknüpfen und die "wiederholte Verarbeitung" aktivieren. Da ja mehrere Knoten (als Zeilen) in der Tabelle existieren wird somit auch das Teilformular entsprechend oft wiederholt. Alle Daten die pro Seite ausgegeben werden sollen landen unter diesem Teilformular. Das Teilformular erhält noch zusätzlich bei der Eigenschaften "nachfolgend" die Einstellung "Übergang auf neue Seite" und somit wird pro Zeile in der Tabelle eine neue Seite erzeugt.
Header und Footer kannst du im Teilformular machen oder auf der Masterseite, je nachdem ob Informationen zum Material dort aufscheinen sollen oder nicht.
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

Vergleichbare Themen

0
Antw.
338
Views
SAPScript Formular mehrmals drucken
von Interger » 18.08.2021 14:16 • Verfasst in ABAP® für Anfänger
3
Antw.
664
Views
Adobe Formular
von L0w-RiDer » 04.06.2021 11:49 • Verfasst in ABAP® für Anfänger
9
Antw.
706
Views
Adobe Formular erstellen
von L0w-RiDer » 31.05.2021 09:19 • Verfasst in ABAP® für Anfänger
8
Antw.
3013
Views
Adobe formular Daten finden
von Bright4.5 » 18.11.2020 16:53 • Verfasst in ABAP® für Anfänger
5
Antw.
679
Views
Adobe formular Textfeld verbinden
von L0w-RiDer » 09.12.2020 17:18 • Verfasst in ABAP® für Anfänger

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.