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.
Zeile 21: Zeile 21:
<source lang="delphi">
<source lang="delphi">
     vorbildprint      : String;
     vorbildprint      : String;
    nRTFStart          : integer;
    nRTFCharCount      : integer;
</source>
</source>
----
----
Zeile 30: Zeile 28:
<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);
            Inc(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 61: Zeile 50:
<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);
                        inc(y);
                  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;
                    end;
                    Dec(y);
                end;
</source>
 
Falls direkt auf den Langtext folgende Zeilen aufgerufen werden, sollten diee entfernt werden.
 
<source lang="delphi">
                if (y >= iSeitenlaenge - iFusszeilen) then begin
                     break;
                     break;
                  end;
                  Dec(y);
                end;
                if (y >= iSeitenlaenge -iFusszeilen) then begin
                  break;
                 end;
                 end;
</source>
</source>
Wiederholen, bis alle az_memofeld-Benutzungen (3x) in Positionen so umgestellt sind.
Wiederholen, bis alle az_memofeld-Benutzungen (3x) in Positionen so umgestellt sind.
----
----
In Positionen am ende des Cases einen neuen Punkt
 
Die Vorgangslangtexte müssen ebenfalls angepasst werden. Dazu alles im Positionstyp 1 mit folgenden Zeilen ersetzten:
 
<source lang="delphi">
                  cBuffer := AZ_Query.A2C('az_memofeld');
                  if (not empty(cBuffer)) then begin
                      Inc(y);
                      if (TitelLangtextDruck(cBuffer,nWelcheZeile,cWo,cWelcheZeile,cResultVor,GetTextBreite('1'))) then begin
                          break;
                      end;
                      Dec(y);
                  end;
</source>
 
----
 
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>
Zeile 100: Zeile 113:


Für das Drucken von Bildern nach
Für das Drucken von Bildern nach
    cBuffer := AZ_Query.A2C('az_bez2');
in Positionen suchen, davor hinzufügen:
<source lang="delphi">
<source lang="delphi">
                            // Bildermodul-Funktionsaufruf
        case AZ_Query.A2I('az_typ') of
                            lPicPrinted := BilderModul(AZ_Query,vorbildprint);
          0 :  begin
                            nPicPos    := y;
 
                  Inc(y);
                  if (y >= iSeitenlaenge-iFussZeilen) then begin
                      cWo := 'Vor Bezeichnung1';
                      break;
                  end;
</source>
 
in Positionen suchen. Zwischen ''Inc(y)'' und Abfrage folgendes einfügen:
<source lang="delphi">
 
                  // *** BILDERMODUL ***
                  cBuffer := vorbildprint;
 
                  if BilderModul(AZ_Query,vorbildprint) then begin
                      cWo := 'Vor Bezeichnung1';
                      break;
                  end;
 
                  lPicPrinted := (not empty(vorbildprint)) and (cBuffer <> vorbildprint);
                  nPicPos    := y;
                  // *** BILDERMODUL ***
 
</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 aber innerhalb der Position ein Seitenumbruch stattfand und das Bild schon gedruckt wurde, darf auf der neuen Seite kein Increment von y erfolgen!
Wichtig ist hierbei, dass nach dem Langtext y inkremetiert wird, falls y niedriger ist, als das Bildende. Die benötigten Zeilen werden in der Funktion ''BilderModul'' (QStandard.inc) berechnet und in der globalen Variablen nBildInc gepeichert (deklariert in QStandard.inc). Falls aber innerhalb der Position ein Seitenumbruch stattfand und das Bild schon gedruckt wurde, darf auf der neuen Seite kein Increment von y erfolgen!
Einzufügen ist im Code folgendes:
Einzufügen ist im Code folgendes:


Zeile 114: Zeile 147:
<source lang="delphi">
<source lang="delphi">
                 if (not empty(vorbildprint)) and (lPicPrinted) then begin
                 if (not empty(vorbildprint)) and (lPicPrinted) then begin
                     if ((nPicPos + PIC_HEIGHT) > y) then begin
                     if ((nPicPos + nBildInc) > y) then begin
                         y := nPicPos + PIC_HEIGHT;
                         y := nPicPos + nBildInc;
                     end;
                     end;
                 end;
                 end;

Version vom 22. März 2012, 15:47 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

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);
            Inc(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.FieldByName('az_memofeld').asString;

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
                         inc(y);
                     end;
                     if (PositionLangtextDruck(cBuffer,nWelcheZeile,cWo,cWelcheZeile,cResultVor,RTF_LANGTEXT)) then begin
                         break;
                     end;
                     Dec(y);
                 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
                       Inc(y);
                       if (TitelLangtextDruck(cBuffer,nWelcheZeile,cWo,cWelcheZeile,cResultVor,GetTextBreite('1'))) then begin
                           break;
                       end;
                       Dec(y);
                   end;

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 einen Positionsdruck mit Bildern werden zwei neue Variablen in der Prozedur Positionen() benötigt:

    nPicPos       : Integer; // Position des Bildes
    lPicPrinted   : Boolean; // Bild gedruckt Ja/Nein; Damit kein falscher Zeilenincrement bei Seitnumbruch gemacht wird.


Für das Drucken von Bildern nach

        case AZ_Query.A2I('az_typ') of
          0 :  begin

                   Inc(y);
                   if (y >= iSeitenlaenge-iFussZeilen) then begin
                       cWo := 'Vor Bezeichnung1';
                       break;
                   end;

in Positionen suchen. Zwischen Inc(y) und Abfrage folgendes einfügen:

                   // *** BILDERMODUL ***
                   cBuffer := vorbildprint;

                   if BilderModul(AZ_Query,vorbildprint) then begin
                       cWo := 'Vor Bezeichnung1';
                       break;
                   end;

                   lPicPrinted := (not empty(vorbildprint)) and (cBuffer <> vorbildprint);
                   nPicPos     := y;
                   // *** BILDERMODUL ***

Wichtig ist hierbei, dass nach dem Langtext y inkremetiert wird, falls y niedriger ist, als das Bildende. Die benötigten Zeilen werden in der Funktion BilderModul (QStandard.inc) berechnet und in der globalen Variablen nBildInc gepeichert (deklariert in QStandard.inc). Falls aber innerhalb der Position ein Seitenumbruch stattfand und das Bild schon gedruckt wurde, darf auf der neuen Seite kein Increment von y erfolgen! Einzufügen ist im Code folgendes:

vor Bedingung für PosLine():

                 if (not empty(vorbildprint)) and (lPicPrinted) then begin
                     if ((nPicPos + nBildInc) > y) then begin
                         y := nPicPos + nBildInc;
                     end;
                 end;

                 if Pmode_Nein(303) then begin
                     PosLine();
                     PosCalcUebertrag();
                 end;

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.