Seitenanzahl ermitteln

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Antworten
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Seitenanzahl ermitteln

Beitrag von Dominik Krebs »

Hallo zusammen,
Wie ermittelt ihr die Seitenanzahl eures Ausdrucks, ohne die Anzahl bei Druckbeginn zu kennen?

Ich verwende keinen Report Generator.

Aktuell versuche ich die Druck Prozedur einfach 2x zu durchlaufen, und einmal "ins Leere zu Drucken". Kann das überhaupt funktionieren?
Gruß Dominik
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Seitenanzahl ermitteln

Beitrag von Jan »

Hallo Dominik,

das kommt ja immer darauf an was gedruckt werden soll. Wenn man die Anzahl der Zeilen kennt kann man sich die Seitenzahl ja vorher ausrechnen.

Wobei ich bei Ausdrucken wie bei Dialogen immer TopLeft starte, nicht BottomLeft, wie Xbase++ das standardmäßig macht. Das erleichtert das Leben ganz ungemein.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Seitenanzahl ermitteln

Beitrag von Dominik Krebs »

Hallo Jan,
da eine Rechnung erstellt wird kenne ich die Zeilenanzahl vorher nicht.
Top left starte ich tatsächlich auch.

Kann ich denn in einen PresSpace drucken der kein Printer ist und somit den ersten Druck verwerfen?
Gruß Dominik
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Seitenanzahl ermitteln

Beitrag von Jan »

Hallo Dominik,

aber bei einer Rechnung kennst Du doch vorab die Anzahl der Positionen, oder? Wenn Du dann noch weißt wie hoch unten der Seitenfuß ist, und auf der ersten Seite und den Folgeseiten (da ist der Kopf ja meistens nicht so hoch) wo die Positionen beginnen, kannst Du das ausrechnen. Da du die Höhe der Zeilen aus dem Font auslesen kannst weißt Du auch, wie viel Platz jede Zeile braucht. Und kannst errechnen, wie viele Zeilen Du in den verbleibenden Platz rein bekommst.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Seitenanzahl ermitteln

Beitrag von brandelh »

Dominik Krebs hat geschrieben: Mo, 30. Nov 2020 22:28 Hallo Jan,
da eine Rechnung erstellt wird kenne ich die Zeilenanzahl vorher nicht.
Top left starte ich tatsächlich auch.
Kann ich denn in einen PresSpace drucken der kein Printer ist und somit den ersten Druck verwerfen?
also gerade bei Rechnungspositionen ist doch eine Zeile eine Rechnungsposition ... dann sollte es einfach auszurechnen sein, aber zur eigentlichen Frage ...
Ich habe in meiner Druckerklasse eine Vorschau und wenn die Seite 5 gedruckt werden soll, fange ich auf Seite 1 an, aber die Befehle werden intern nicht an den Drucker presentation space weitergegeben (das weil z.B. evtl. wegen Blocksatz und freie Texte eine Zeilenzahl nicht bekannt ist).

Es ist ja nicht so, dass man fixe Zeilenvorschübe wie früher hat oder die Schriftgröße fix wäre ...

2 Durchläufe (einmal ohne Druckausgabe) sind der richtige Weg, wenn man die Anzahl nicht einfach abschätzen kann.
Gruß
Hubert
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Seitenanzahl ermitteln

Beitrag von Dominik Krebs »

So einfach ist es leider nicht.
Eine Zeile ist leider nicht eine Position.
Eine Rechnungsposition besteht aus einem Memo Feld und ist von der länger leider nicht abzuschätzen. Erst nach dem Durchlauf weiß ich wie lange die Position tatsächlich wird.

Kann ich dem oPrinter denn einfach einen anderen PresSpace zuweisen der nicht auf den Drucker zeigt?

Ich verwende die @ SAY Befehle um eine Druckausgabe zu erzeugen. Klappt das dann überhaupt noch?
Gruß Dominik
Benutzeravatar
BJelinek
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 218
Registriert: Sa, 02. Jun 2012 20:57
Wohnort: 73257 Köngen
Hat sich bedankt: 9 Mal
Danksagung erhalten: 3 Mal

Re: Seitenanzahl ermitteln

Beitrag von BJelinek »

Hallo Dominik,

druckst Du über set printer to LPTn n=1 to 9

Dann im ersten Durchgang set printer to nul ( Drucken ins Dirwana wie ich immer sage)

Dabei die Seiten mit zählen.

Die folgenden Durchgänge mit dem richtigen set printer to xxxxxx

So mache ich es in meinem Programm, da ich mit GUI=NO keinen WINDOWS-Drucker
unterstützen kann. (Ich lasse mich gern eines besseren belehren.)
Grüße
Bernd

Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Seitenanzahl ermitteln

Beitrag von Jan »

Dominik,

aber auch bei Memofeldern weist Du ja, wie viele Zeilen dabei zusammen kommen. MLCount() gibt Dir die für jedes Feld an. Für alle Datensätze der Rechnung zusammen addieren, und fertig.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Seitenanzahl ermitteln

Beitrag von Dominik Krebs »

BJelinek hat geschrieben: Di, 01. Dez 2020 19:00 Hallo Dominik,

druckst Du über set printer to LPTn n=1 to 9

Dann im ersten Durchgang set printer to nul ( Drucken ins Dirwana wie ich immer sage)

Dabei die Seiten mit zählen.

Die folgenden Durchgänge mit dem richtigen set printer to xxxxxx

So mache ich es in meinem Programm, da ich mit GUI=NO keinen WINDOWS-Drucker
unterstützen kann. (Ich lasse mich gern eines besseren belehren.)
Ja, das werde ich mal versuchen, danke.
Drücke über die tbxWinPrint Klasse, wusste nicht das man den Drucker auf nul setzen kann.


@Jan
Leider ist der Kopf sowie der Fuß Bereich variable und abhängig von mehren Faktoren wie beispielsweise Banner, Fußzeile, mehrere individuelle Rechnungszusätze. Das sind mir dann doch zu viele Dinge ich ich berücksichtigen müsste und die Anzahl der Seiten "zu raten".
Die Rechnung besteht ja nicht nur aus Positionen.
Gruß Dominik
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Seitenanzahl ermitteln

Beitrag von brandelh »

Dominik Krebs hat geschrieben: Di, 01. Dez 2020 17:57 Ich verwende die @ SAY Befehle um eine Druckausgabe zu erzeugen. Klappt das dann überhaupt noch?
damit nimmt man sich Flexibilität und handelt sich nichts als Ärger ein.
Clipper und Zeilendrucker konnten nicht viel und warum soll man sich darauf beschränken ?
Dominik Krebs hat geschrieben: Di, 01. Dez 2020 17:57 Kann ich dem oPrinter denn einfach einen anderen PresSpace zuweisen der nicht auf den Drucker zeigt?
Natürlich, so mache ich auch meine Vorschau, ABER das ist doch gar nicht nötig !
Dominik Krebs hat geschrieben: Di, 01. Dez 2020 17:57 So einfach ist es leider nicht.
Eine Zeile ist leider nicht eine Position.
Eine Rechnungsposition besteht aus einem Memo Feld und ist von der länger leider nicht abzuschätzen. Erst nach dem Durchlauf weiß ich wie lange die Position tatsächlich wird.
egal wie man druckt XbpPrinter(), HBPrinter() *** meine Empfehlung *** oder @ SAY bzw. ?
Wichtig ist, dass man der Druckfunktion per Parameter beibringt, ob sie tatsächlich drucken soll oder ob der Durchlauf nur für die Berechnung (also nötige Zeilenzahl) ist.

In meiner Klasse kümmere ich mich intern um die ganzen Sachen, auch um das Drucken von Memofeldern und berücksichtigt auch die Hardwareränder.

HBPrinter in der Wissensbasis :arrow: viewtopic.php?p=767#p767

ich liefere viele Beispiele mit, im Quellcode kann man sehen wie ich Blocksatz im Memofeld berechne ...
Meine Klasse eignet sich besonders gut wenn es darum geht alles selbst zu drucken und ganze Dokument Systeme aufzubauen.
Je Ausdruck eine Klasse die voneinander erbt. Kopfpapier mit Logo und Absender, daraus abgeleitet dann Rechnungen Anschreiben etc.

Wer eher freie Reports braucht sollte sich L&L ansehen.

Aber gehen wir von deinem @ SAY aus:

Code: Alles auswählen

Function Drucken( lDrucken )
   local nZeile := 0
   if empty(lDrucken)
      lDrucken := .t.
   endif
   // wie auch immer die Druckausgaben ermittelt werden
   go top    
   do while ! eof()
      ....
      nZeile++
      if lDrucken
         @ say oder ? oder wie auch immer 
      endif
      ...
   endif   
   ...
return nZeile
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Seitenanzahl ermitteln

Beitrag von Jan »

Dominik,

es ist schwer Dir Deine Fragen zu beantworten wenn Du immer wieder mit neuen Sachen um die Ecke kommst. Von SAY war nie die Rede. Von Memofeldern war nie die Rede. Von variablen Headern und Footern war nie die Rede (wobei ich noch nie gesehen habe das die einfach mal eben zwischendurch sich ändern).

Aber wie auch immer. Ich glaube immer noch, das Du das vorher ausrechnen kannst. Du kennst alle Regeln fü den Ausdruck. Also warum kannst Du all diese Regeln nicht schon vorher einmal durchrechnen?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Seitenanzahl ermitteln

Beitrag von Koverhage »

Die Frage ist warum braucht man die Seitenzahl ?
Das ganze macht für mich nicht unbedingt Sinn, aber ich würde die Sache anders angehen.
Einfach in eine temporäre Datei drucken, diese dann per copy an den Drucker schicken.
Gruß
Klaus
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Seitenanzahl ermitteln

Beitrag von Tom »

Die Frage ist warum braucht man die Seitenzahl ?
Seite 1 von x, das hat schon Sinn auf mehrseitigen Dokumenten. Aber außer den Druck zu simulieren und so die benötigte Zeilenzahl zu ermitteln, sehe ich in der geschilderten Situation auch keine andere Lösung. Und meines Wissens agieren auch professionelle Reportgeneratoren so.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Seitenanzahl ermitteln

Beitrag von ramses »

Eine andere nicht ganz zur Frage passende Lösung (off Topic) wäre es List&Label zu verwenden. Der übernimmt das ganze.
Das war damals einer der Gründe L&L zu kaufen den für die Anforderung auf jede Seite die Seitenzahl im Format "Seite: 1 von 6" "Seite 2 von 6" usw. zu Drucken fand ich keine einfache und schnelle Lösung.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Seitenanzahl ermitteln

Beitrag von Tom »

Ich kann mir überhaupt nicht vorstellen, was hier los wäre, wenn wir keinen professionellen Reportgenerator wie L&L einsetzen würden. Das Drucken selbst ist ja noch eine überschaubare Aufgabe. Aber es hängt so viel dran, vom individuellen Design über daten-/einstellungenabhängiges Druckverhalten und Exporte und automatische Speicherung und Verschlüsselung und Einbindung in Web-Komponenten und Charts und alle möglichen Formen von Datenvisualisierungen bis sonstwohin, dass wir eine eigene Programmierabteilung nur dafür bräuchten, hätten wir L&L nicht.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Seitenanzahl ermitteln

Beitrag von ramses »

Hallo Tom

RICHTIG!! Genau so ist es!!
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Seitenanzahl ermitteln

Beitrag von Tom »

@Carlo: 8)

Das war übrigens eine meiner ersten Kaufentscheidungen damals, nachdem wir Xbase++ angeschafft hatten. Ich sagte mir, dass wir das mit dem GUI-Krempel schon irgendwie hinkriegen würden, dass aber die Idee, sich auf den tönernen Füßen des Xbase-Drucksystems oder auf schrägen Umwegen wie Dateiexporte in der Druckwelt zu bewegen, keine gute wäre.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Seitenanzahl ermitteln

Beitrag von ramses »

Hallo Tom

diese Entscheidung habe ich leider viel zu spät getroffen und mich viel zu lange auf schrägen Umwegen bewegt und sehr viel Zeit mit eigentlich sinnlosem verbraten. Als dann die Anforderung an eine neue Gestaltung der Dokumente mit neuen Details aufkam war es dann Zeit für eine grundlegende Änderung aller Ausdrucke. Rückblickend frage ich mich oft wieso ich nicht viel, viel früher auf L&L gewechselt habe. ......

Ein Grund war sicher ich habe nicht über den Tellerrand gekuckt. L&L habe ich das erste mal bei einem Freund gesehen der damit die Dokumente in seinen Programmen (nicht xbase++) erstellte, ich war schlicht fassungslos. Zurück zu Hause war es dann auch die erste Handlung L&L zu kaufen.
Valar Morghulis

Gruss Carlo
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Seitenanzahl ermitteln

Beitrag von Dominik Krebs »

Hallo zusammen,
Eventuell sollte ich mir L&L auch mal anschauen.
Welches Inst denn das passende Produkt und mit wieviel euronen muss ich rechnen?

Und vor allem, was ist alles möglich?
Gruß Dominik
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Seitenanzahl ermitteln

Beitrag von Tom »

L&L ist eine Eierleigendewollmilchsau. Die Lizenzmodelle kann man ggf. wechseln. https://www.combit.net/reporting-tool/

Edit: Mit der Standardedition ist man meistens gut bedient. https://www.combit.net/reporting-tool/e ... ist-label/
Herzlich,
Tom
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 197
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 10 Mal
Danksagung erhalten: 4 Mal

Re: Seitenanzahl ermitteln

Beitrag von Dominik Krebs »

Hallo Tom,
entschuldigt bitte die lange Zeit in der ich nicht geantwortet habe.

Das klingt wirklich vielversprechend. Und da so viele darauf schwören, kann es eigentlich nur gut sein.
Ich denke ich weiß was ich mir zu weihnachten schenke :D
Gruß Dominik
Antworten