Hinweise zum neuen Forum
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Dateien sicher schreiben

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 11980
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Dateien sicher schreiben

Beitrag von Jan » Di, 29. Nov 2016 10:32

Moin,

wir kämpfen gerade mit folgendem Problem: Ich erstelle mit Edgars Klasse PDF, die aus einem größeren Hintergrundbild (3-4 MB groß) und individuellem Text bestehen. Die wird auf einem Windows Server 2012 gespeichert, und dann direkt ausgedruckt. Clients sind alle Windows 10.

Nun kommt es seit einiger Zeit vor, das nur der Zusatztext gedruckt wird. Nicht die Grafik. Oftmals klappt der Ausdruck komplett, allzuoft aber eben nur der Text. Wenn man sich dann die PDF auf dem Server ansieht, ist die aber vollständig. Ein manueller Druck aus dem Adobe Reader ist vollständig, aber zu dem Zeitpunkt ist natürlich auch schon wesentlich mehr Zeit vergangen.

Mein Verdacht ist, das es ein Caching-Problem gibt. Das die PDF zum Zeitpunkt des Druckes noch nicht komplett auf die Festplatte geschrieben ist.

Edgar hat die Druckroutine mit seiner aktuellen Klasse umgeschrieben. Aber auch die Verwendung der alten Version gibt den gleichen Fehler. Das können wir also ausschließen.

Gibt es eine Möglichkeit sicherzustellen, das eine Datei komplett auf dem Server weggeschrieben ist (sozusagen ein File-Commit)? Oder vor dem Drucken festzustellen, ob die nun komplett geschrieben worden ist, und eben so lange zu warten?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Bertram Hansen
1000 working lines a day
1000 working lines a day
Beiträge: 629
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 53902 Bad Münstereifel
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Bertram Hansen » Di, 29. Nov 2016 10:35

Jan,

nur so aus dem Bauch heraus.
Kannst du nicht vor dem Drucken versuchen die PDF exklusiv zu öffnen.
:wave:
Gruß Bertram
http://www.tobax.de

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 13375
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Martin Altmann » Di, 29. Nov 2016 10:47

Jan,
ich nehme mal an, dass Du auch ein ::EndDoc(.f.) gefolgt von einem ::Destroy() für Dein PDF-Objekt machst, bevor Du es anzeigen lässt - oder?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 11980
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan » Di, 29. Nov 2016 11:07

Hallo Martin,

nein. Weil nach dem :create() direkt das :print() folgt. Bzw. ich habe da mal eine Verzögeurng von 3 Sekunden eingebaut, um dem Server etwas Zeit zum Speichern zu geben. Die Verbesserung war aber nur minimal.

Die Idee ist aber interessant. Ich werde mal schauen, ob ich damit was anfangen kann.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 13375
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Martin Altmann » Di, 29. Nov 2016 11:10

Bei mir hatte es damals geholfen. Ich schreibe tausende zweiseitige PDFs und versende die im Anschluss per Mail.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 11980
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan » Di, 29. Nov 2016 11:10

Bertram,

vor dem Drucken öffne ich die Datei per FOpen(), FRead(), FClose(), um die Größeneinstellungen des Dokumentes zu erhalten (das kann DIN A 4 oder DIN A 6 sein).

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 11980
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan » Di, 29. Nov 2016 11:12

Martin,

das versenden der Mail im Anschluß klappt auch. Aber auch dann ist ja schon ein wenig mehr Zeit vergangen.

Und im Gegensatz zu Deinen PDF (ich setze das jetzt mal einfach voraus) sind meine umfangreicher. Durch das Hintergrundfoto. Und nur das fehlt in den direkten Ausdrucken. Der normale Text ist da, inkl. mehrere Dutzend "gemalter" Linien im Barcode.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 13375
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Martin Altmann » Di, 29. Nov 2016 11:28

Nicht unbedingt!
Ich nutze eine PDF-Vorlage (wie Du), in die ich Text einmische!
Die PDF-Vorlage kann Text enthalten (wenn sie ordentlich aus der Druckerei kommt) - sie kann aber auch zwei ganzseitige Grafiken enthalten (wenn das Papier manuell gescannt und als PDF gespeichert wurde).

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 11980
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan » Di, 29. Nov 2016 11:44

Martin,

ich habe mich vertan. Doch, das PDF-Objekt wird nach dem Erzeugen der PDF destroyed und genillt, danach erst wird ein neues Druck-Objekt erstellt, mit dem die gespeicherte PDF dann gedruckt wird.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 13375
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Martin Altmann » Di, 29. Nov 2016 12:16

Jan,
worauf ich hinaus wollte: Mach ::EndDoc( .f. ) und öffne nach dem ::Destroy() die Datei zum Anzeigen manuell.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 11980
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan » Di, 29. Nov 2016 12:30

:?:
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 13375
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Martin Altmann » Di, 29. Nov 2016 12:34

Wenn Du dein fertiges PDF anzeigst, dann machst Du ja wahrscheinlich ein :EndDoc( .t. ) - oder? Damit wird das sofort angezeigt.
In dem Fall ist es besser, das PDF zu erzeugen, alle Objekte wegzuschmeißen und danach ein Objekt zu erzeugen, das zur Anzeige der Datei genutzt wird (also die Datei von der Platte lädt).

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 11980
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan » Di, 29. Nov 2016 12:55

Martin,

ich hatte mich doch oben korrigiert und geschrieben, das ich das PDF-Erzeugungsobjekt destroye und nille, und dann erst das PDF-Druckobjekt erstelle. Genau das, was Du ganz oben vorgeschlagen hattest.

Von daher verstehe ich Deinen erneuten Vorschlag nicht. Auch nach Deiner Erklärung nicht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 13375
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Martin Altmann » Di, 29. Nov 2016 13:57

Ach so!
Ich dachte, Du hast das Problem bei der Anzeige des frisch erstellten Dokumentes. Dann warte doch einfach 5 Minuten bis zum Ausdrucken - aber ähnliches machst Du ja schon.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 11980
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan » Di, 29. Nov 2016 14:04

Martin,

naja, 5 Minuten warten kommt nicht so gut, wenn der Kunde daneben steht und wartet. Ansonsten hätte ich die Wartezeit ja auch selber schon angehoben.

Ich denke das geht nur über irgendwelche Servereinstellungen oder anderes Sicherstellen, das die Datei iwrklich sofort komplett weggeschrieben wird.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1922
Registriert: Fr, 23. Dez 2005 9:00
Wohnort: Aalen
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Koverhage » Di, 29. Nov 2016 17:38

Jan,
wie wäre es mit local speichern. drucken und auf server kopieren und local löschen ?
Gruß
Klaus

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 11980
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan » Di, 29. Nov 2016 17:52

Hallo Klaus,

nette Idee. Die mich erstmal positiv angesprochen hat. Aber die einen kompletten Umbau der Logik bedeuten würde.

Das gesamte Programm ist so gebaut, das Kundenbelege beim Ausdruck immer als PDF gespeichert werden. Das betrifft Angebote, Auftragsbestätigungen, Rechnungen, die hier relevanten Gutscheine, und so manches mehr. Das heißt, es gibt diverse Funktionen, die die entsprechenden PDF generieren und speichern. Die Druckfunktion liegt komplett woanders im Code und wird dann nur bei Bedarf aufgerufen. Entweder nach der Erzeugung der PDF, oder später bei einem Nachdruck, oder bei einem Mailversand des Dokumentes. Drucken und mailen gehen immer auf die gespeicherte PDF, niemals in eine wirkliche Druckfunktion.

Wenn ich also erst lokal speichere, und erst später auf den Server schiebe, dann muß ich das irgendwie abstimmen mit einem eventuell nachfolgenden Druckauftrag. Das wird komliziert. Vor Allem, weil meine Vorgänger in dem Projekt nun ja, sagen wir mal, etwas unordentlich gearbeitet haben was Funktionsaufrufe, Variablen, usw. betrifft. Ich muß da mit einer Menge Altlasten klar kommen.

Ich werde mir das aber mal anschauen, vielleicht kann ich das mit irgend einer Paramterübergabe (mein Kunde hast Parameterübergaben, weil er die nicht versteht) doch irgendwie halbwegs schmerzfrei testen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
Beiträge: 1252
Registriert: Sa, 30. Jan 2010 23:58
Wohnort: Niederbayern

Re: Dateien sicher schreiben

Beitrag von Werner_Bayern » Di, 29. Nov 2016 17:57

Code: Alles auswählen

      if file(MAILVERZEICHNIS + cPDF_Datei)
         sleep(30)
         for i := 1 to 20
            if .not. (nDatei := fopen(MAILVERZEICHNIS + cPDF_Datei, FO_READ+FO_DENYREAD)) == -1 // Datei konnte erfolgreich geöffnet werden
               fclose(nDatei)
               exit
            endif
            sleep(30)
         next i
         sleep(30)
      endif
      if .not. file(MAILVERZEICHNIS + cPDF_Datei) .or. i == 21
         hinweis("PDF-Druck", "Bitte kurz warten, bis der PDF-Druck abgeschlossen ist...")
      endif
es grüßt euch

Werner

Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
Beiträge: 11980
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan » Di, 29. Nov 2016 18:05

Hallo Werner,

ein FOpen() etc. mache ich schon (siehe weiter oben). Aber die mehrfachen Sleep(30) sind einfach nicht machbar. So lange wartet kein Mitarbeiter im kundenstreß auf den Ausdruck, geschweige denn ein wartender Kunde in der Schlange.

Ich kann aber mal schauen, ob ein kurzes Warten nach dem FClose() helfen könnte. Vorher habe ich ja schon eine Verzögerung eingebaut.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
Beiträge: 1252
Registriert: Sa, 30. Jan 2010 23:58
Wohnort: Niederbayern

Re: Dateien sicher schreiben

Beitrag von Werner_Bayern » Di, 29. Nov 2016 18:51

Jan hat geschrieben:Aber die mehrfachen Sleep(30) sind einfach nicht machbar. So lange wartet kein Mitarbeiter im kundenstreß auf den Ausdruck, geschweige denn ein wartender Kunde in der Schlange.
Würd ich auch nie programmieren! :)
Wir sprechen hier von erstmal 30 ms, nur wenn dann noch nicht die Datei da oder komplett geschrieben ist, wird max. 20x a 30 ms gewartet. Du kannst Dir die Schleife ja anpassen, mach halt bloß 5 Durchgänge. Wir sprechen bei 20 Durchläufen von 630 ms, das sind 6,3 Sekunden - wenn es ein Geschwindigkeitsproblem gibt! Nur dann.

Also, ist das Netzwerk ok und der Fileserver "schnell" genug, hält der Code nichts auf, ansonsten wartet er max. 6,6 Sekunden, bis eine Meldung ausgegeben wird. Wenn Du i anpasst, dann halt entsprechend schneller.

Ich denke, besser kannst Du das Problem softwaremäßig in Deiner Applikation nicht bedienen - bis mich jemand vom Gegenteil überzeugt. 8)
es grüßt euch

Werner

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10364
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: Dateien sicher schreiben

Beitrag von AUGE_OHR » Di, 29. Nov 2016 19:11

Jan hat geschrieben:... die aus einem größeren Hintergrundbild (3-4 MB groß) und individuellem Text bestehen.
Frage : was für ein Drucker und wie viel Speicher (RAM) hat der Drucker ?

ich hatte früher (v1.5x) mal ein ähnliche Problem mit Word Dateien die ich per Runshell() gedruckt hatte.
es fehlten teilweise die Grafiken aber der Text war meistens komplett. Die Doc war immer komplett.

da es viele DOC Dateien waren kamen wir auf die Idee den Drucker (Kyrocera) aufzurüsten mit mehr RAM und danach gab es keine Problem mehr.
gruss by OHR
Jimmy

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13588
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von brandelh » Di, 29. Nov 2016 21:23

wie wäre es mit PDF auf dem servr schreiben und schließen,
danach auf lokale platte kopieren und von dort drucken ?
Gruß
Hubert

Benutzeravatar
mikehoffmann
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 36
Registriert: Mo, 21. Sep 2015 16:22

Re: Dateien sicher schreiben

Beitrag von mikehoffmann » Sa, 28. Jan 2017 14:36

Google mal nach der API-Funktion "FlushFileBuffers". Da findeste auch einen Hinweis auf CreateFile mit FILE_FLAG_NO_BUFFERUNG flag.
Damit kannste sicherstellen, dass Deine Daten schnellstmöglich da ankommen, wo sie hinsollen.
Wenn's dann noch nicht klappt, hast Du ein anderes Problem.
Viele Grüße
Michael

ramses
1000 working lines a day
1000 working lines a day
Beiträge: 583
Registriert: Mi, 28. Jul 2010 17:16

Re: Dateien sicher schreiben

Beitrag von ramses » Sa, 28. Jan 2017 20:08

Hallo Jan
ich hatte vor Jahren die selben Probleme, besonders wenn grössere BitMaps enhalten waren, ich hatte dann deshalb auf L&L gewechselt und seitdem auch mit 28MPix Bilder keine Probleme mehr. Edgar's Klasse ist ja eigentlich nur ein Wrapper auf Quickpdf mit den dazugehörigen Sorgen.

Vielleicht würde dir ja derselbe Schrift (zu L&L) auch weiterhelfen. ..... Auf jeden Fall ist die Gestaltung eines DOC's viel viel einfacher und schneller und Tel. Support ist super und in Deutsch .....

Cu Carlo

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10364
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: Dateien sicher schreiben

Beitrag von AUGE_OHR » Sa, 28. Jan 2017 21:17

mikehoffmann hat geschrieben:Google mal nach der API-Funktion "FlushFileBuffers". Da findeste auch einen Hinweis auf CreateFile mit FILE_FLAG_NO_BUFFERUNG flag.
gute Idee !
du solltest noch ein Beispiel bringen wie man das macht den API ist nicht jedermanns Sache.
gruss by OHR
Jimmy

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast