270 likes | 397 Views
„Mein Drucker druckt nicht!“. Uwe Habermann Uwe.Habermann@dFPUG.de. Das Lieblingsthema des Supports. Wer ist Schuld? Der Kunde oder wir? Was können wir tun? Beispiele für mögliche Probleme Probleme vermeiden! Lösungen. Wie druckt VFP?. Druckertreiber ist externes Programm
E N D
„Mein Drucker druckt nicht!“ Uwe Habermann Uwe.Habermann@dFPUG.de “Mein Drucker druckt nicht!”
Das Lieblingsthema des Supports • Wer ist Schuld? Der Kunde oder wir? • Was können wir tun? • Beispiele für mögliche Probleme • Probleme vermeiden! • Lösungen “Mein Drucker druckt nicht!”
Wie druckt VFP? • Druckertreiber ist externes Programm • Es wird Code außerhalb von VFP ausgeführt • Kann modale Dialoge anzeigen • Kann Dialoge anzeigen • Beispiel! “Mein Drucker druckt nicht!”
C0000005 • VFP benutzt arithmetischen Co-Prozessor • Druckertreiber stellt Fehlerbehandlung um • Betraf zum Beispiel Druckertreiber von HP • Workaround: DECLARE _fpreset IN MSVCRT20 =_fpreset() • Gefixed seit VFP 6 SP5 “Mein Drucker druckt nicht!”
C0000005 • Programmabsturz an praktisch beliebiger Stelle • Verursacht durch Unidrv.dllBeispiel: HP Laserdrucker “Mein Drucker druckt nicht!”
Pfad nicht gefunden • Druckertreiber verstellt den aktuellen Pfad • Microsoft Office Document Image Writer • PDFmail • Canon Multifunktionsgeräte • Workaround: CD JUSTPATH(SYS(16,0)) • Beispiel! “Mein Drucker druckt nicht!”
Fehler beim Laden des Druckertreibers • Standardverhalten bis FPW • Workaround: USE <Berichtsdatei>.frx BLANK FIELDS expr, tag, tag2 • Normalerweise kein Fehler in VFP • Rückgabewert des Druckertreibers • Beispiel! “Mein Drucker druckt nicht!”
Berichtsdateien patchen • Berichtsdatei patchen • Eine Berichtsdatei kann mit USE geöffnet werden USE <Name der Berichtsdatei>.frx BROWSE “Mein Drucker druckt nicht!”
Titelbereich ist zu groß, um auf die Seite zu passen • Warum? • Ursache: expr ORIENTATION=0 PAPERSIZE=256 COLOR=2 • Beispiel! “Mein Drucker druckt nicht!”
VFP 9: Druckerumgebung speichern? • In der Regel nicht speichern • Trotzdem bleibt ein Problem • Expr: ORIENTATION=0 PAPERSIZE=256 COLOR=2 • Speichern kann aber auch sinnvoll sein • Beispiel: Schachteinstellung “Mein Drucker druckt nicht!”
Berichtsdateien patchen • Maßeinheit ist 1/10000 Zoll • Im ersten Datensatz stehen die Druckerinformationen • Die Felder Expr, Tag und Tag2 können geleert werden, ausgenommen Orientation • BLANK FIELDS expr, tag, tag2 “Mein Drucker druckt nicht!”
Berichtsdateien patchen * Project Hook BeforeBuild * Entfernt die Druckereinstellungen aus allen Reports. LOCAL lnZ WITH _VFP.ActiveProject.Files FOR lnZ = 1 TO .Count IF .Item(lnZ).Type = "R" WAIT WINDOW .Item(lnZ).name NOWAIT USE (.Item(lnZ).name) BLANK FIELDS TAG, tag2 IF "ORIENTATION=1" $ UPPER(expr) REPLACE expr WITH "ORIENTATION=1" ELSE BLANK FIELD expr ENDIF USE ENDIF NEXT ENDWITH WAIT CLEAR “Mein Drucker druckt nicht!”
Fehlerbehandlung • Seit VFP 8 ist während der Ausführung des Report-Befehls die aktuelle Fehlerbehandlung aktiv • Es ist jedoch nicht möglich die Ausführung nach einem Fehler fortzusetzen! • Beispiel! “Mein Drucker druckt nicht!”
Fehlerbehandlung • Immer! TRY REPORT FORM <meinBericht> … CATCH MESSAGEBOX(MESSAGE(),64,"Fehler") ENDTRY “Mein Drucker druckt nicht!”
Wann führt das zu einem Fehler? SET PRINTER TO DEFAULT • Wenn kein Druckertreiber installiert ist! • Fehler beim Zugriff auf den Drucker-Spooler. • Also: TRY SET PRINTER TO DEFAULT CATCH ENDTRY “Mein Drucker druckt nicht!”
Berichte einschließen oder mitliefern? • Beides! • Bearbeiten eines Berichts durch den Anwender MODIFY REPORT ? • Exportieren einer Berichtsdatei aus der laufenden Exe-Datei USE <Name der Berichtsdatei>.frx COPY TO <neuer Name>.frx “Mein Drucker druckt nicht!”
VFP 9: Reportbehavior 90 • Die Lösung aller Probleme? • Oder neue Probleme? • Was ist zu beachten? “Mein Drucker druckt nicht!”
Variable ´_REPORTOUTPUT´ wurde nicht gefunden • Report Apps mitliefern oder einschließen • Sonst Laufzeitfehler beim Kunden • Artikel in FoxX 17 “Mein Drucker druckt nicht!”
Reportbehavior 90 • Nicht native in der VFP 9 Runtime enthalten • Erfordert die Berichtsanwendungen: • ReportOutput.app (REPORT FORM …) • ReportPreview.app (… PREVIEW) • ReportBuilder.app (nur für MODIFY REPORT) • Quellcode zu finden in Tools\xsource\xsource.zip “Mein Drucker druckt nicht!”
Reportbehavior 90 • Wahlweise • Installation der Berichtsanwendungen auf dem Kunden-PC • Einbeziehung des Quellcodes in das eigene Projekt “Mein Drucker druckt nicht!”
Installation beim Kunden • Berichtsanwendungen werden automatisch gefunden, wenn sie im Ordner der VFP 9 Runtime installiert sind • Installation mit InstallShield Express per Merge Module VFP9RptApps.msm möglich • Nachteil: die Berichtsanwenungen werden nur in einer englischen Version geliefert “Mein Drucker druckt nicht!”
Systemvariablen • Wenn die Berichtsanwendungen nicht im Ordner der VFP 9 Runtime installiert werden, müssen die Systemvariablen gesetzt werden: _reportoutput = <Pfad> + "ReportOutput.app" _reportpreview = <Pfad> + "ReportPreview.app" _reportbuilder = <Pfad> + "ReportBuilder.app" “Mein Drucker druckt nicht!”
Sourcecode in eigenen Projekten • VFPSource\ReportOutput (ca. 500 KB) _REPORTOUTPUT = "frxoutput.prg" • VFPSource\ReportPreview (ca. 650 KB) _REPORTPREVIEW = "frxpreview.prg" • VFPSource\ReportBuilder (ca. 1 MB) _REPORTBUILDER = "frxbuilder.prg" “Mein Drucker druckt nicht!”
Lokalisierung • ReportOutput: reportoutput_locs.h reportlisteners_locs.h • ReportPreview: frxpreview_loc.h • ReportBuilder: _frxcursor.h frxbuilder_loc.h • Wichtig In frxbuilder_loc.h und frxpreview_loc.h: #define USE_LOC_STRINGS_IN_UI .T. “Mein Drucker druckt nicht!”
Reportlistener • Berichtsausgabe im XML oder HTML Format ist nur möglich, wenn _reportlistener.vcx/vct in das eigene Projekt einbezogen wird “Mein Drucker druckt nicht!”
Was noch? • Berichtsausgabe erfolgt im Grafikmodus • Große Druck-Jobs • Kein Text aus PDF kopierbar? • Beispiel! “Mein Drucker druckt nicht!”
Vielen Dank für Euer Interesse! Uwe Habermann “Mein Drucker druckt nicht!”