[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jan 2005
    Beiträge
    90

    Question SQLRPGLE und Printerfile

    Folgendes Problem.

    Ich schreibe mit einem SQLRPGLE-Programm Daten in eine Printerfile.
    Die Printerfile hat folgende Informationen:

    Code:
                              Druckerdatei ändern (CHGPRTF)                         
                                                                                    
     Auswahl eingeben und Eingabetaste drücken.                                     
                                                                                    
     Datei  . . . . . . . . . . . . . > PRTOMSXML     Name, generisch*, *ALL        
       Bibliothek . . . . . . . . . .     *LIBL       Name, *LIBL, *ALL, *ALLUSR... 
     Einheit:                                                                       
       Drucker  . . . . . . . . . . .   *JOB          Name, *SAME, *JOB, *SYSVAL    
     Druckereinheitentyp  . . . . . .   *SCS          *SAME, *SCS, *IPDS, *LINE...  
     Seitengröße:                                                                   
       Länge--Zeilen pro Seite  . . .   255           .001-255.000, *SAME           
       Breite--Stellen pro Zeile  . .   378           .001-378.000, *SAME           
       Maßangabe  . . . . . . . . . .   *ROWCOL       *SAME, *ROWCOL, *UOM          
     Zeilen pro Zoll  . . . . . . . .   6             *SAME, 6, 3, 4, 7.5, 7,5...   
     Zeichen pro Zoll . . . . . . . .   10            *SAME, 10, 5, 12, 13.3, 13... 
     Überlaufzeile  . . . . . . . . .   255           1-255, *SAME                  
     Satzformat-Aktualitätsprüfung  .   *NO           *SAME, *YES, *NO              
     Text 'Beschreibung'  . . . . . .                                               
    Auswahl eingeben und Eingabetaste drücken.                                     
                                                                                   
                                                                                   
                     Zusätzliche Parameter                                         
                                                                                   
    Rand auf der Vorderseite:                                                      
      Oberer Seitenrand  . . . . . .   *DEVD         0-57.790                      
      Linker Seitenrand  . . . . . .                 0-57.790                      
    Rand auf der Rückseite:                                                        
      Oberer Seitenrand  . . . . . .   *FRONTMGN     0-57.790                      
      Linker Seitenrand  . . . . . .                 0-57.790                      
    Satzumbruch  . . . . . . . . . .   *NO           *SAME, *NO, *YES              
    Maßnahme bei undruckb. Zeichen:                                                
      Zeichen ersetzen . . . . . . .   *YES          *SAME, *YES, *NO              
      Ersatzzeichen  . . . . . . . .   ' '           40-FE, *SAME, *BLANK          
    Seite ausrichten . . . . . . . .   *NO           *SAME, *NO, *YES              
    Steuerzeichen  . . . . . . . . .   *NONE         *SAME, *NONE, *FCFC, *MACHINE 
    Kanalwerte:                                                                    
      Kanal  . . . . . . . . . . . .   *NORMAL       *SAME, *NORMAL, 1, 2, 3, 4... 
      Zeilennummer für Kanal:                                                      
      Leitung  . . . . . . . . . . .                 1-255                         
         + für weitere Werte                                                       
    Genauigkeit  . . . . . . . . . .   *CONTENT      *SAME, *CONTENT, *ABSOLUTE    
    Druckqualität  . . . . . . . . .   *STD          *SAME, *STD, *DEVD, *DRAFT... 
    Papierzufuhr . . . . . . . . . .   *DEVD         *SAME, *DEVD, *AUTOCUT...     
    Papierfach . . . . . . . . . . .   00001         1-255, *SAME, *E1, *FORMDF    
    Ausgabefach  . . . . . . . . . .   *DEVD         1-65535, *SAME, *DEVD         
    Schriftart:                                                                    
      Kennung  . . . . . . . . . . .   *CPI          Zeichenwert, *SAME, *CPI...   
      Punktgröße . . . . . . . . . .                 000.1-999.9, *NONE            
    Zeichen-ID:                                                                    
      Grafikzeichensatz  . . . . . .   *DEVD         Zahl                          
      Codepage . . . . . . . . . . .                 Zahl                          
    Dezimalformat  . . . . . . . . .   *JOB          *SAME, *FILE, *JOB         
    Schriftartzeichensatz:                                                      
      Zeichensatz  . . . . . . . . .   *FONT         Name, *SAME, *FONT         
        Bibliothek . . . . . . . . .                 Name, *LIBL, *CURLIB       
      Codepage . . . . . . . . . . .                 Name                       
        Bibliothek . . . . . . . . .                 Name, *LIBL, *CURLIB       
      Punktgröße . . . . . . . . . .                 000.1-999.9, *NONE         
    Codierte Schriftart:                                                        
      Codierte Schriftart  . . . . .   *FNTCHRSET    Name, *SAME, *FNTCHRSET    
        Bibliothek . . . . . . . . .                 Name, *LIBL, *CURLIB       
      Punktgröße . . . . . . . . . .                 000.1-999.9, *NONE         
    Tabellenverweiszeichen . . . . .   *NO           *SAME, *YES, *NO           
    Seitendefinition . . . . . . . .   *NONE         Name, *SAME, *NONE         
      Bibliothek . . . . . . . . . .                 Name, *LIBL, *CURLIB       
    Formulardefinition . . . . . . .   *NONE         Name, *SAME, *NONE, *DEVD  
      Bibliothek . . . . . . . . . .                 Name, *LIBL, *CURLIB       
    AFP-Zeichen  . . . . . . . . . .   *NONE         Zeichenwert, *SAME, *NONE    
         + für weitere Werte                                                      
    Grad der Seitendrehung . . . . .   *AUTO         *SAME, *AUTO, *DEVD, *COR... 
    Log. Seiten pro phy. Seite . . .   1             1-4, *SAME                   
    Ausgabe verkleinern  . . . . . .   *TEXT         *SAME, *TEXT, *NONE          
    Drucktext  . . . . . . . . . . .   *JOB                                       
    Hardwareausrichtigung  . . . . .   0             *SAME, 0, 50, 100            
    Beidseitig drucken . . . . . . .   *NO           *SAME, *NO, *YES, *TUMBLE... 
    Schreiben verzögern  . . . . . .   *YES          *SAME, *YES, *NO             
    Maßeinheit . . . . . . . . . . .   *INCH         *SAME, *INCH, *CM            
    Schablone für Vorderseite:                                                    
      Schablone  . . . . . . . . . .   *NONE         Name, *NONE, *SAME           
        Bibliothek . . . . . . . . .                 Name, *LIBL, *CURLIB         
      Oberer Seitenrand  . . . . . .                 0-57.790, *SAME              
      Linker Seitenrand  . . . . . .                 0-57.790, *SAME              
    Schablone für Rückseite:                                                       
      Schablone  . . . . . . . . . .   *FRONTOVL     Name, *FRONTOVL, *NONE, *SAME 
        Bibliothek . . . . . . . . .                 Name, *LIBL, *CURLIB          
      Oberer Seitenrand  . . . . . .                 0-57.790, *SAME               
      Linker Seitenrand  . . . . . .                 0-57.790, *SAME               
      Konstante Rückseite  . . . . .                 *NOCONSTANT, *CONSTANT, *SAME 
    Zeilendaten konvertieren . . . .   *NO           *NO, *YES, *SAME              
    IPDS-Durchgriff  . . . . . . . .   *DEVD         *DEVD, *NO, *YES, *SAME       
    Liste d. Benutzerressourc.bib.     *DEVD         Name, *DEVD, *NONE...         
         + für weitere Werte                                                       
    Eckklammer . . . . . . . . . . .   *NONE         *NONE, *BOTRIGHT...           
    Randheftung:                                                                   
      Bezugskante  . . . . . . . . .   *NONE         *NONE, *DEVD, *BOT, *RIGHT... 
      Abstand zur Bezugskante  . . .                 0-57.790, *DEVD, *SAME        
      Anzahl Klammern  . . . . . . .                 1-122, *DEVD, *SAME           
      Klammernabstand  . . . . . . .                 0-57.790, *DEVD, *SAME        
         + für weitere Werte                                                       
    Sattelheftung:                                                                 
      Bezugskante  . . . . . . . . .   *NONE         *NONE, *TOP, *LEFT, *DEVD...  
      Anzahl Klammern  . . . . . . .                 1-122, *DEVD, *SAME           
      Klammernabstand  . . . . . . .                 0-57.790, *DEVD, *SAME        
         + für weitere Werte                                                       
    Schriftartauflösung f. Format.     *DEVD         *DEVD, *SEARCH, 240, 300...   
    Spool-Verarbeitung der Daten . .   *YES          *SAME, *YES, *NO              
    Spool-Ausgabewarteschlange . . .   OMS           Name, *SAME, *JOB, *DEV       
      Bibliothek . . . . . . . . . .     *LIBL       Name, *LIBL, *CURLIB          
    Formularart  . . . . . . . . . .   *STD          Zeichenwert, *SAME, *STD      
    Kopien . . . . . . . . . . . . .   1             1-255, *SAME                  
    Verfallsdatum für Datei  . . . .   *NONE         Datum, *DAYS, *NONE, *SAME    
    Tage bis zum Verfall der Datei                   1-366                         
    Zu druckender Seitenbereich:                                                   
      Anfangsseite . . . . . . . . .   1             Zahl, 1, *SAME, *ENDPAGE      
      Endseite . . . . . . . . . . .   *END          Zahl, *SAME, *END             
    Max. Anzahl Spool-Ausgabesätze     20000000      1-99999999, *SAME, *NOMAX     
    Dateitrennseiten . . . . . . . .   0             0-9, *SAME                    
    Zeitplan für Spool-Ausgabe . . .   *FILEEND      *SAME, *FILEEND, *JOBEND...   
    Spool-Datei anhalten . . . . . .   *NO           *SAME, *NO, *YES              
    Spool-Datei sichern  . . . . . .   *NO           *SAME, *NO, *YES              
    Ausgabepriorität (in OUTQ) . . .   *JOB          *SAME, *JOB, 1, 2, 3, 4, 5... 
    Benutzerdaten  . . . . . . . . .   *SOURCE       Zeichenwert, *SAME...         
    Spool-Dateieigner  . . . . . . .   *CURUSRPRF    *SAME, *CURUSRPRF, *JOB...    
    Benutzerdefinierte Auswahl . . .   *NONE         Zeichenwert, *SAME, *NONE     
         + für weitere Werte                                                       
     Benutzerdefinierte Daten . . . .   *NONE                                       
                                                                                    
                                                                                    
                                                                                    
     Benutzerdefiniertes Objekt:                                                    
       Objekt . . . . . . . . . . . .   *NONE         Name, *SAME, *NONE            
         Bibliothek . . . . . . . . .                 Name, *LIBL, *CURLIB          
       Objektart  . . . . . . . . . .                 *SAME, *DTAARA, *DTAQ...      
     Zieldatenstromdatei  . . . . . .   *SAME                                       
                                                                                    
     Datenstationsanpassungsobjekt  .   *NONE         Name, *SAME, *NONE, *PDF      
       Bibliothek . . . . . . . . . .                 Name, *LIBL, *CURLIB          
     Maximale Dateiwartezeit  . . . .   *IMMED        Sekunden *SAME, *IMMED, *CLS  
     Off. Datenpfad gemeinsam ben.  .   *NO           *SAME, *NO, *YES
    Die Printerfile ist ganz normal in der F-Bestimmung definiert.
    Code:
    FPRTOMSXML O    F  198        PRINTER USROPN
    Das SQLRPGLE-Programm ermittelt Daten und bearbeitet mittels SQL-Funktionen einen String.
    Der String wird von Sonderzeichen befreit und baut ein XML auf.
    Für das XML nutzen wir keine System i-Funktionen sondern bauen das händig auf.
    Wir setzen im Programm die Anfang und Endetags selbstständig.

    Das Austauschen von den Sonderzeichen bzw. ungültigen Zeichen erfolgt mit folgender Funktionen:
    Code:
    C*----------------------------------------------------------------          
    C**  C O N V E 2    SUCHE und ERSETZE ungewünschte Zeichen                  
    C*----------------------------------------------------------------          
    C     CONVE2        BEGSR                                                   
    C**                                                                         
    C/EXEC SQL                                                                  
    C+ Set :$RESULT = Replace(Trim(:$RESULT), :$FIND, Trim(:$REPLACE))          
    C/END-EXEC                                                                  
    C**                                                                         
    C                   ENDSR
    Und die Ausgabe in die Printerfile bzw. die Ausgabe der Spooldaten erfolgt normal über die O-Bestimmungen:
    Code:
    OPRTOMSXML E            EXCXML         1                    
    O                       XMLSTR             198
    Eins noch.
    Ich weiß das man sicherlich besser ein XML transportieren kann.
    Hier habe ich leider den "Krieg" verloren und ich MUSS das XML über einen Spoolstream ausgeben.

    Nun zu meinem Problem:

    Es kommt immer wieder mal vor, dass das Drucken ewig dauert.
    Was zur Folge hat, das weitere Jobs/Prozesse die folgen, entsprechend verzögert werden.

    Ich finde leider nichts auffälliges, was uns da an der Stelle stören könnte.
    Eventuelle Arbeitsspitzen auf dem System kann ich auch ausschließen, weil ich es auch Nachts versucht habe, wo ich alleine auf dem System war, alle Sicherungsjobs durch waren und das System am "schlafen" war.

    Ich hoffe wir finden ein paar Ansätze =)

    Danke euch allen =)

  2. #2
    Registriert seit
    Dec 2014
    Beiträge
    310
    Ich denke, dass da eine Analyse des betreffenden Jobs zielführender ist, um das Problem einzugrenzen.

    Wenn Du also das nächste mal diesen Job ausführst, dann einfach vorher STRDBG eingeben (ohne weiterer Parameter, höchstens UPDPROD(*YES)) und dann das Joblog ansehen.
    Durch das STRDBG siehst Du da dann auch die detaillierten SQL-Analysen.
    (falls der Job in Batch läuft: Vorher den Job mit STRSRVJOB (xx/xx/xx) zuordnen)

  3. #3
    Registriert seit
    Apr 2005
    Beiträge
    385
    Also wenn der "Suchen&Ersetzen" das einzige SQL-Statement im Programm ist, würde ich es ausbauen und die BuildIn-Function %SCANRPL nutzen, ist performanter...

    Hier der Link zur Beschreibung

    Wie groß wird denn der Spool am Ende?

  4. #4
    Registriert seit
    Jan 2005
    Beiträge
    90
    Hallo hel400,

    danke für den Hinweis.
    Das Habe ich jetzt durchgeführt.
    Ich habe es interaktiv aufgerufen.
    Parallel dazu habe ich noch die Jobprotokollierung hoch geschraubt.

    Dabei erhalte ich (gefühlte) millionen mal folgenden Eintrag:
    Code:
    Return Code = 00000000000000000000000000000000 
    Return SubCode = 00000                         
    Anweisung SET beendet.
    Die Konsequenz daraus ist, das ich einen überlauf vom Joblog bekomme.
    Code:
    Überlauf der Jobnachrichtenwarteschlange für 432435/TOSCHIE/QPADEV0009 erlaubt.
    Ist das aus der SQL-Funktion?
    Kann man das unterdrücken? =)

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Im Debugmodus werden diese Meldungen ins Joblog geschrieben und lassen sich auch nicht unterdrücken.
    Wenn du dann einen Überlauf des Joblogs bekommst wird normalerweise (Modus *WRAP) halt ein Joblog gedruckt und weitergemacht.
    Der Prozess wird allerdings stark verlangsamt.

    Das Hochschrauben der Jobprotokollierung hat nur einen Effekt, wenn das Joblog auch tatsächlich ausgegeben wird. Im aktiven Joblog sieht man immer alle Meldungen.

    Das Drucken ist sicherlich nicht das Problem sondern der Rest des Programmes.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Jan 2005
    Beiträge
    90
    Hallo ExAzubi,

    danke für den Hinweis.
    Diese Funktion hatte ich damals schon gefunden, aber nie ans Laufen bekommen.
    Wenn ich
    Code:
     /free                                                                     
       result = %ScanRpl ('NAME' : 'Tom' : string1);                           
     /End-Free
    implementiere, dann erhalte ich die Meldung:
    Das Token ist ungültig; das Token wird ignoriert.

    Und der Cursor springt an das %-Zeichen.
    Andere Funktionen wie z.B.
    Code:
    result = %replace ('Toronto': result);
    funktionieren.

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das liegt an der fehlenden Unterstützung des Editors.
    Ignorieren und Compilieren, solange der Compiler nicht meckert ist das OK.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Jan 2005
    Beiträge
    90
    Haha Danke
    Ich Genie

    Also die Funktion ist nun drin und es geht etwas schneller.
    Das ist schon mal gut!

    Was mir jetzt aufgefallen ist, das ein CL ständig einen OVRDB und einen DLTOVR macht.
    Wir drucken hier im Batch und benötigen die OVR.
    Kann ich irgendwie prüfen, ob der Job bereits eine Überschreibung auf eine gewisse Datei hat?

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das gibt es schon per API.
    Allerdings kostet dieser keine Performance solange die Datei nicht auch ständig auf und zu gemacht wird.
    Das CL kann aber andererseits per DTAARA in der QTEMP vermerken dass der OVR schon aktiv ist.
    Problematisch wird es dann wenn dann irgendwo ein DLTOVR *ALL läuft.

    Die Frage ist wirklich, wo dein Programm die Performance verliert.
    Welche Routine ist eben langsam und wird 1000de Male pro Write-Spool ausgeführt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Jan 2005
    Beiträge
    90
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Im Debugmodus werden diese Meldungen ins Joblog geschrieben und lassen sich auch nicht unterdrücken.
    Wenn du dann einen Überlauf des Joblogs bekommst wird normalerweise (Modus *WRAP) halt ein Joblog gedruckt und weitergemacht.
    Der Prozess wird allerdings stark verlangsamt.

    Das Hochschrauben der Jobprotokollierung hat nur einen Effekt, wenn das Joblog auch tatsächlich ausgegeben wird. Im aktiven Joblog sieht man immer alle Meldungen.

    Das Drucken ist sicherlich nicht das Problem sondern der Rest des Programmes.

    Hallo Fuerchau,

    danke für dein Kommentar.
    Ich hatte leider einen krankheitsbedingten totalausfall

    Wollte mich erstmal für alle Hinweise bedanken!
    Die API funktioniert schon wunderbar =)

    eine Frage noch an dich Fuerchau:
    Was genau meinst du mit
    Im Debugmodus werden diese Meldungen ins Joblog geschrieben und lassen sich auch nicht unterdrücken.
    Danke an alle =)

  11. #11
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von Toschie Beitrag anzeigen
    eine Frage noch an dich Fuerchau:
    Was genau meinst du mit
    Im Debugmodus werden diese Meldungen ins Joblog geschrieben und lassen sich auch nicht unterdrücken.
    Wenn der der Job unter DEBUG läuft (STRDBG) schreibt SQL eine Fülle an Informationen ins Joblog.
    Damit dann das Joblog nicht überläuft, musst du im Job definieren was in solch einem Fall gemacht werden soll (z.B. *WRAP)

    lg Andreas

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    SQL wird im Debug-Modus halt sehr gesprächig, was auch gut so ist.
    Ohne Debug-Modus lassen sich SQL-Hinweise per QAQQINI auch aktivieren, könnte aber eben zu den Joblogproblemen führen.
    Ich hatte da halt mal einen Fall, dass das Joblog auf 16MB beschränkt war, die SQL-Hinweise per QAQQINI aktiv, was zur Folge hatte, dass in wenigen Sekunden mehr als 1000 Joblogs erstellt wurden (auch die kosten Zeit), da eben SQL äußerst gesprächig war.
    Hauptursache war hier, dass für einen Select kein NULL-Anzeiger gesetzt wurde was im Joblog protokolliert wurde, dem Programm aber egal war (die Variable wurde eben vorher initialisiert).
    Die Laufzeit war daher mehrere Minuten. Nach einsetzen des NULL-Anzeigers lief das Programm nur noch Sekunden und es wurden auch keine Joblogs produziert.

    Das Problem ist doch, dass jede gesendete Nachricht erst mal im Speicher-Joblog aufgezeichnet wird.
    Dies gilt unabhängig von der LOGLVL-Einstellung!
    Diese zieht erst, wenn denn tatsächlich ein Joblog in den Spool ausgegeben wird und dann ist das der Filter für die Nachrichten.
    Wäre dem nicht so, könnte man per Programm z.B. nicht mehr per RCVMSG auf "Complete"-Nachrichten gehen um dort enthaltene Informationen auszulesen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. SQLRPGLE und offene Dateien
    By Tonazzo in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 16-06-14, 09:30
  2. Pfeile hoch/runter/rechts/links im AFPDS Printerfile
    By andigoering in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 24-01-03, 09:11
  3. Printerfile breiter als 255
    By Henry in forum NEWSboard Drucker
    Antworten: 1
    Letzter Beitrag: 03-06-02, 18:57
  4. AFPDS-Printerfile
    By awellen in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 04-04-02, 12:01
  5. Compilierung SQLRPGLE
    By B.Hauser in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 01-10-01, 17:31

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •