SMARTFORMS Seitenzahl bei einer Seite nicht anzeigen.

Getting started ... Alles für einen gelungenen Start.

SMARTFORMS Seitenzahl bei einer Seite nicht anzeigen.

Postby Pelin2735 » Thu Jul 18, 2013 11:48 am

Hallo,

ich habe das Problem, das ich die Ausgabe der Seitenzahl unterdrücken will, wenn das Dokument nur eine Seite hat. Ich möchte gerne "Seite 1 von 1" nicht anzeigen. Als Bedingung hab ich folgendes für das Textfeld definiert:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. SFSY-FORMPAGES > 1
GeSHi ©

Auf der 2. Seite zeigt er korrekt die Seitenzahl an, aber bei mehr als einer Seite im Dokument wird die Seitenzahl aufgrund der Bedingung nicht angezeigt.
Wenn ich die Bedingung aber rausnehme, dann wird sfsy-formpages korrekt angezeigt.
Pelin2735
..
..
 
Posts: 28
Joined: Wed Jan 16, 2013 2:13 pm

Re: SMARTFORMS Seitenzahl bei einer Seite nicht anzeigen.

Postby Tron » Fri Jul 19, 2013 2:24 pm

Moin.
Ich behaupte mal, dass die Seitenzahlen WÄHREND der Verarbeitung gar nicht zur Verfügung stehen, sondern erst NACHDEM das Formular prozessiert wurde (und somit klar ist, wieviele Seiten es geben wird) in das OTF-Spoolfile eingearbeitet wird.

gruß Jens
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Re: SMARTFORMS Seitenzahl bei einer Seite nicht anzeigen.

Postby Pelin2735 » Fri Jul 19, 2013 4:06 pm

Das ist auch meine Vermutung.
Bei dem Allgemeinen Eigenschaften einer Seite kann man ja den Seitenzähler auf den Modus fortlaufend Zählen einstellen.
Wahrscheinlich wird sfsy-formpage bei der Erstellung der Seite wie sfsy-page hochgezählt und nach Erstellung aller Dokumente des Formulars werden alle Vorkommen mit den korrekten Werten ersetzt. Somit hat sfsy-formpages wahrscheinlich in Bedingungen auf der ersten Seite immer den Wert 1, egal wie viele Dokumente/Seiten das Formular hat.

Hat jemand einen Vorschlag wie man das Problem lösen kann?
Pelin2735
..
..
 
Posts: 28
Joined: Wed Jan 16, 2013 2:13 pm

Re: SMARTFORMS Seitenzahl bei einer Seite nicht anzeigen.

Postby Tron » Sat Jul 20, 2013 11:24 am

Ja.
Ich habe eine Lösung, welche darauf basiert:
Einen Platzhalter im Formular Textknoten zu hinterlegen.(e.g. Seite $PAGE / $PAGES)
Das Smartform nicht direkt drucken zu lassen, sondern OTF zurückzugeben.
(dann hat man auch die Gesamtzahl der Seiten)
Anschliessend im OTF-Stream die Seitenzahlen gegen die Platzhalter austauschen und
den OTF Stream zum Drucken bzw. der Vorschau zu übergeben.
Beispiel:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. *&---------------------------------------------------------------------*
  2. *& Report  ZTEST_SF_OTF
  3. *&
  4. *&---------------------------------------------------------------------*
  5. *&
  6. *&
  7. *&---------------------------------------------------------------------*
  8.  
  9. REPORT  ztest_sf_otf.
  10.  
  11. DATA: fm_name TYPE rs38l_fnam,
  12.       gv_form TYPE tdsfname VALUE 'ZTEST_PLOT'.
  13.  
  14.       ls_document_output_info TYPE ssfcrespd,
  15.       ls_control_para TYPE ssfctrlop,
  16.       ls_outopt TYPE ssfcompop.
  17.  
  18. * OTF data
  19.       lt_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,
  20.       lt_otf_sf TYPE ssfcrescl,
  21.       lv_numbytes TYPE i,
  22.       result TYPE ssfpp.
  23.  
  24. DATA: rc TYPE i.
  25. DATA l_pc(3) TYPE c.
  26.  
  27. FIELD-SYMBOLS <p> TYPE itcoo.
  28.  
  29. SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-000.
  30. PARAMETERS tclip TYPE c RADIOBUTTON GROUP 3.
  31. PARAMETERS fclip TYPE c RADIOBUTTON GROUP 3 DEFAULT 'X'.
  32. SELECTION-SCREEN END OF BLOCK a.
  33.  
  34.  
  35. ls_control_para-langu = 'E'.
  36. ls_control_para-no_dialog = 'X'.
  37. ls_control_para-preview = space.
  38. ls_control_para-getotf = 'X'.
  39. ls_outopt-tddest = 'LP01'.
  40.  
  41.  
  42. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  43.   EXPORTING
  44.     formname           = gv_form
  45.   IMPORTING
  46.     fm_name            = fm_name
  47.   EXCEPTIONS
  48.     no_form            = 1
  49.     no_function_module = 2
  50.     OTHERS             = 3.
  51.  
  52.  
  53. CALL FUNCTION fm_name
  54.   EXPORTING
  55. *   ARCHIVE_INDEX        =
  56. *   ARCHIVE_INDEX_TAB    =
  57. *   ARCHIVE_PARAMETERS   =
  58.     control_parameters   = ls_control_para
  59. *   MAIL_APPL_OBJ        =
  60. *   MAIL_RECIPIENT       =
  61. *   MAIL_SENDER          =
  62.     output_options       = ls_outopt
  63.     user_settings        = ' '
  64.   IMPORTING
  65.     document_output_info = ls_document_output_info
  66.     job_output_info      = lt_otf_sf
  67. *   JOB_OUTPUT_OPTIONS   =
  68.   EXCEPTIONS
  69.     formatting_error     = 1
  70.     internal_error       = 2
  71.     send_error           = 3
  72.     user_canceled        = 4
  73.     OTHERS               = 5.
  74.  
  75. IF sy-subrc <> 0.
  76.   EXIT.
  77.  
  78. lt_otf[] = lt_otf_sf-otfdata[].
  79.  
  80. *in ls_document_output_info-TDFPAGES steht die Seitenzahl
  81.  
  82.  
  83. LOOP AT lt_otf ASSIGNING <p> WHERE
  84.    tdprintcom EQ 'ST' AND ( tdprintpar CS '$PAGE' OR tdprintpar CS '$PAGES' )
  85.   OR
  86.    tdprintcom EQ 'IN' AND tdprintpar(2) EQ '05' .
  87.  
  88.   IF <p>(4) EQ 'IN05'.
  89.     ADD 1 TO l_pc.
  90.   ELSE.
  91.     REPLACE '$PAGE'  IN <p>-tdprintpar WITH l_pc.
  92.     REPLACE '$PAGES' IN <p>-tdprintpar WITH ls_document_output_info-tdfpages.
  93.   ENDIF.
  94.  
  95.  
  96.  
  97.  
  98. IF NOT tclip IS INITIAL.
  99.   CALL METHOD cl_gui_frontend_services=>clipboard_export
  100.     IMPORTING
  101.       data                 = lt_otf[]
  102.     CHANGING
  103.       rc                   = rc
  104.     EXCEPTIONS
  105.       cntl_error           = 1
  106.       error_no_gui         = 2
  107.       not_supported_by_gui = 3
  108.       OTHERS               = 4.
  109.  
  110.   IF sy-subrc <> 0.
  111.   ENDIF.
  112.  
  113.  
  114.   REFRESH lt_otf.
  115.   CALL METHOD cl_gui_frontend_services=>clipboard_import
  116.     IMPORTING
  117.       data                 = lt_otf[]
  118. *     length               =
  119.     EXCEPTIONS
  120.       cntl_error           = 1
  121.       error_no_gui         = 2
  122.       not_supported_by_gui = 3
  123.       OTHERS               = 4.
  124.  
  125.   IF sy-subrc <> 0.
  126.   ENDIF.
  127.  
  128.  
  129. CALL FUNCTION 'SSFDISPLAY_OTF'
  130. * EXPORTING
  131. *   DISPLAY_PARAMETERS       =
  132. *   ARCHIVE_PARAMS           =
  133. *   SPOOLATTR                =
  134. *   SHOW_DIALOG              = ' '
  135. * IMPORTING
  136. *   RESULT                   =
  137.     otf                      = lt_otf[]
  138.  EXCEPTIONS
  139.    error                    = 1
  140.    OTHERS                   = 2.
  141.  
  142. IF sy-subrc <> 0.
  143.  
  144.  
  145.  
  146.  
  147. ** ===============OK===========================
  148. *
  149. *data ls type SSFPP.
  150. *ls-TDDEST = ls_outopt-tddest..
  151. *ls-TDIMMED = 'X'.
  152. *ls-TDDELETE = ' '.
  153. *
  154. *CALL FUNCTION 'SSFPRINT_OTF'
  155. *  EXPORTING
  156. *    printoptions           = ls
  157. ** IMPORTING
  158. **   OTF_PRINTER            =
  159. **   OTF_DEVICETYPE         =
  160. **   PRINT_SUCCESSFUL       =
  161. **   SPOOLID                =
  162. *  tables
  163. *    otf                    = lt_otf.
  164. ** ============================================
  165.  
  166.  
  167. ** ==================OK========================
  168. *DATA ls TYPE itcpo.
  169. *
  170. *ls-tddest = ls_outopt-tddest.
  171. *ls-tdimmed  = ' '.
  172. *ls-tddelete = ' '.
  173. *
  174. *
  175. *CALL FUNCTION 'PRINT_OTF'
  176. *  EXPORTING
  177. *    printoptions           = ls
  178. ** IMPORTING
  179. **   OTF_PRINTER            =
  180. **   OTF_DEVICETYPE         =
  181. **   PRINT_SUCCESSFUL       =
  182. **   SPOOLID                =
  183. *  TABLES
  184. *    otf                    = lt_otf.
  185. ** ============================================
  186.  
GeSHi ©


Zu Übungszwecken habe ich eine Clipboard Funktion eingebaut, damit man ein wenig experimentieren und den OTF-Stream in einen Texteditor "pasten" kann.
Die inaktiven Abschnitte enthalten die Übergabe des OTFs an den Spool zum Drucken.

viel Spass beim Experimentieren
lg Jens
siehe auch
http://help.sap.com/saphelp_40b/helpdat ... ontent.htm
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Re: SMARTFORMS Seitenzahl bei einer Seite nicht anzeigen.

Postby Tron » Sat Jul 20, 2013 8:56 pm

... und nochmal zusammen Style plus Form...
und eine bessere Dokumentation(PDF)
https://www.sdn.sap.com/irj/scn/index?r ... ayout=true
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Re: SMARTFORMS Seitenzahl bei einer Seite nicht anzeigen.

Postby Pelin2735 » Mon Jul 22, 2013 8:33 am

Vielen Dank für deine umfangreiche Antwort!

Habe mir jetzt auch noch die Schulungsunterlagen von SmartForms(BC470) geben lassen. Da ist dieses Verfahren bei den Übungsaufgaben zu Kapitel 3 wie folgt beschrieben:

2 Seiten erzeugen, zum Bsp. FIRST und NEXT
Folgeseite von FIRST ist NEXT, und NEXT hat sich selbst als Folgeseite
Die Seitenzahl wird im Fenster PAGE angezeigt, welches nicht auf FIRST vorhanden ist.

lg Stefan
Pelin2735
..
..
 
Posts: 28
Joined: Wed Jan 16, 2013 2:13 pm

Re: SMARTFORMS Seitenzahl bei einer Seite nicht anzeigen.

Postby Tron » Mon Jul 22, 2013 11:46 am

Moin.
Die Seitenzahl wird im Fenster PAGE angezeigt, welches nicht auf FIRST vorhanden ist.

Ja, dann hast Du niemals eine Seitenzahl auf der ersten Seite ! :wink:
gruß Jens
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Re: SMARTFORMS Seitenzahl bei einer Seite nicht anzeigen.

Postby Pelin2735 » Mon Jul 22, 2013 11:59 am

Ja ich weiss, das ist mir irgendwie auch gerade aufgefallen!
Freitag schonmal an die Möglichkkeit gedacht, aber eben desswegen verworfen. Und heute morgen kams mir wie DIE Idee vor...! ;)

Probiere dann nochmal deinen Weg aus!
gruß Stefan
Pelin2735
..
..
 
Posts: 28
Joined: Wed Jan 16, 2013 2:13 pm

Re: SMARTFORMS Seitenzahl bei einer Seite nicht anzeigen.

Postby Pelin2735 » Tue Jul 23, 2013 8:58 am

Hab jetzt die Möglichkeit gefunden, die von SAP vorgesehen ist.
Vor Basis Release 6.1 (siehe Hinweis 359009) musste man das noch über manuelles Post-Processing machen!
Unter Seitenknoten ein Fenster mit nur einen Codezeilen-Element mit folgenden Quelltext:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. DATA: l_subrc TYPE sy-subrc.
  2.  
  3. PERFORM set_late_window
  4.       IN PROGRAM saplstxbc
  5.       USING 'PAGENO'
  6.       CHANGING l_subrc.
  7.  
GeSHi ©

Wobei PAGENO der Name des Fensters ist, das Nachprozessiert werden soll.
Diese Variante wird allerdings bei neueren SAP-Versionen mit einem Laufzeitfehler quittiert und darf nicht mehr eingesetzt werden.

Jetzt gibt es einfach den Fenstertyp Abschlussfenster. Diese Fensterart wird nachprozessiert und damit kann sfsy-formpages auch in der Bedingung des Fensters korrekt eingesetzt werden.

lg Stefan
Pelin2735
..
..
 
Posts: 28
Joined: Wed Jan 16, 2013 2:13 pm


Return to ABAP® für Anfänger

Who is online

Users browsing this forum: No registered users and 5 guests