OBS/Adminhilfe/RTF: Unterschied zwischen den Versionen
Nimz (Diskussion | Beiträge) |
Nimz (Diskussion | Beiträge) |
||
| Zeile 266: | Zeile 266: | ||
end; | end; | ||
qSetRepStyle(EZ,fsItalic); | if (empty(cWo)) or (cWo = 'Vor Artikelnummer') then begin | ||
qSetRepStyle(EZ,fsItalic); | |||
qRep_SText(EZ,'bez1','Art-Nr.: '+AZ_Query.A2C('az_artnr'),qRep_YPos(EZ,y)); | |||
qSetRepStyle(EZ,fsNormal); | |||
end; | |||
</source> | </source> | ||
Version vom 1. November 2011, 15:06 Uhr
Dies ist eine zugriffsgeschützte Seite.
- System Überwachung
- DEP deaktivieren
- Darstellung unter Windows 7
- Einwahl auf Windows 2000 Server
- Preislisten
- Datenbank Sicherung
- Customize
- Zentrale
- Support Macro
- Service Debug
- Historienprotokoll (Datenänderung OBS)
- Fernwartungsprobleme
- Startparameter
- Fehler beim Kassenabschluss
- Diverse Informationen
- A ras.pbk
- B Command Line Interpreter
- C File Zilla Benutzer XML erzeugen
- D1 OBS_UPDATE.EXE zum OBS Update Server hochladen
- D2 SUPPORT_MACRO zum OBS Update Server hochladen
- H1 Remote Service Protokoll-Übersicht (Alles)
- H Remote ServiceProtokoll-Übersicht
- I Remote Service Commands
- I1 (Admin) Globaler Hinweis für Updates
- J Liste der OBS Updates
- K Angemeldete Service Firmen
- L Systeminformationen einlesen
- M Kundendaten anzeigen
- M1 Kundendatenbankinformationen anzeigen
- N Kundendaten einlesen
- O Kunden-Update Informationen anzeigen
- P Modul Registrierung OBS
- Q App Verwaltung
- S1 Firmen Statistik Protokolle OBS
- S2 Statistik Notfallkassen
Umstellung auf RTF
Was ist zu tun?
- PMode 916 auf Ja stellen
- Drucke für RTF anpassen
- Kontrollieren ob die Wörterbuchdateien (Datei:DICT.ZIP) im Verzeichnis (obs\data\DICT\) liegen
Druckanpassungen
In den vars hinzufügen (Vorbildprint nur wenn auch Bilder ausgedruckt werden sollen):
vorbildprint : String;
nRTFStart : integer;
nRTFCharCount : integer;
Nach
// KOPFTEXT ANFANG
suchen und den Abschnitt durch folgendes ersetzen:
if (lKopfFuss) then begin
cBuffer := A_Query.FieldByName('a_kopftext').asString;
if (not empty(Alltrim(cbuffer))) then begin
LangtextDruck(cBuffer,'posnr',cResultVor);
Inc(y,0.5);
cBuffer := '';
end;
end;
ACHTUNG! Nur im vorgangsdruck Angebot mit Bedingung lKopfFuss!
Nach
procedure Positionen();
suchen und in den Vars einfügen:
nAnzCharDruck : Integer;
cRTFOrg : String;
nLMemo : Integer;
Die Variable cResultVor ist in allen Prozeduren zu deklarieren, in denen Langtexte gedruckt werden. Sie ist am Anfang leer zu initialisieren.
Nach
cBuffer := AZ_Query.FieldByName('az_memofeld').asString;
in Positionen(); suchen und alles was in nachfolgendem IF vorkommt ersetzen mit:
if (not empty(cBuffer)) then begin
if (empty (cResultvor)) then begin
inc(y);
end;
if PositionLangtextDruck(cBuffer,nWelcheZeile,cWo,cWelcheZeile,cResultVor,RTF_LANGTEXT) then begin
break;
end;
Dec(y);
end;
if (y >= iSeitenlaenge -iFusszeilen) then begin
break;
end;
Wiederholen, bis alle az_memofeld-Benutzungen (3x) in Positionen so umgestellt sind.
In Positionen am ende des Cases einen neuen Punkt
17 : begin
if Pagebreak(cWo,cResultvor) then begin
break;
end;
end;
hinzufügen.
Suche
TextFuss();
Ersetzen durch
TextFussRich();
Für das Drucken von Bildern nach
cBuffer := AZ_Query.A2C('az_bez2');
in Positionen suchen, danach hinzufügen:
// Bildermodul-Funktionsaufruf
BilderModul(AZ_Query,vorbildprint);
Wichtig ist hierbei, dass nach dem Langtext y inkremetiert wird, falls y niedriger ist, als das Bildende. Für die feste Bildgröße gibt es die Konstante PIC_HEIGHT (deklariert in QStandard.inc). Einzufügen ist im Code folgendes:
neue Variable in Positionen():
nPicPos : Integer;
Setzen nach Bildermodul-Aufruf:
// Bildermodul-Funktionsaufruf
BilderModul(AZ_Query,vorbildprint);
nPicPos := y;
vor Bedingung für PosLine():
if (not empty(vorbildprint)) then begin
if ((nPicPos + PIC_HEIGHT) > y) then begin
y := nPicPos + PIC_HEIGHT;
end;
end;
if Pmode_Nein(303) then begin
PosLine();
PosCalcUebertrag();
end;
Allgemeine Umstellung Drucke
Druckanpassungen
Fehlende Positionsbezeichnungen und Langtexte auf der Folgeseite
Am Ende der Prozedur Positionen() wird cWo mit dem Wert 'Ende' gefüllt, wenn es leer ist. Diese Abfrage ist zu erweitern. Nach
procedure Positionen();
suchen, ans Ende scrollen und Code abändern von:
if (empty (cWo)) then begin
cWo := 'Ende';
end;
cWWI := cAktPos + '|' + cWo + '|' + cWelcheZeile;
end;
nach:
if (empty (cWo)) and (AZ_Query.EoF) then begin
cWo := 'Ende';
end;
cWWI := cAktPos + '|' + cWo + '|' + cWelcheZeile;
end;
Leerzeile statt Lieferdatum
Ebenfalls in der Prozedur Positionen() zu finden (nur Rechnungsdruck). Im Case of wird unter 0 eventuell das Lieferscheindatum gedruckt. Dort wird allerdings nur der String auf not empty abgeprüft, was dazu führen kann, dass eine Leerzeile eingefügt wird, weil im Datum 30.12.1899. Zur sicherheit hier zusätzlich auf Gleitkommawert abfragen: Nach
procedure Positionen();
suchen, ans Ende scrollen und Code abändern:
cBuffer := '';
if (AZ_Query.FieldByName('az_lsnr').AsString <> '') then begin
cBuffer := cAllg10+AZ_Query.FieldByName('az_lsnr').AsString;
end;
if ( (not empty(AZ_Query.FieldByName('az_lsdat').AsString)) and
(AZ_Query.FieldByName('az_lsdat').AsFloat > 0) ) then begin
if (empty(cBuffer)) then begin
cBuffer := AZ_Query.FieldByName('az_lsdat').AsString;
end else begin
cBuffer := cBuffer + ' / ' + AZ_Query.FieldByName('az_lsdat').AsString;
end;
end;
Möglichkeit Positionsmengen und -preise in erster oder letzter Zeile zu drucken
Dies läuft über den Programmparameter 303. Auf "Ja" gestellt ist PosLine() in der ersten Positionszeile auszuführen, bei "Nein" in der letzten. Bei Angebotsdrucken daran denken, dass dort nicht PosLine() aufgerufen wird, wenn "Angebot nur mit Titelsummen" gedruckt wird. Hier muss die komplette Bedingung innerhalb der PMode-Bedingung stehen.
oben direkt nach qRep_SText-Funktion für Spalte bez1 (kann zweimal vorkommen, dann muss es auch zweimal aufgerufen werden):
if (PMode_Ja(303)) then begin
PosLine();
end;
bzw. bei Angebot:
if (PMode_Ja(303)) then begin
if (lTitel) then begin
qRep_SText(EZ,'anz' ,AZ_Query.FieldByName('az_kolli').asString,qRep_YPos(EZ,y));
qRep_SText(EZ,'verp' ,DB_ReadSQLValue(oDB,'s_verp','vp_name','vp_nr = '+DB_SQLVal(AZ_Query.A2C('az_verpack'),'C')),qRep_YPos(EZ,y));
qRep_SText(EZ,'inh' ,TStr(AZ_Query.FieldByName('az_inhalt').asFloat,12,StrToIntDef(PMode_Var(457),2)),qRep_YPos(EZ,y));
qRep_SText(EZ,'menge' ,TStr(AZ_Query.FieldByName('az_menge').asFloat,12,StrToIntDef(PMode_Var(457),2)),qRep_YPos(EZ,y));
qRep_SText(EZ,'einheit',DB_ReadSQLValue(oDB,'S_EINH','se_name','se_nr = '+DB_SQLVal(AZ_Query.FieldByName('az_einheit').AsString,'C')),qRep_YPos(EZ,y));
end else begin
PosLine();
end;
end;
Zum Ende der case-of Bedingung 0 entsprechend PMode_Ja(303) mit PMode_Nein(303) ersetzten.
Berechnung von Überträgen und Zwischensummen fehlerhaft
Für die korrekte Berechnung gibt es jetzt die Prozedur PosCalcUebertrag() in QPosReportFunktionen.inc. Diese muss immer direkt nach PosLine() aufgerufen werden. Sonderfall ist hier der Angebotsdruck. Dort muss es nach der Abfrage auf lTitel (True bei "Angebot nur mit Titelsummen") aufgerufen werden.
Am Anfang der Prozedur Positionen() ist die neue Variable nGPOption (in QPosReportFunktionen.inc deklariert) zu initialisieren.
nGPOption := 0.00;
cWo := '';
cAktPos := '';
Auftraggeber bei Rechnung ausdrucken
Im Kopf nach Auftragsnummer Kunde folgendes einfügen:
// AUFTRAGGEBER KUNDE ANFANG
cBuffer := A_Query.A2C('a_reempf');
if (not empty(cBuffer)) then begin
if (DB_SOpen(oDB,'SELECT * FROM perssta WHERE ps_nr = '+DB_SqlVal(cBuffer,'C'),qPersSta,False,'')) then begin
Inc(y,0.5);
qSetRepStyle(EZ,fsItalic);
qRep_Text3(EZ,iLinkerRand,qRep_YPos(EZ,y),'Leistungsempfänger : '+qPersSta.A2C('ps_gesnr'));
qSetRepStyle(EZ,fsNormal);
cBuffer := DB_ReadSQLValue(oDB,'perssta','ps_kdnr','ps_nr = '+DB_SqlVal(A_Query.A2C('a_knr'),'C'));
if (not(empty(cBuffer))) then begin
qRep_SText(EZ,'Kastentext','Unsere Lieferanten-Nr.: '+cBuffer,qRep_YPos(EZ,y));
end;
Inc(y);
qRep_Text3(EZ,iLinkerRand,qRep_YPos(EZ,y),qPersSta.A2C('ps_name')+' '+qPersSta.A2C('ps_zusatz1')+' '+qPersSta.A2C('ps_zusatz2'));
Inc(y);
qRep_Text3(EZ,iLinkerRand,qRep_YPos(EZ,y),qPersSta.A2C('ps_strasse'));
Inc(y);
qRep_Text3(EZ,iLinkerRand,qRep_YPos(EZ,y),qPersSta.A2C('ps_plz')+' '+qPersSta.A2C('ps_ort'));
Inc(y);
end;
cBuffer := '';
end;
// AUFTRAGGEBER KUNDE ENDE
Versandanschrift bei Auftragsbestätigungen drucken
Hierfür die Prozeduren AdressKopfVersand(nAdrZeile: Double) und AdressKopfFolgeSeiteKurzVersand(nAdrZeile: Double) verwenden.
PosLine() am Positionsende immer drucken
Falls PosLine() am Ende einer Position ausgeführt wird, soll dies auch immer geschehen, wenn das Positionsende erreicht wird. Hier kann es sein, dass zwischen Langtextdruck und PosLine() der restliche Seitenplatz abgefragt wird. Dies darf aber nur vorm Drucken einer weiteren Zeile geschehen. Bekannt ist hier der Fall, dass es vor der Bedingung des Artikelnummerndrucks abgefragt wird. Ist der Langtext aber das Letzte was gedruckt wird, weil Artikelnummer nicht gedruckt werden sollen, und schließt mit dem Seitenende ab, so muss trotzdem mit PosLine() die Position beendet werden, da auf der nächsten Seite die eine neue Position folgt.
falsch (Abfrage vor Bedingung):
if (y >= iSeitenlaenge -iFusszeilen) then begin
break;
end;
if (Pos('AU',PMode_Var(534)) <> 0) and (not empty(AZ_Query.FieldByName('az_artnr').AsString)) then begin
muss innerhalb der Bedingung nach dem Inc und vor Artikelnummerndruck:
if (y >= iSeitenlaenge -iFusszeilen) then begin
cWo := 'Vor Artikelnummer';
break;
end;
if (empty(cWo)) or (cWo = 'Vor Artikelnummer') then begin
qSetRepStyle(EZ,fsItalic);
qRep_SText(EZ,'bez1','Art-Nr.: '+AZ_Query.A2C('az_artnr'),qRep_YPos(EZ,y));
qSetRepStyle(EZ,fsNormal);
end;
Positionen werden trotz Einstellung "kein Druck" ausgedruckt
Um dies zu beheben, muss in jedem Vorgangsdruck die Prozedur PositionenOhneAusdruck() aufgerufen werden. Diese ist in der Prozedur Positionen innerhalb der for-Schleife folgendermaßen einzufügen:
for i:=1 to iPosMenge do begin
PositionenOhneAusdruck();
if (not AZ_Query.Eof) then begin
Alternativtitel auch als alternativen Titel drucken
Ähnlich der Alternativposition gibt es auch Alternativtitel. Sämtliche Titelpositionen werden nicht in der Gesamtsumme erfasst. Alternativtitel sind jedoch im Ausdruck nicht ersichtlich. Um dies zu ändern in den Vorgangsdrucken nach der Prozedur Positionen() suchen. Im Case Of für Typ 7 folgende Anpassung vornehmen:
7 : begin
if (DruckeTitel(cResultvor,cWo,cWelcheZeile,nWelcheZeile,i)) then begin
break;
end;
end;
ACHTUNG! Statt Sprachen.inc die neue Datei qSprachen.inc benutzen. Die Deklaration der Sprachvariablen entsprechend aus dem Vorgangsdruck entfernen, da diese in qSprachen.inc deklariert sind.
SQL-Abfrage INSTR ersetzten
In den Drucken befinden sich oftmals noch Statements mit INSTR im WHERE für A_Query. Dies mit DB_SQLInstr wie folgt ersetzten:
if (DB_SOpen(oDB,'SELECT * FROM rechsta WHERE ' + DB_SQLInstr('sys_uid',cRechNr,','),A_Query,False,'')) then begin
Seriennummern drucken
Um Seriennummern drucken zu können, muss Folgendes im Druck direkt vor der Artikelnummerbedingung eingefügt werden:
if (DruckeSeriennummern(nWelcheZeile,cWelcheZeile,cWo,cResultvor,'auid')) then begin
break;
end;
ACHTUNG! Je nach Vorgangsdruck muss ein anderes Uid-Feld übergeben werden.
- AU: auid
- LS: luid
- RE: ruid