Eine Anleitung um das Layout nach Ihren Wünschen zu gestalten Das Einstellprogramm erzeugt immer das Standardlayout CH_QR_SXP neu. Falls Sie trotzdem Änderungen vornehmen möchten, warum auch immmer, gehen Sie so vor: 1. Spezielle Drucklayouts aufrufen Kopieren des Eintrages CH_QR_SXP Das Original wird vom Einstellprogramm immer überschrieben! Einen vernünftigen Namen wählen. 2. SXP aufrufen Bei den beiden betreffenden Einträgen das Layout auswechseln. Nichts anderes verändern. 3. Spezielle Drucklayouts aufrufen Kopiertes Layout aufrufen. Endtext Bereich. Jetzt können Sie kleine(!) Anpassungen vornehmen. In dem neuen Layout können Sie den Endtext (nur dieser wird benutzt) auf etwa eine max. Höhe von 250mm ziehen. Hier könnte man z.B. etwas Werbung im oberen Bereich unterbringen. Die vorhandenen Elemente müssen dann nach unten gezogen werden. (Am besten dazu die Gummibandfunktion nutzen) Wird der Bereich zu hoch gewählt, gibt es eine Endlosschleife, da die Sachen nicht auf ein Blatt passen. In dem Fall in OfficeSI --> Hilfe --> Druckaufträge löschen ausführen. Änderungen der QR-Code Größe: Bild (das Bild, was den Code beinhaltet) --> Code: ..... CHQRCodeSetup(3, '', '', 4, 0, 2, 'default', 'm', 46); ..... Ändern Sie die 46 auf einen anderen Wert, z.b. 50. Mehr als 60 wird nicht empfohlen. Beispielcode für die Ausgabe der Empfängeradresse: var s:string; begin s := dbvalue('ABTL'); s := ZX_StrReplace(s,#13#10,' '); //enter nach leer s := ZX_StrReplace(s,'¬',' '); //virtuelles enter nach leer s:= copy (s,1,50); //50 zeichen max s :=Trim( s+ #13#10 + dbvalue('vname') + ' ' + dbvalue('nname') ); s :=Trim( s+ #13#10 + dbvalue('STRASSE') ); s := s+ #13#10 + dbvalue('PLZ') + ' ' + dbvalue('ORT'); Data:=s; end. 3. Beispiel für die Ausgabe Ihrer Adresse: Hier können Sie einfach mehrere Beschriftungen einbauen. -------------------------------------------- Die Größe des QR-Codes anpassen, wenn Sie per RDP zugreifen, und die Bildschirmgrößen zwischen Client und Host stark variieren: Das kann auf Grund diverser Inkompatibilitäten zwischen den Systemen erforderlich sein, aber nicht immer. Auch der jeweils verwendete RDP kann Unterschiede machen. Sie ersetzen den Code für die Erzeugung des QRCodes durch diesen Konstrukt: -----------Code----------------- var DimInMM, HS, VS: Integer; begin if (data <> null) and (data = '') then begin CHQRLoad; DimInMM := 46; HS := GetDeviceCaps(HORZSIZE); VS := GetDeviceCaps(VERTSIZE); //passen Sie hier DimInMM an // HS und VS sind abmessungen des clients // hat der host abweichende Abmessungen, muss die Größe geändert werden // das hier sind nur 3 Beispiele, Sie können den Code für beliebige Größen ergänzen // InRangeInt wertet die Größe des clients aus // dabei kann ein Bereich von bis angegeben werden if InRangeInt(HS, 340, 350) and InRangeInt(VS, 190, 200) then DimInMM := 23 else if InRangeInt(HS, 590, 600) and InRangeInt(VS, 330, 340) then DimInMM := 60 else if InRangeInt(HS, 520, 540) and InRangeInt(VS, 290, 310) then DimInMM := 51; CHQRCodeSetup(3, '', '', 4, 0, 2, 'default', 'm', DimInMM); Data := CHQRImageFile; end; end. -----------Code----------------- Wie bekomme ich raus, ob überhaupt Anpassungen erforderlich sind? Erzeugen Sie von jedem Client aus ein PDF mit QRCode, dazu können Sie SXP nutzen, Layout wählen und "Los" drücken. Messen Sie Codegröße, sind signifikante Differenzen vorhanden, sollten Sie den geänderten Code benutzen. Woher bekomme ich die Größe meines Clients? 1. Sie rufen das Einstellprogramm auf 2. Sie drücken "Code erzeugen" und dann "Bild im Explorer anzeigen" 3. Öffnen Sie die Datei log.txt Am Ende der Datei finden Sie die Angaben: GetDeviceCaps(DC, HORZSIZE) Local Computer 531 GetDeviceCaps(DC, VERTSIZE) Local Computer 298 -------Device Info ----------- Ermitteln Sie auf jedem Client die Maße und notieren sich diese. Die Werte setzen Sie bei InRangeInt(HS,h,h) und InRangeInt(VS,v,v) ein Beipiel an Hand der oberen Werte: InRangeInt(HS,531 -5 ,531 +5) und InRangeInt(VS,298 -5 ,298 +5 ) Mit +-5 gestalten Sie das Ganze etwas "unscharf" Für DimInMM setzen Sie dann jeweils gewünschten Millimeter ein. ---------------------------------------------------------- Ich habe mehrere Banken, wie kann dafür jeweils einen anderen Code erzeugen? Sie können die Werte aus dem Einstellprogramm dafür überschreiben. Beispielcode mit Auswahl von 2 Banken + Standardbank, wenn keine Auwahl gültig, wird der Standard genutzt: 1. Fügen Sie diesen Code am Anfang(!) bei jedem(!) Script ein: procedure AlterMoneyBank; var s: string; begin s := DBValue('Info1'); //Auftrag Infofelder, könnte als Klappbox Bank1,Bank2 definiert sein //oder fest an den Kunden gebunden: s := DBValue('R1'); //linke und rechte Adressfelder CHQRLoad; if s = 'Bank1' then begin CHQRLoadInherited( 'CHXXX', 'IID', '', 'Firma', 'V+N Name', 'Straße X', 'Plz Ort', 'CH'); end else if s = 'Bank2' then begin CHQRLoadInherited( 'CHXXX', 'IID', '', 'Firma', 'V+N Name', 'Straße X', 'Plz Ort', 'CH'); end; end; 2. Ersetzen Sie im Original CHQRLoad durch AlterMoneyBank 3. Schauen Sie in allen Scripten nach, ob der Aufruf vorhanden ist, wenn nicht immer Anfang einfügen. In etwa so: procedure AlterMoneyBank; .............. end; begin AlterMoneyBank; //einfügen für CHQRLoad, auch wenn CHQRLoad fehlt .............. -------------------------------------------------------- Bei allen Veränderungen, immer ein PDF erstellen, und hier https://www.swiss-qr-invoice.org/validator/?lang=de prüfen. Sie können das PDF einfach in den Validator ziehen.