OBS/Adminhilfe/RTF: Unterschied zwischen den Versionen

Aus OBS Wiki
Zur Navigation springen Zur Suche springen
Für diese Seite wurde eine Zugriffsbeschränkung eingerichtet. Falls du diese Nachricht siehst, bist du nicht berechtigt, diese Seite einzusehen.
K (hat „Admin/RTF“ nach „OBS/Adminhilfe/RTF“ verschoben)
 
(21 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{ZugriffOBS}}
{{ZugriffOBS}}
= Häufige RTF-Probleme=
== SQL-Querys ==
Es kann bei einigen Altlasten passieren das leere RTF-Strings in der Datenbank existieren. Mit folgendem SQL-Statement kann man diese heraus löschen:
<source lang="SQL">
update artikel set a_langtext = ''
where a_langtext = '{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0\\fnil MS Sans Serif;}}
\r\n\\viewkind4\\uc1\\pard\\lang1031\\f0\\fs16 \r\n\\par }\r\n\0'
</source>


= Umstellung auf RTF =
= Umstellung auf RTF =
== Was ist zu tun? ==
== Was ist zu tun? ==
# PMode 916 auf Ja stellen
# PMode 916 auf Ja stellen
Zeile 8: Zeile 18:


== Druckanpassungen ==
== Druckanpassungen ==
'''WICHTIG''' Bei Pax-Drucken müssen alle Inc(y,z) und Dec(y,z) durch y:= y +/- z ersetzt werden<br/>
'''WICHTIG!''' Für den Langtextdruck im RTF-Format gibt feste Funktionen in ''QStandard.inc''. Diese sind hier nur zu verwenden. Zusätzliche Variablen werden nicht benötigt.
In den vars hinzufügen (Vorbildprint nur wenn auch Bilder ausgedruckt werden sollen):
In den vars hinzufügen (Vorbildprint nur wenn auch Bilder ausgedruckt werden sollen):
<source lang="delphi">
<source lang="delphi">
     vorbildprint      : String;
     vorbildprint      : String;
    nRTFStart          : integer;
    nRTFCharCount      : integer;
</source>
</source>
----
----
Zeile 20: Zeile 31:
<source lang="delphi">
<source lang="delphi">
     if (lKopfFuss) then begin
     if (lKopfFuss) then begin
      cBuffer := A_Query.FieldByName('a_kopftext').asString;
        cBuffer := A_Query.A2C('a_kopftext');
      if (not empty(Alltrim(cbuffer))) then begin
        if (not empty(Alltrim(cbuffer))) then begin
        LangtextDruck(cBuffer,'posnr',cResultVor);
            LangtextDruck(cBuffer,'posnr',cResultVor);
        Inc(y,0.5);
            y := y + 0.5;
        cBuffer := '';
            cBuffer := '';
      end;
        end;
     end;
     end;
</source>
</source>


'''ACHTUNG!''' Nur im vorgangsdruck Angebot mit Bedingung ''lKopfFuss''!
'''ACHTUNG!''' Nur im Vorgangsdruck Angebot mit Bedingung ''lKopfFuss''!
----
Nach
procedure Positionen();
suchen und in den Vars einfügen:
<source lang="delphi">
    nAnzCharDruck : Integer;
    cRTFOrg      : String;
    nLMemo        : Integer;
</source>
----
----


Zeile 45: Zeile 47:
----
----
Nach
Nach
  cBuffer := AZ_Query.FieldByName('az_memofeld').asString;
cbuffer := AZ_Query.A2C('az_memofeld');
oder bei Kasse:
  cBuffer := AZ_Query.FieldByName('az_langtext').asString;
in Positionen(); suchen und alles was in nachfolgendem IF vorkommt ersetzen mit:
in Positionen(); suchen und alles was in nachfolgendem IF vorkommt ersetzen mit:
<source lang="delphi">
<source lang="delphi">
                 if (not empty(cBuffer)) then begin
                 if (not empty(cBuffer)) then begin
                  if (empty (cResultvor)) then begin
                    if (empty (cResultvor)) then begin
                    inc(y);
                        y := y + 1;
                  end;
                    end;
                  if PositionLangtextDruck(cBuffer,nWelcheZeile,cWo,cWelcheZeile,cResultVor,RTF_LANGTEXT) then begin
                    if (PositionLangtextDruck(cBuffer,nWelcheZeile,cWo,cWelcheZeile,cResultVor,RTF_LANGTEXT)) then begin
                    break;
                        break;
                  end;
                    end;
                  Dec(y);
                    y := y - 1;
                end;
                if (y >= iSeitenlaenge -iFusszeilen) then begin
                  break;
                 end;
                 end;
</source>
Wiederholen, bis alle az_memofeld-Benutzungen (3x) in Positionen so umgestellt sind.
----
In Positionen am ende des Cases einen neuen Punkt
<source lang="delphi">
          17 : begin
                  if Pagebreak(cWo,cResultvor) then begin
                    break;
                  end;
              end;
</source>
hinzufügen.
----
Suche
TextFuss();
Ersetzen durch
<source lang="delphi">
TextFussRich();
</source>
----
Für das Drucken von Bildern nach
    cBuffer := AZ_Query.A2C('az_bez2');
in Positionen suchen, danach hinzufügen:
<source lang="delphi">
                            // Bildermodul-Funktionsaufruf
                            BilderModul(AZ_Query,vorbildprint);
</source>
</source>


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).
Falls direkt auf den Langtext folgende Zeilen aufgerufen werden, sollten diee entfernt werden.
Einzufügen ist im Code folgendes:


neue Variable in Positionen():
<source lang="delphi">
<source lang="delphi">
    nPicPos      : Integer;
                 if (y >= iSeitenlaenge - iFusszeilen) then begin
</source>
                     break;
 
Setzen nach Bildermodul-Aufruf:
<source lang="delphi">
                 // Bildermodul-Funktionsaufruf
                BilderModul(AZ_Query,vorbildprint);
                nPicPos := y;
</source>
 
vor Bedingung für PosLine():
<source lang="delphi">
                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;
                 end;
</source>
</source>
Wiederholen, bis alle az_memofeld-Benutzungen (3x) in Positionen so umgestellt sind.


= 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:
<source lang="delphi">
  if (empty (cWo)) then begin
    cWo := 'Ende';
  end;
    cWWI := cAktPos + '|' + cWo + '|' + cWelcheZeile;
  end;
</source>
nach:
<source lang="delphi">
  if (empty (cWo)) and (AZ_Query.EoF) then begin
    cWo := 'Ende';
  end;
  cWWI := cAktPos + '|' + cWo + '|' + cWelcheZeile;
end;
</source>
----
----


=== Leerzeile statt Lieferdatum ===
Die Vorgangslangtexte müssen ebenfalls angepasst werden. Dazu alles im Positionstyp 1 mit folgenden Zeilen ersetzten:


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:
<source lang="delphi">
<source lang="delphi">
                cBuffer := '';
                  cBuffer := AZ_Query.A2C('az_memofeld');
                if (AZ_Query.FieldByName('az_lsnr').AsString <> '') then begin
                  if (not empty(cBuffer)) then begin
                  cBuffer := cAllg10+AZ_Query.FieldByName('az_lsnr').AsString;
                      y := y + 1;
                end;
                      if (TitelLangtextDruck(cBuffer,nWelcheZeile,cWo,cWelcheZeile,cResultVor,GetTextBreite('1'))) then begin
                if ( (not empty(AZ_Query.FieldByName('az_lsdat').AsString)) and
                          break;
                      (AZ_Query.FieldByName('az_lsdat').AsFloat > 0) )      then begin
                      end;
                  if (empty(cBuffer)) then begin
                      y := y - 1;
                    cBuffer := AZ_Query.FieldByName('az_lsdat').AsString;
                  end else begin
                    cBuffer := cBuffer + ' / ' + AZ_Query.FieldByName('az_lsdat').AsString;
                   end;
                   end;
                end;
</source>
</source>


----
Alles was in PosTyp 7 steht, muss durch folgedes ersetzt werden:
 
=== 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):
<source lang="delphi">
<source lang="delphi">
  if (PMode_Ja(303)) then begin
                  if (DruckeTitel(cResultvor,cWo,cWelcheZeile,nWelcheZeile,i,'az_memofeld')) then begin
      PosLine();
                      break;
  end;
                  end;
</source>
bzw. bei Angebot:
<source lang="delphi">
  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;
</source>
 
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.
<source lang="delphi">
    nGPOption      := 0.00;
    cWo            := '';
    cAktPos        := '';
</source>
</source>
----
----


=== Auftraggeber bei Rechnung ausdrucken ===
In Positionen am Ende des Cases einen neuen Punkt
Im Kopf nach Auftragsnummer Kunde folgendes einfügen:
 
<source lang="delphi">
<source lang="delphi">
    // AUFTRAGGEBER KUNDE ANFANG
          17 : begin
    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 (Pagebreak(cWo,cResultvor)) then begin
        if (not(empty(cBuffer))) then begin
                      break;
          qRep_SText(EZ,'Kastentext','Unsere Lieferanten-Nr.: '+cBuffer,qRep_YPos(EZ,y));
                  end;
        end;


        Inc(y);
              end;
        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
</source>
</source>
hinzufügen.


----
----


=== Versandanschrift bei Auftragsbestätigungen drucken ===
Am Ende von Positionen();
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):
<source lang="delphi">
<source lang="delphi">
                if (y >= iSeitenlaenge -iFusszeilen) then begin
if ( (empty (cWo))  
                  break;
                end;
 
                if (Pos('AU',PMode_Var(534)) <> 0) and (not empty(AZ_Query.FieldByName('az_artnr').AsString)) then begin
</source>
</source>
 
durch
muss innerhalb der Bedingung nach dem Inc und vor Artikelnummerndruck:
<source lang="delphi">
<source lang="delphi">
                  if (y >= iSeitenlaenge -iFusszeilen) then begin
if ( (empty (cWo)) and (AZ_Query.EoF) ) then begin
                    break;
                  end;
 
                  qSetRepStyle(EZ,fsItalic);
                  qRep_SText(EZ,'bez1','Art-Nr.: '+AZ_Query.FieldByName('az_artnr').AsString,qRep_YPos(EZ,y));
                  qSetRepStyle(EZ,fsNormal);
</source>
</source>
ersetzen.


----
----


=== Positionen werden trotz Einstellung "kein Druck" ausgedruckt ===
In der Printfunktion '''!muss!''' <br>
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:
'''TextFussRich();''' <br>
 
gegen <br>
<source lang="delphi">
'''TextFuss();'''
    for i:=1 to iPosMenge do begin
ausgetauscht werden!
      PositionenOhneAusdruck();
      if (not AZ_Query.Eof) then begin
</source>


----
----
 
Für den Fall, dass ein Repa umgestellt werden muss, ist folgendes zu beachten!:
=== 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:
 
<source lang="delphi">
<source lang="delphi">
 
    iZeilen := MLCount(cBuffer,100);
          7 : begin
    for i := 1 to iZeilen do begin
 
      qRep_Text3(EZ,iLinkerRand,qRep_Ypos(EZ,y),MemoLine(cBuffer,100,i));
                if (DruckeTitel(cResultvor,cWo,cWelcheZeile,nWelcheZeile,i)) then begin
      y := y + 0.8;
                    break;
    end;
                end;
 
              end;
 
</source>
</source>


'''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.
Muss durch
----
 
=== 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:


<source lang="delphi">
<source lang="delphi">
    if (DB_SOpen(oDB,'SELECT * FROM rechsta WHERE ' + DB_SQLInstr('sys_uid',cRechNr,','),A_Query,False,'')) then begin
    if (not empty(Alltrim(cbuffer))) then begin
        LangtextDruck_XPos(cBuffer,iLinkerRand,cResultVor);
        y := y + 0.8;
        cBuffer := '';
    end;
</source>
</source>
 
ersetzt werden.
----
----


=== Seriennummern drucken ===
= Bekannte RTF-Bugs =
Über den Programmparameter 420 lässt sich das drucken von Seriennummern Steuern. In den Drucken ist dafür nicht immer etwas enthalten. Folgendes ist dafür vor der Bedingung für den Artikelnummenrdruck einzufügen:
 
<source lang="delphi">
   
                if (PMode_Ja(420)) then begin
                  cBuffer := '';
                  cSql := 'SELECT * FROM serien WHERE ruid = '+DB_SQLVal(AZ_Query.A2C('az_uid'),'C');
                  if (DB_SOpen(oDB,cSql,qSerien,'',False)) then begin
                    while (not(qSerien.Eof)) do begin
                      cBuffer := cBuffer + AllTrim(qSerien.A2C('snr')) + ',' + CRLF;
                      qSerien.Next;
                    end;
                    cBuffer := LeftStr(cBuffer,Length(cBuffer)-3);
                  end;
                  DB_Close(qSerien);


                  if (not empty(cBuffer)) then begin
# Höhenberechnung bei Aufzählungen mit Aufzählungszeichen nicht korrekt (Zeilenhöhe ist etwas höher). Bei nummerierter Aufzählung keine Probleme.
                    cBuffer := 'SERNR.: ' + cBuffer;
                    iZeilen := MLCount(cBuffer,100);
                    if (empty (cResultvor)) or (cResultvor = 'Seriennr') then begin
                      for j := nWelcheZeile to iZeilen do begin
                        Inc(y);
                        if (y >= iSeitenlaenge -iFusszeilen) then begin
                          cWo := 'Seriennr';
                          cWelcheZeile := IntToStr(j);
                          break;
                        end;
                        qRep_SText(EZ,'bez1',StrTran(MemoLine(cBuffer,200,j),#13#10,''),qRep_YPos(EZ,y));
                      end;
                      if(cWo <> '') then begin
                          break;
                      end else begin
                      nWelcheZeile := 1;
                      cWelcheZeile := '';
                      cResultvor := '';
                      end;
                    end;
                    cBuffer := '';
                  end;
                end;
 
</source>
 
----

Aktuelle Version vom 9. September 2016, 15:00 Uhr

Dies ist eine zugriffsgeschützte Seite.


Admin-Hilfe

OBS-Administration / Installation
kundenspezifische Anpassungen
OBS Protokolle
Shop-Administration

Häufige RTF-Probleme

SQL-Querys

Es kann bei einigen Altlasten passieren das leere RTF-Strings in der Datenbank existieren. Mit folgendem SQL-Statement kann man diese heraus löschen:

update artikel set a_langtext = ''
where a_langtext = '{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0\\fnil MS Sans Serif;}}
\r\n\\viewkind4\\uc1\\pard\\lang1031\\f0\\fs16 \r\n\\par }\r\n\0'

Umstellung auf RTF

Was ist zu tun?

  1. PMode 916 auf Ja stellen
  2. Drucke für RTF anpassen
  3. Kontrollieren ob die Wörterbuchdateien (Datei:DICT.ZIP) im Verzeichnis (obs\data\DICT\) liegen

Druckanpassungen

WICHTIG Bei Pax-Drucken müssen alle Inc(y,z) und Dec(y,z) durch y:= y +/- z ersetzt werden
WICHTIG! Für den Langtextdruck im RTF-Format gibt feste Funktionen in QStandard.inc. Diese sind hier nur zu verwenden. Zusätzliche Variablen werden nicht benötigt.

In den vars hinzufügen (Vorbildprint nur wenn auch Bilder ausgedruckt werden sollen):

    vorbildprint       : String;

Nach

    // KOPFTEXT ANFANG

suchen und den Abschnitt durch folgendes ersetzen:

    if (lKopfFuss) then begin
        cBuffer := A_Query.A2C('a_kopftext');
        if (not empty(Alltrim(cbuffer))) then begin
            LangtextDruck(cBuffer,'posnr',cResultVor);
            y := y + 0.5;
            cBuffer := '';
        end;
    end;

ACHTUNG! Nur im Vorgangsdruck Angebot mit Bedingung lKopfFuss!


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.A2C('az_memofeld');

oder bei Kasse:

cBuffer := AZ_Query.FieldByName('az_langtext').asString;

in Positionen(); suchen und alles was in nachfolgendem IF vorkommt ersetzen mit:

                 if (not empty(cBuffer)) then begin
                     if (empty (cResultvor)) then begin
                         y := y + 1;
                     end;
                     if (PositionLangtextDruck(cBuffer,nWelcheZeile,cWo,cWelcheZeile,cResultVor,RTF_LANGTEXT)) then begin
                         break;
                     end;
                     y := y - 1;
                 end;

Falls direkt auf den Langtext folgende Zeilen aufgerufen werden, sollten diee entfernt werden.

                 if (y >= iSeitenlaenge - iFusszeilen) then begin
                     break;
                 end;

Wiederholen, bis alle az_memofeld-Benutzungen (3x) in Positionen so umgestellt sind.


Die Vorgangslangtexte müssen ebenfalls angepasst werden. Dazu alles im Positionstyp 1 mit folgenden Zeilen ersetzten:

                   cBuffer := AZ_Query.A2C('az_memofeld');
                   if (not empty(cBuffer)) then begin
                       y := y + 1;
                       if (TitelLangtextDruck(cBuffer,nWelcheZeile,cWo,cWelcheZeile,cResultVor,GetTextBreite('1'))) then begin
                           break;
                       end;
                       y := y - 1;
                   end;

Alles was in PosTyp 7 steht, muss durch folgedes ersetzt werden:

                   if (DruckeTitel(cResultvor,cWo,cWelcheZeile,nWelcheZeile,i,'az_memofeld')) then begin
                       break;
                   end;

In Positionen am Ende des Cases einen neuen Punkt

          17 : begin

                   if (Pagebreak(cWo,cResultvor)) then begin
                       break;
                   end;

               end;

hinzufügen.


Am Ende von Positionen();

 if ( (empty (cWo))

durch

 if ( (empty (cWo)) and (AZ_Query.EoF) ) then begin

ersetzen.


In der Printfunktion !muss!
TextFussRich();
gegen
TextFuss(); ausgetauscht werden!


Für den Fall, dass ein Repa umgestellt werden muss, ist folgendes zu beachten!:

    iZeilen := MLCount(cBuffer,100);
    for i := 1 to iZeilen do begin
      qRep_Text3(EZ,iLinkerRand,qRep_Ypos(EZ,y),MemoLine(cBuffer,100,i));
      y := y + 0.8;
    end;

Muss durch

     if (not empty(Alltrim(cbuffer))) then begin
        LangtextDruck_XPos(cBuffer,iLinkerRand,cResultVor);
        y := y + 0.8;
        cBuffer := '';
    end;

ersetzt werden.


Bekannte RTF-Bugs

  1. Höhenberechnung bei Aufzählungen mit Aufzählungszeichen nicht korrekt (Zeilenhöhe ist etwas höher). Bei nummerierter Aufzählung keine Probleme.