Drucken in ClassiX
Diese Dokumentation soll dem Anwender von ClassiX das Zusammenspiel von Word und dem ClassiX – Druck näher bringen. Somit wird zuerst erklärt, welche Worddokumente wie am Druck beteiligt sind, bevor der Aufbau eins Druckformulars beschrieben wird. In diesem Zusammenhang wird letztendlich noch der Zugriff von Word auf Informationen aus der Datenbank, an ausgewählten Beispielen, erläutert.
Zu wissen, welche Änderungen in den Worddokumenten welche Veränderungen im Ausdruck eines Formulars bewirken, sollte das allgemeine Ziel dieser Dokumentation sein.
1. Arbeiten mit Word
1.1 OleBox
Die OleBox stellt die Schnittstelle zwischen ClassiX und den Word- und Exceldokumenten her. Durch Doppelklick auf ein angezeigtes OLE-Objekt #01 wird die entsprechende Anwendung gestartet und das OLE-Objekt kann darin bearbeitet werden.
Ähnlich einem MLString-Widget #02 ist auch die MLOleBox mehrsprachenfähig. Die Sprache kann durch die Tasten PgUp/PgDown (Bild auf, Bild ab) umgestellt werden. Zu Orientierung, wird in der oberen Rechten Ecke des Widgets die aktuelle Sprache, durch das Länderkürzel (in der locales.txt änderbar), angezeigt.
Tipp:
Eine OleBox akzeptiert das Droppen von OLE-Objekten. Man kann also auch eine MS-Word-Datei, welche man außerhalb der ClassiX- Datenbank bearbeitet, über „Drag and Drop“ in eine OleBox ziehen.
Nach dem Bearbeiten eines Worddokumentes gibt es mehrere Wege, um das Worddokumentes zu speichern und zu ClassiX zurückzukehren. Die „richtigeren“ Möglichkeiten sind die über das Menü (Datei -> Schließen) beziehungsweise über das Schließenkreuz.
Die Worddokumente, die sich hinter einer OleBox verbergen, können auch Dokumentvariablen enthalten, welche in einem späteren Abschnitt beschrieben werden. Aktualisieren sich die Informationen, die hinter diesen Feldern stehen, so kann man auch die Ansicht der OleBox aktualisieren. Dies geschieht über den Auffrischen- Button. |
1.2 Formatvorlage
Um ein einheitliches Erscheinungsbild der Worddokumente zu realisieren, macht sich ClassiX die Vorteile der Formatvorlage zu nutzen.
Eine Formatvorlage ist eine Gruppe von Formatierungsmerkmalen, die dem Text im Dokument zugewiesen werden kann, um auf schnelle Weise das Erscheinungsbild zu ändern. Wenn Sie eine Formatvorlage zuweisen, übernehmen Sie eine Gruppe von Formatierungen in einem Schritt.
Wenn man Microsoft Word startet, basiert das neue, leere Dokument auf der Vorlage Normal, und der Text, den man eingibt, verwendet die Formatvorlage Standard. Wenn man mit der Eingabe beginnt, verwendet Word Schriftart, Schriftgrad, Zeilenabstand, Textausrichtung und andere Formate, die gegenwärtig für die Standardformatvorlage definiert sind.
Da die Formatvorlage, welche auf jedem Rechner eine andere Ausprägung hat, lokal gespeichert wird, unterscheiden sich auch die Worddokumente, die an verschiedenen Arbeitsplätzen angelegt wurden. Neben dem Effekt, dass eine Vielfalt von unterschiedlichen Formaten entsteht, ergibt sich folgendes Problem.
Beim Drucken werden auch Wordtexte in andere Dokumente eingefügt. Dies geschieht über die Kopierfunktion von Word. Da beim Kopieren aber nur der Inhalt und signifikante Formatänderungen Kopiert werden, kann sich das Aussehen des Wordtextes im Druck ändern.
Beispiel:
Beim Kopieren eines Wordtextes wird nur der Inhalt und die Zusatzformate übernommen. Somit wird die Schriftgröße und der Zusatz „Fett“ mit in das Dokument2 übernommen, aber die Schriftart des kopierten Abschnittes ist nun „Times New Roman“
Um dieses Problem zu vermeiden, wird beim Anlegen eines neuen Worddokumentes aus ClassiX heraus eine eigene, für alle gleiche, Formatvorlage zugewiesen. Diese Vorlage („classix.dot“) befindet sich im /ClassiX/system –Verzeichnis. Sollen nun Beispielsweise, alle neuen Worddokument in der Schriftgröße 12 angelegt werden, so muss man dies einfach in der classix.dot definieren.
2. Einteilung der Worddokumente
2.1 Stammdatendokumente
Stammdatendokumente werden in ClassiX benutz, um das Objekt, von dem sie gehalten werden, zu beschreiben. Durch diese Art von Worddokumenten werden zum Beispiel Verkaufsartikel oder Konditionen näher beschrieben. Stammdatendokumente werden im Ausdruck 1 zu 1 wiedergegeben, da sie meist nur reinen Text enthalten.
2.2 Anschreiben- und Fußdokumente
Diese Worddokumente werden zum Bespiel in Angeboten und Bestellungen benutzt und enthalten neben reinen Text auch Felder #03, die durch ClassiX mit Informationen gefüllt werden. Somit ist es für den Bearbeiter eines Angebotes nicht nötig, ständig seinen Namen unter jedes Angebot zu setzen. Statt dessen kann er ein Feld definieren, welches diese Informationen für ihn aus der Datenbank ausliest und im Formular ausdruckt.
2.3 Textbausteine
Textbausteine werden hauptsachlich bei der Erstellung eines Vorgangsbeleges verwendet, wie zum Beispiel einem Brief. Sie unterscheiden sich jedoch zu den Dokumenten, die für das Drucken von komplizierten Formularen verwendet werden. Während ein Formular aus mehreren Bausteinen zusammengesetzt wird, besteht ein Vorgangsbeleg grundsätzlich nur aus einem einzigen Worddokument.
Textbausteine sind die Vorlage zu einem Vorgangsbelege. Beim Anlegen eines Beleges wird jeweils nur eine Kopie des Textbausteines erzeugt, mit der dann weitergearbeitet wird. Textbausteine enthalten somit fast ausschließlich Felder, da der Text dann von dem Benutzer individuell in die Kopie eingefügt werden.
2.4 Dokumentenbausteine
Dokumentenbausteine werden für den Aufbau eines komplexen Formulars verwendet. Allerdings bestehen sie nur aus Feldern oder Text, der für alle Ausdrucke gleich ist. Der Benutzer hat dann, im Gegensatz zu den Kopien der Textbausteinen, keinen Einfluss mehr auf die Worddokumente.
Während in den Textbausteinen ausschließlich Textinformationen in das Dokument eingefügt werden, werden in den Dokumentbausteinen auch ganze Worddokumente eingelesen. Dies sind hauptsachlich Stammdatendokumente.
3. Überblick Formulare
3.1 Formular
Ein Formular wird durch die Dokumentbausteine als auch durch die Randeinstellungen und den Dokumententyp etc. beschrieben. Formulare können sich im Typ unterscheiden und Bereichen zugeordnet werden:
In den Formularen werden die Dokumentenbausteine angegeben, aus welchen das Formular aufgebaut wird. Dabei bestimmt in der Regel die Reihenfolge der Bausteine auch den Aufbau des Formulars. Allerdings gibt es hier Ausnahmen. So gibt es im Angebot zum Beispiel eine fest vordefinierte Reihenfolge, die durch die Anordnung der Bausteine nicht mehr verändert werden kann. Ebenfalls werden die Kopf und Fußzeilen sowie die Überträge verständlicherweise auf jeder Seite wiederholt, unabhängig ihrer Position der Bausteinliste.
3.1.1 Baumdarstellung
3.1.2 Ex- und Importieren von Formularen
Das Ex- und Importieren von Formularen bringt folgende nützliche Vorteile mit sich. Auf diese Weise kann man zum Beispiel Formulare außerhalb der Datenbank speichern/archivieren oder sie in einem Testsystem verändern und über den Export/Import in das laufende System zu übernehmen.
Die beschreibenden Dateien (*.fcp und *.for) für die Formulare befinden sich in der Regel im Verzeichnis Laufwerksbuchstabe:\Classix\Projektname\AppsWH\Data\Forms\Projektname\.
Die verwendeten Dokumentbausteine befinden sich in der Regel im Verzeichnis Laufwerksbuchstabe:\Classix\Projektname\AppsWH\Data\Forms\Projektname\Docs
In der `YXZ.for` findet man die Angaben des Dokumentes wieder. Also den Namen des Formulares und die Bausteinen, aus welchen es aufgebaut ist.
DOCUMENT 1e T("Rahmenbestellung", "") 1 25,00 mm 0,00 mm 10,00 mm 5,00 mm
COMPONENT 1e KOPFZEILE
COMPONENT 1e 1e
COMPONENT 1e 9
COMPONENT 1e 3
COMPONENT 1e 4e
In der `YXZ.fcp` werden dann dementsprechend die Angaben zu den Dokumentenbausteinen angegeben.
COMPONENT 4ae T("Bestellung (Unterposition)", "") 5 16
COMPONENT 6 T("Bestellung", "Purchase Order") 7 8
COMPONENT 4e T("Bestellung", "Purchase Order") 5 1
SUBCOMPONENT 4e 4ae
COMPONENT 3 T("Bestellung", "Purchase Order") 3 8
Die noch verbleibenden Dateien sind die Worddokumente, die zu den Bausteinen gehören. Besteht ein Dateiname aus zwei numerischen Werten, so handelt es sich um einen einfachen Baustein. Der erste Wert beschreibt in diesem Fall die ID und der zweite Wert die Sprache. Anderenfalls handelt es sich um einen bedingten Baustein. Während der erste Wert weiterhin die ID beschreibt, steht der zweite Wert für die Bedingung und erst der Dritte für die Sprache. |
Der Unterschied zwischen einfachen und bedingten Dokumentbausteinen wird im folgenden Abschnitt erklärt.
3.2 Dokumentbausteine
Die Dokumentbausteine sind die umhüllenden Objekte für die Worddokumente, welche beim Drucken eines Formulars benutzt werden. Neben den Worddokumenten halten sie noch Informationen wie ID, Name ,Typ und die Art des Bausteins. Zusätzlich können noch Unterbausteine eingefügt werden, die beim Drucken des Bausteines in der Reihenfolge berücksichtigt werden sollen, in der sie auch in der Unterbausteinliste angeführt werden.
3.2.1 Bedingte Dokumentbausteine
Zur Vertiefung dient vielleicht folgendes Beispiel. Dokumentköpfe werden in ClassiX in der Regel aus
Bedingten Bausteinen aufgebaut. So gibt es ein Worddokument, welches für die erste Seite verwendet wird und jeweils eins für die Folgeseiten in Abhängigkeit des angemeldeten Mandanten.
Über den Zugriffsausdruck print.counter greift man generell auf die aktuelle Seitenzahl zu.
Dementsprechend liefert die Bedingung print.counter=1 ein TRUE zurück, wenn aktuell die erste Seite gedruckt wird. Wie die nächsten Bedingungen aufgebaut sind wird in einen der nächsten Abschnitte geklärt. Man sieht aber, dass man zwei Bedingungen auch logisch Verknüpfen kann. So liefert die nächste Bedingung nur dann ein TRUE zurück wenn sowohl der Teil
var(cyberEnterprise).uniqueID=“002“
als auch der Teil
print.counter>1
erfüllt wird.
Wichtig ist es noch zu erwähnen, dass jeweils nur ein Worddokument zurückgegeben werden kann.
Werden zwei Bedingungen erfüllt, so wird nur das Worddokument der oberen Position zurückgegeben. Somit kann es von Vorteil sein, das man die Positionen über die Pfeile, die sich rechts von der Tabelle befinden, verschieben kann.
3.2.2 Ex- und Importieren von Dokumentbausteinen
Das Exportieren von Dokumentenbausteine verläuft in ähnlicher Art und Weise wie das der Dokumente. Zum Exportieren wählt man die Bausteine im entsprechenden Selektionsfenster aus und klickt auf "Bearbeiten -> Datenaustausch -> Exportieren". Es öffnet sich der File-Dialog man kann den Speicherort und den Namen der Datei wählen. Standardmäßig wird hier component.fcp vorgeschlagen.
4. Dynamische Datenfelder
Die Verbindung des Bausteins zum ClassiX-System entsteht über das Einfügen von Dokumentvariablen. Dies geschieht über das Menü Einfügen/Schnellbausteine/Feld (Word 2013). Es wird ein Fenster geöffnet, in dem das gewünschte Feld ausgewählt werden kann. Die Dokumentvariable ist unter der Kategorie Dokumentautomation als Feldname DocVariable zu finden. Durch den Button `OK` wird eine neue Dokumentvariable erstellt. Im Dokument wird der Eintrag { DOCVARIABLE \*MERGEFORMAT} eingefügt. Der Hacken in der Checkbox kann in der Regel raus genommen werde. Lässt man ihn drin sorgt er dafür, dass der Inhalt der DocVariable einheitlich ausgegeben wird. In Word gibt es zwei Modi um sich DocVariablen anzeigen zu lassen. Zwischen dem ausführlichen {DOCVARIABLE ID \*MERGEFORMAT} und dem verkürzten Modus << ID >> kann man über die Tastenkombination Alt+F9 hin und her schalten. Wenn man sich im ausführlichen Modus befindet, dann kann man die doppelten geschweiften Klammern auch mit Strg+F9 erzeugen und dann DOCVARIABLE hineinschreiben. Man sollte nie die geschweiften Klammern als geschweifte Klammern {} schreiben, denn dies erkennt Word nicht an. |
Von jetzt an gibt es verschiedene Weg, um auf Informationen aus der ClassiX-Datenbank zuzugreifen. Beim Drucken wird immer mindestens ein Objekt an Word übergeben. Somit kann man über einen Zugriffsausdruck auf alle Informationen dieses Objektes und der Objekte, die mit dem Ausgangsobjekt verbunden sind, zuzugreifen.
Beispiel:
Beim Drucken eines Auftrages soll die Auftragsnummer ausgeben werden.
{ DOCVARIABLE uniqueID }
Nun soll auch noch der Projektnamen ausdrucken werden.
{ DOCVARIABLE costObjectivePointer.shortName }
Über diese Methode können nicht nur einfache Text oder Zahlwerte ausgegeben werden, sondern auch Word- Texte, wie sie zum Beispiel bei Konditions- und Verkaufsartikelbeschreibungen verwendet werden. Wordobjekte werden immer über einen Zugriffsausdruck erreicht, der auf mlWordDoc endet. Genau wie Mehrsprachige Texte, die über mlDescription erreicht werden, wird jeweils die für das Dokument gültige Sprache zurückgegeben und an der Stelle des Feldes eingefügt.
Beispiel:
Drucken einer Verkaufsartikelbeschreibung aus einem Angebot heraus.
{ DOCVARIABLE salesItem.mlWordDoc }
Drucken des mehrsprachigen Artikeltextes in einer Bestellposition
{ DOCVARIABLE itemPointer.mlDescription }
Eine zweite Möglichkeit ist es in ClassiX auf verwendete Variablen zuzugreifen. Zum Beispiel gibt es Variablen, die immer das gleiche beschreiben. cyberEnterprise hält immer das Objekt des angemeldeten Mandanten, user repräsentiert immer den angemeldeten Benutzer und printObject ist immer das Objekt, welches gerade gedruckt wird. Hinzu kommen Variablen, die nur manchmal benutzt werden. Zum Beispiel kann man beim Drucken einer Bestellung auf die Variable tmpCondition zurückgreifen, um Informationen aus der Kondition auszulesen, welche gerade gedruckt werden.
Beispiele:
Im Angebotsanschreiben wird automatisch der Mandant angegeben.
Mit freundlichen Grüßen
{ DOCVARIABLE var(cyberEnterprise).partner.name }
Außerdem könnte man die Initialen des angemeldeten Benutzers drucken.
{ DOCVARIABLE var(user).uniqueID }
Bei diesen zwei Methoden stößt man allerdings auf seine Grenzen, wenn man die Werte einer Collection #04 ausgeben möchte oder man komplizierte Zugriffsausdrücke hat, die sich in Word nicht darstellen lassen. Hierfür bietet ClassiX die Möglichkeit direkt auf in den Modulen definierte Makros zuzugreifen. Über den Feldnamen call (Makronamen) wird das zu druckende Objekt an das Makro übergeben und der sich dahinter verbergende Code ausgeführt. Wichtig ist, dass das Makro auch in einem der am Druck beteiligten Module definiert wird. Ein Wert muss immer zurückgegeben werden, in der Regel sollte dies ein String sein.
Beispiele:
Beim Drucken eines Angebotes soll die Artikelnummer gedruckt werden. Handelt es sich beim Artikel um ein Variantenteil, so soll die Nummer durch den Text "ACHTUNG!" ersetzt werden.
{ DOCVARIABLE call(PrintItemNumber)}
-> tmp
tmp Copy(salesItem.uniqueID) Integer Dup if
{
String return
}
Else
{
Drop “ACHTUNG!” return
}
;
In Zusammenspiel mit den bisher vorgestellten Methoden auf Informationen zuzugreifen, gibt es auch noch die Möglichkeit die ClassiX- Basismethoden zu nutzen, welche das zu druckende Objekt mit sich bringt.
Beispiele:
Beim Drucken einer Angebotsposition soll auf Daten aus dem Angebotskopf zugegriffen werden.
{ DOCVARIABLE TopTransaction().uniqueID }
In diesem Beispiel macht man sich zu nutzen, dass das Objekt der Angebotsposition die Methode TopTransaction besitzt, welche das Objekt des Angebotskopfes zurückliefert und über jenes man dann auf die ID zurückgreifen kann.
Beim Aufruf von Methoden bei denen Parameter mit Anführungszeichen geschrieben werden, müssen diese durch Hochkommas ersetzt werden.
Beispiele:
Beim Drucken einer des Lagerplatzes über eine Dimension("CX_STOCK_SPACE").
{ DOCVARIABLE stockSpaceItemAccount.Dimension('CX_STOCK_SPACE').uniqueID }
Es können auch InstantView-Proceduren aus dem Dokument, Modul oder Provider aufgerufen werden. Diese müssen wie sonst auch mit einem "call()" in den Zugriffspfad aufgerufen werden.
Beispiele:
Hier wird der Name des Benutzers in eine XML-Format konvertiert .
{ DOCVARIABLE var(user).Speech(0,0,8).call(webService::XMLEncode) }
In Zusammenhang mit den Dokumentvariablen können auch noch weiter Feld-Funktionen von Word benutzt werden. Eine der wichtigsten ist hierbei die IF- Bedingung. Diese Verzweigungsmöglichkeit ist immer nach folgendem Schema aufgebaut.
{ IF Bedingung „Anweisung für wahr“ „Anweisung für falsch“ }
Auch in diesen Feldern ist es möglich über die DocVariablen auf Informationen zuzugreifen. Wichtig ist es in den Bedingungen doppelte Hochkommata zu verwenden. Aber nicht nur IF-Bedingungen sondern auch Formelausdrücke, etc. können verwendet werden.
Beispiel:
In einem Angebot soll der technische Sachbearbeiter gedruckt werden. Ist dieser nicht angegeben, so soll der Kaufmännische ausgegeben werden.
{ IF “{ DOCVARIABLE technical.personInCharge.name }“ = “ “ “{ DOCVARIABLE personInCharge.name }” “{ DOCVARIABLE technical.personInCharge.name }” }
Eine weitere Nutzungsmöglichkeit von IF-Bedingungen ist die, dass man über sie unnötige Leerzeilen vermeiden kann. Dies zeigt folgendes Beispiel.
Beispiel:
{ IF “{ DOCVARIABLE technical.personInCharge.name }“ = “ “ “” “¶
{ DOCVARIABLE technical.personInCharge.name }” }{ IF “{
DOCVARIABLE personInCharge.name } “ = “ “ “” “¶
{ DOCVARIABLE personInCharge.name }” }Hier wird in der ersten Bedingung der technische Sachbearbeiter gedruckt. Dabei wird zuvor nur die Zeile umgebrochen, wenn er auch wirklich vorhanden ist. Gleiches mit den kaufmännischen Sachbearbeiter. Ist er nicht vorhanden, so befinden wir uns nach wie vor in der Zeile, in der auch der technische SB gedruckt wurde. Andernfalls wird in der nächsten Zeile ausgegeben.
Standardmäßig werden nur die DOCVARIABLEn direkt in ClassiX ausgewertet und die anderen Felder werden vom verwendeten Textverarbeitungsprogramm wie Microsoft Word verarbeitet. Nicht alle Textverarbeitungsprogramme unterstützen jedoch alle Felder, weshalb über die Umgebungsvariable CX_WORD_XML_MERGE_MODE (235443) gesteuert werde kann, ob neben dem DOCVARIABLE-Feld auch die IF-, COMPARE-, =AND -und =OR-Felder vor dem Druck bereits von ClassiX ausgewertet werden sollen. Damit können diese Felder auch in den Dokumenten verwendet werden, wenn das Textverarbeitungsprogramm diese Felder nicht, oder nur stark eingeschränkt, unterstützt. LibreOffice beispielsweise unterstützt bei den IF-Feldern keine Berücksichtigung der Formatierung im Ergebnis. Da die direkte Auswertung der IF-Felder in ClassiX jedoch etwas begrenzter als die Auswertung von Microsoft Word ist (siehe CX_WORD_XML::Merge), wird empfohlen den Mergemodus nur dann zu verändern, wenn die vorzeitige Auswertung der Felder benötigt wird.
5. Häufige Probleme und Fragen
IF-Bedingungen werden von Word nicht richtig interpretiert | |||
|
Hier kann es helfen die Bedingungsblöcke, welche miteinander verglichen werden sollen, in Anführungszeichen zu setzen. Manchmal ist dies sogar zwingend erforderlich. Soll ein Bedingungsausdruck mit NICHTS verglichen werden, so muss zwischen den Anführungszeichen ein Leerzeichen eingefügt werden. { IF „AUSDRUCK“ = “ “ ..... } |
||
Word bricht beim Drucken mit Fehlermeldung ab | |||
|
bei der alten Druckmethode können Zellen einer Tabelle nicht vertikal verbunden werden. | ||
Änderungen nicht möglich |
|||
|
Es kann ein Syntaxfehler in den Dokumentvariablen geben. Um den fehlerhaften Dokumenten zu finden, kann man den Titel des Druckfensters benutzen. | ||
|
Es gibt zu viele Worddokumente im entsprechenden TEMP-Ordner, welche von Word selbst angelegt wurden. Zur Behebung sollte man diese einfach löschen. | ||
Textblöcke sehen im Ausdruck anders aus als in ClassiX | |||
|
Man sollte überprüfen, ob der Dokumentenbaustein und die eventuell beteiligten Worddokumente die gleiche Formatvorlagen haben (siehe Abschnitt 1.2) | ||
6. Tipps und Tricks
- Tabellen ohne Ränder helfen bei der Positionierung von Texten, Listenköpfen und Listen. Zur Bearbeitung des Inhaltes dieser Tabellen können die Ränder als Hilfslinien angezeigt werden. (Word 2013: In der Menü-Leiste ist bei einer Tabelle der Menü-Punkt "Tabellentools" vorhanden und farbig markiert. Wählt man den Unterpunkt "Layout" kann man dort auf der linken Seite die Funktion "Gitternetzlinien anzeigen" aktivieren)
- Bei Logos sollte darauf geachtet werden, dass diese die Formatierung "Mit Text in Zeile" haben. Auch sollten sich Logos in einer Tabelle ohne Ränder befinden. Allerdings wird der Kontext-Menü-Punkt zum Ändern der Formatierung nur angeboten, wenn sich das Logo ausserhalb der Tabelle befindet.
1 OLE ("Object Linking and Embedding“, deutsch: „Verknüpfen und Einbetten von Objekten“) ist als ein von Microsoft entwickelter Standard für zusammengesetzte Dokumente bekannt geworden, der auf der COM-Spezifikation basiert. COM ist die Abkürzung für „Component Object Model“ (deutsch: „allgemeines Objektmodell“).
2 Felder innerhalb eines Fenster
3 Felder werden als Platzhalter für sich ändernde Daten in einem Dokument oder zum Erstellen von Serienbriefen und Etiketten in Seriendruckdokumenten verwendet
4 Sammlung von Objekten in ClassiX, die an einen Zugriffsausdruck hängen