Upload
meinard-eckel
View
118
Download
7
Embed Size (px)
Citation preview
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
„„Mein Drucker druckt Mein Drucker druckt nicht!“nicht!“
Uwe Uwe HabermannHabermann
[email protected]@dFPUG.deG.de
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Das Lieblingsthema des Das Lieblingsthema des SupportsSupports Wer ist Schuld? Der Kunde oder wir? Wer ist Schuld? Der Kunde oder wir?
Was können wir tun?Was können wir tun?• Beispiele für mögliche ProblemeBeispiele für mögliche Probleme• Probleme vermeiden!Probleme vermeiden!• LösungenLösungen
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Wie druckt VFP?Wie druckt VFP?
Druckertreiber ist externes Druckertreiber ist externes ProgrammProgramm
Es wird Code außerhalb von VFP Es wird Code außerhalb von VFP ausgeführtausgeführt
Kann modale Dialoge anzeigenKann modale Dialoge anzeigen Kann Dialoge anzeigenKann Dialoge anzeigen Beispiel!Beispiel!
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
C0000005C0000005
VFP benutzt arithmetischen Co-ProzessorVFP benutzt arithmetischen Co-Prozessor Druckertreiber stellt Fehlerbehandlung umDruckertreiber stellt Fehlerbehandlung um Betraf zum Beispiel Druckertreiber von HPBetraf zum Beispiel Druckertreiber von HP
• Workaround:Workaround:
DECLARE _fpreset IN MSVCRT20 DECLARE _fpreset IN MSVCRT20
=_fpreset()=_fpreset() Gefixed seit VFP 6 SP5Gefixed seit VFP 6 SP5
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
C0000005C0000005
Programmabsturz an praktisch Programmabsturz an praktisch beliebiger Stellebeliebiger Stelle
Verursacht durch Unidrv.dllVerursacht durch Unidrv.dllBeispiel: HP LaserdruckerBeispiel: HP Laserdrucker
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Pfad nicht gefundenPfad nicht gefunden
Druckertreiber verstellt den Druckertreiber verstellt den aktuellen Pfadaktuellen Pfad• Microsoft Office Document Image WriterMicrosoft Office Document Image Writer• PDFmailPDFmail• Canon MultifunktionsgeräteCanon Multifunktionsgeräte
Workaround:Workaround:CD JUSTPATH(SYS(16,0))CD JUSTPATH(SYS(16,0))
Beispiel!Beispiel!
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Fehler beim Laden des Fehler beim Laden des DruckertreibersDruckertreibers Standardverhalten bis FPWStandardverhalten bis FPW
• Workaround:Workaround:USE <Berichtsdatei>.frxUSE <Berichtsdatei>.frx
BLANK FIELDS expr, tag, tag2BLANK FIELDS expr, tag, tag2
Normalerweise kein Fehler in VFPNormalerweise kein Fehler in VFP Rückgabewert des DruckertreibersRückgabewert des Druckertreibers Beispiel!Beispiel!
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Berichtsdateien patchenBerichtsdateien patchen
Berichtsdatei patchenBerichtsdatei patchen• Eine Berichtsdatei kann mit USE Eine Berichtsdatei kann mit USE
geöffnet werdengeöffnet werden
USE <Name der Berichtsdatei>.frxUSE <Name der Berichtsdatei>.frx
BROWSEBROWSE
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Titelbereich ist zu groß, Titelbereich ist zu groß, um auf die Seite zu um auf die Seite zu passenpassen Warum?Warum? Ursache: exprUrsache: expr
ORIENTATION=0ORIENTATION=0
PAPERSIZE=256PAPERSIZE=256
COLOR=2COLOR=2 Beispiel!Beispiel!
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
VFP 9: VFP 9: Druckerumgebung Druckerumgebung speichern?speichern? In der Regel nicht speichernIn der Regel nicht speichern Trotzdem bleibt ein ProblemTrotzdem bleibt ein Problem Expr:Expr:
ORIENTATION=0ORIENTATION=0
PAPERSIZE=256PAPERSIZE=256
COLOR=2COLOR=2 Speichern kann aber auch sinnvoll Speichern kann aber auch sinnvoll
seinsein• Beispiel: SchachteinstellungBeispiel: Schachteinstellung
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Berichtsdateien patchenBerichtsdateien patchen
Maßeinheit ist 1/10000 ZollMaßeinheit ist 1/10000 Zoll Im ersten Datensatz stehen die Im ersten Datensatz stehen die
DruckerinformationenDruckerinformationen• Die Felder Expr, Tag und Tag2 können Die Felder Expr, Tag und Tag2 können
geleert werden, ausgenommen geleert werden, ausgenommen OrientationOrientation
• BLANK FIELDS expr, tag, tag2BLANK FIELDS expr, tag, tag2
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Berichtsdateien patchenBerichtsdateien patchen
* Project Hook BeforeBuild* Project Hook BeforeBuild* Entfernt die Druckereinstellungen aus allen Reports.* Entfernt die Druckereinstellungen aus allen Reports.LOCAL lnZLOCAL lnZWITH _VFP.ActiveProject.FilesWITH _VFP.ActiveProject.Files
FOR lnZ = 1 TO .CountFOR lnZ = 1 TO .CountIF .Item(lnZ).Type = "R"IF .Item(lnZ).Type = "R"
WAIT WINDOW .Item(lnZ).name NOWAITWAIT WINDOW .Item(lnZ).name NOWAITUSE (.Item(lnZ).name)USE (.Item(lnZ).name)BLANK FIELDS TAG, tag2BLANK FIELDS TAG, tag2IF "ORIENTATION=1" $ UPPER(expr)IF "ORIENTATION=1" $ UPPER(expr)
REPLACE expr WITH "ORIENTATION=1"REPLACE expr WITH "ORIENTATION=1"ELSEELSE
BLANK FIELD exprBLANK FIELD exprENDIFENDIFUSEUSE
ENDIFENDIFNEXTNEXT
ENDWITHENDWITHWAIT CLEARWAIT CLEAR
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
FehlerbehandlungFehlerbehandlung
Seit VFP 8 ist während der Ausführung Seit VFP 8 ist während der Ausführung des Report-Befehls die aktuelle des Report-Befehls die aktuelle Fehlerbehandlung aktivFehlerbehandlung aktiv
Es ist jedoch nicht möglich die Es ist jedoch nicht möglich die Ausführung nach einem Fehler Ausführung nach einem Fehler fortzusetzen!fortzusetzen!
Beispiel!Beispiel!
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
FehlerbehandlungFehlerbehandlung
Immer!Immer!
TRYTRY
REPORT FORM <meinBericht> …REPORT FORM <meinBericht> …
CATCHCATCH
MESSAGEBOX(MESSAGE(),64,"Fehler")MESSAGEBOX(MESSAGE(),64,"Fehler")
ENDTRYENDTRY
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Wann führt das zu einem Wann führt das zu einem Fehler?Fehler?
SET PRINTER TO DEFAULTSET PRINTER TO DEFAULT Wenn kein Druckertreiber installiert ist!Wenn kein Druckertreiber installiert ist!
• Fehler beim Zugriff auf den Drucker-Fehler beim Zugriff auf den Drucker-Spooler.Spooler.
Also:Also:TRYTRY
SET PRINTER TO DEFAULTSET PRINTER TO DEFAULTCATCHCATCHENDTRYENDTRY
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Berichte einschließen Berichte einschließen oder mitliefern?oder mitliefern? Beides!Beides! Bearbeiten eines Berichts durch den Bearbeiten eines Berichts durch den
AnwenderAnwenderMODIFY REPORT ?MODIFY REPORT ?
Exportieren einer Berichtsdatei aus Exportieren einer Berichtsdatei aus der laufenden Exe-Dateider laufenden Exe-DateiUSE <Name der Berichtsdatei>.frxUSE <Name der Berichtsdatei>.frx
COPY TO <neuer Name>.frxCOPY TO <neuer Name>.frx
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
VFP 9: Reportbehavior VFP 9: Reportbehavior 9090 Die Lösung aller Probleme?Die Lösung aller Probleme? Oder neue Probleme?Oder neue Probleme? Was ist zu beachten?Was ist zu beachten?
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Variable ´_REPORTOUTPUT´ Variable ´_REPORTOUTPUT´ wurde nicht gefundenwurde nicht gefunden
Report Apps mitliefern oder Report Apps mitliefern oder einschließeneinschließen
Sonst Laufzeitfehler beim KundenSonst Laufzeitfehler beim Kunden Artikel in FoxX 17Artikel in FoxX 17
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Reportbehavior 90Reportbehavior 90
Nicht native in der VFP 9 Runtime Nicht native in der VFP 9 Runtime enthaltenenthalten
Erfordert die Berichtsanwendungen:Erfordert die Berichtsanwendungen:• ReportOutput.app (REPORT FORM …)ReportOutput.app (REPORT FORM …)• ReportPreview.app (… PREVIEW)ReportPreview.app (… PREVIEW)• ReportBuilder.app (nur für MODIFY ReportBuilder.app (nur für MODIFY
REPORT)REPORT) Quellcode zu finden inQuellcode zu finden in
Tools\xsource\xsource.zipTools\xsource\xsource.zip
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Reportbehavior 90Reportbehavior 90
WahlweiseWahlweise• Installation der Berichtsanwendungen Installation der Berichtsanwendungen
auf dem Kunden-PCauf dem Kunden-PC• Einbeziehung des Quellcodes in das Einbeziehung des Quellcodes in das
eigene Projekteigene Projekt
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Installation beim KundenInstallation beim Kunden
Berichtsanwendungen werden Berichtsanwendungen werden automatisch gefunden, wenn sie im automatisch gefunden, wenn sie im Ordner der VFP 9 Runtime installiert sindOrdner der VFP 9 Runtime installiert sind
Installation mit InstallShield Express per Installation mit InstallShield Express per Merge Module Merge Module VFP9RptApps.msm VFP9RptApps.msm möglichmöglich
Nachteil: die Berichtsanwenungen Nachteil: die Berichtsanwenungen werden nur in einer englischen Version werden nur in einer englischen Version geliefertgeliefert
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
SystemvariablenSystemvariablen
Wenn die Berichtsanwendungen nicht im Wenn die Berichtsanwendungen nicht im Ordner der VFP 9 Runtime installiert Ordner der VFP 9 Runtime installiert werden, müssen die Systemvariablen werden, müssen die Systemvariablen gesetzt werden:gesetzt werden:
_reportoutput = <Pfad> + _reportoutput = <Pfad> + ""ReportOutput.appReportOutput.app""
_reportpreview = <Pfad> + _reportpreview = <Pfad> + ""ReportPreview.appReportPreview.app" "
_reportbuilder = <Pfad> + _reportbuilder = <Pfad> + ""ReportBuilder.appReportBuilder.app""
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Sourcecode in eigenen Sourcecode in eigenen ProjektenProjekten VFPSource\ReportOutput (ca. 500 KB)VFPSource\ReportOutput (ca. 500 KB)
_REPORTOUTPUT = "frxoutput.prg"_REPORTOUTPUT = "frxoutput.prg"
VFPSource\ReportPreview (ca. 650 KB)VFPSource\ReportPreview (ca. 650 KB)_REPORTPREVIEW = "frxpreview.prg" _REPORTPREVIEW = "frxpreview.prg"
VFPSource\ReportBuilder (ca. 1 MB)VFPSource\ReportBuilder (ca. 1 MB)_REPORTBUILDER = "frxbuilder.prg"_REPORTBUILDER = "frxbuilder.prg"
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
LokalisierungLokalisierung
ReportOutput:ReportOutput: reportoutput_locs.hreportoutput_locs.hreportlisteners_locs.hreportlisteners_locs.h
ReportPreview:ReportPreview: frxpreview_loc.hfrxpreview_loc.h ReportBuilder:ReportBuilder: _frxcursor.h_frxcursor.h
frxbuilder_loc.hfrxbuilder_loc.h WichtigWichtig
In frxbuilder_loc.h und frxpreview_loc.h:In frxbuilder_loc.h und frxpreview_loc.h:#define USE_LOC_STRINGS_IN_UI .T.#define USE_LOC_STRINGS_IN_UI .T.
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
ReportlistenerReportlistener
Berichtsausgabe im XML oder HTML Berichtsausgabe im XML oder HTML Format ist nur möglich, wenn Format ist nur möglich, wenn _reportlistener.vcx/vct in das eigene _reportlistener.vcx/vct in das eigene Projekt einbezogen wirdProjekt einbezogen wird
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Was noch?Was noch?
Berichtsausgabe erfolgt im Berichtsausgabe erfolgt im GrafikmodusGrafikmodus
Große Druck-JobsGroße Druck-Jobs Kein Text aus PDF kopierbar?Kein Text aus PDF kopierbar? Beispiel!Beispiel!
““Mein Drucker druckt nicht!”Mein Drucker druckt nicht!”
Vielen Dank für Euer Vielen Dank für Euer Interesse!Interesse!
Uwe HabermannUwe Habermann