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.
Keine Bearbeitungszusammenfassung
K (hat „Admin/RTF“ nach „OBS/Adminhilfe/RTF“ verschoben)
 
(43 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''!
----
Die Variable ''cResultVor'' ist in allen Prozeduren zu deklarieren, in denen Langtexte gedruckt werden. Sie ist am Anfang leer zu initialisieren.
----
----
Nach
Nach
  procedure Positionen();
  cbuffer := AZ_Query.A2C('az_memofeld');
suchen und in den Vars einfügen:
oder bei Kasse:
cBuffer := AZ_Query.FieldByName('az_langtext').asString;
in Positionen(); suchen und alles was in nachfolgendem IF vorkommt ersetzen mit:
<source lang="delphi">
<source lang="delphi">
    nAnzCharDruck : Integer;
                if (not empty(cBuffer)) then begin
    cRTFOrg      : String;
                    if (empty (cResultvor)) then begin
    nLMemo        : Integer;
                        y := y + 1;
                    end;
                    if (PositionLangtextDruck(cBuffer,nWelcheZeile,cWo,cWelcheZeile,cResultVor,RTF_LANGTEXT)) then begin
                        break;
                    end;
                    y := y - 1;
                end;
</source>
</source>
----
 
Nach
Falls direkt auf den Langtext folgende Zeilen aufgerufen werden, sollten diee entfernt werden.
    cWelcheZeile  := Token(cWWI,'|',3);
 
Suchen, danach hinzufügen:
<source lang="delphi">
<source lang="delphi">
    nLMemo        := 0;
                if (y >= iSeitenlaenge - iFusszeilen) then begin
                    break;
                end;
</source>
</source>
Wiederholen, bis alle az_memofeld-Benutzungen (3x) in Positionen so umgestellt sind.
----
----
Nach
 
cBuffer := AZ_Query.FieldByName('az_memofeld').asString;
Die Vorgangslangtexte müssen ebenfalls angepasst werden. Dazu alles im Positionstyp 1 mit folgenden Zeilen ersetzten:
in Positionen(); suchen und alles was in nachfolgendem IF vorkommt ersetzen mit:
 
<source lang="delphi">
<source lang="delphi">
                if (not empty(cBuffer)) then begin
                  cBuffer := AZ_Query.A2C('az_memofeld');
                  if (empty (cResultvor)) then begin
                  if (not empty(cBuffer)) then begin
                    inc(y);
                      y := y + 1;
                      if (TitelLangtextDruck(cBuffer,nWelcheZeile,cWo,cWelcheZeile,cResultVor,GetTextBreite('1'))) then begin
                          break;
                      end;
                      y := y - 1;
                   end;
                   end;
                   if PositionLangtextDruck(cBuffer,nWelcheZeile,cWo,cWelcheZeile,cResultVor,RTF_LANGTEXT) then begin
</source>
                    break;
 
Alles was in PosTyp 7 steht, muss durch folgedes ersetzt werden:
<source lang="delphi">
                   if (DruckeTitel(cResultvor,cWo,cWelcheZeile,nWelcheZeile,i,'az_memofeld')) then begin
                      break;
                   end;
                   end;
                  Dec(y);
 
                end;
                if (y >= iSeitenlaenge -iFusszeilen) then begin
                  break;
                end;
</source>
</source>
Wiederholen, bis alle az_memofeld-Benutzungen (3x) in Positionen so umgestellt sind.
----
----
In Positionen am ende des Cases einen neuen Punkt
 
In Positionen am Ende des Cases einen neuen Punkt
<source lang="delphi">
<source lang="delphi">
           17 : begin
           17 : begin
                  if Pagebreak(cWo,cResultvor) then begin
 
                    break;
                  if (Pagebreak(cWo,cResultvor)) then begin
                  end;
                      break;
                  end;
 
               end;
               end;
</source>
</source>
hinzufügen.
hinzufügen.
----
----
Suche
 
TextFuss();
Am Ende von Positionen();
Ersetzen durch
<source lang="delphi">
<source lang="delphi">
  TextFussRich();
  if ( (empty (cWo))  
</source>
</source>
durch
<source lang="delphi">
if ( (empty (cWo)) and (AZ_Query.EoF) ) then begin
</source>
ersetzen.


= Allgemeine Umstellung Drucke =
----


== Druckanpassungen ==
In der Printfunktion '''!muss!''' <br>
'''TextFussRich();''' <br>
gegen <br>
'''TextFuss();'''
ausgetauscht werden!


=== Fehlende Positionsbezeichnungen und Langtexte auf der Folgeseite ===
----
 
Für den Fall, dass ein Repa umgestellt werden muss, ist folgendes zu beachten!:
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">
<source lang="delphi">
  if (empty (cWo)) then begin
    iZeilen := MLCount(cBuffer,100);
     cWo := 'Ende';
     for i := 1 to iZeilen do begin
  end;
      qRep_Text3(EZ,iLinkerRand,qRep_Ypos(EZ,y),MemoLine(cBuffer,100,i));
    cWWI := cAktPos + '|' + cWo + '|' + cWelcheZeile;
      y := y + 0.8;
  end;
    end;
</source>
</source>


nach:
Muss durch
 
<source lang="delphi">
<source lang="delphi">
  if (empty (cWo)) and (AZ_Query.EoF) then begin
    if (not empty(Alltrim(cbuffer))) then begin
    cWo := 'Ende';
        LangtextDruck_XPos(cBuffer,iLinkerRand,cResultVor);
  end;
        y := y + 0.8;
  cWWI := cAktPos + '|' + cWo + '|' + cWelcheZeile;
        cBuffer := '';
end;
    end;
</source>
</source>
ersetzt werden.
----


=== Berechnung von Überträgen und Zwischensummen fehlerhaft ===
= Bekannte RTF-Bugs =
 
=== Leerzeile statt Lieferdatum ===
 
=== Auftraggeber bei Rechnung ausdrucken ===


=== Versandanschrift bei Auftragsbestätigungen drucken ===
# Höhenberechnung bei Aufzählungen mit Aufzählungszeichen nicht korrekt (Zeilenhöhe ist etwas höher). Bei nummerierter Aufzählung keine Probleme.

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.