OBS/Makros: Unterschied zwischen den Versionen
Böhrer (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „I am Sylvester and was born on 15 June 1970. My hobbies are Air sports and Basketball.<br><br>My blog post - [https://youtu.be/795fb9m5GaQ Officialhustleman]“) |
Nimz (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Makros werden an vielen Stellen im OBS genutzt, um zur Laufzeit des Programms kunden- oder benutzerbezogene Funktionalitäten auszuführen. Dies beinhaltet u.…“) |
||
Zeile 1: | Zeile 1: | ||
Makros werden an vielen Stellen im OBS genutzt, um zur Laufzeit des Programms kunden- oder benutzerbezogene Funktionalitäten auszuführen. Dies beinhaltet u. a. das Verändern (z. B. Kalkulation von Preislisten) oder die Anzeige (z. B. {{OBS/Eingabemasken/Positionen#Zus.C3.A4tzliche_Vorgangs_Information|zusätzliche Vorgangsinformationen in Positionserfassung}}) von Daten innerhalb des Programms. Auch das Drucksystem von OBS arbeitet mit Makros. Die Makros im OBS orientieren sich an der Syntax der Sprache [https://de.wikipedia.org/wiki/Pascal_%28Programmiersprache%29 Pascal]. | |||
=Syntax= | |||
==Variablen-Typen== | |||
===string=== | |||
Variablen des Typs ''string'' enthalten Zeichenketten (Text) wie z. B. 'Max Mustermann' oder 'Musterweg 1a'. | |||
===integer=== | |||
Variablen des Typs ''integer'' enthalten Ganzzahlen wie 2, 15 oder 1538. | |||
===double=== | |||
Variablen des Typs ''double'' | |||
===boolean=== | |||
Variablen dieses Typs enthalten Wahrheitswerte. Sie können entweder wahr oder falsch sein. Der Wert lässt sich direkt mit ''true'' oder ''false'' setzen. Es können aber Bedingungen für die Zuweisung verwendet werden. Boolsche Variablen lassen sich in bedingten Anweisungen des Typs ''if'' auch ohne Vergleichswert nutzen.<br /> | |||
Beispiel:<br /> | |||
<br /> | |||
Vorbelegung: | |||
Verglichen = false; | |||
A_ist_kleiner_B = false; | |||
<br /> | |||
Abfrage: | |||
if Verglichen then begin | |||
A_ist_kleiner_B := A < B; | |||
Verglichen := true; | |||
end; | |||
==Methoden== | |||
Es gibt zwei Typen: Prozedur und Funktion. Der Unterschied dabei ist, dass Funktionen einen Rückgabewert haben. Die Definition einer Methode erfolgt in der Reihenfolge Typ-Anweisung, Methodenname, Parameter und bei Funktionen der Typ des Rückgabewerts. Mehrere Parameter sind mit Semikolon zu trennen<br /> | |||
Beispiel Prozedur: | |||
procedure Name(cParameter1: string; nParameter2: integer); | |||
Beispiel funktion: | |||
function Name(cParameter1: string; nParameter2: integer): boolean; | |||
==Bedingte Anweisungen== | |||
Bedingte Anweisungen machen es möglich einen Teil des Makros nur ausführen zu lassen, wenn etwas bestimmtes zutrifft. In Pascal gibt es dafür ''if'' und ''case''. Die ''case''-Anweisung unterliegt dabei allerdings im Vergleich zur ''if''-Anweisung einiger Einschränkungen. | |||
===if=== | |||
if Bedingung then begin | |||
Befehl 1; | |||
Befehl 2; | |||
... | |||
end; | |||
Es ist auch möglich mehrere Bedingungen zu definieren. Dabei lässt sich bestimmen, ob nur eine, alle oder ein Teil der Bedingung zutreffen muss, um den Teil des Makros auszuführen. Das kann hilfreich sein, wenn in mehreren Fällen das gleiche passieren soll.<br /> | |||
Alle Bedingungen sollen zutreffen: | |||
if Bedingung1 and Bedingung2 then begin | |||
Nur eine Bedingung muss zutreffen: | |||
if Bedingung1 or Bedingung2 then begin | |||
Nur Bedingung 1 oder Bedingung 2 und 3 (hier ist die Klammer wichtig!): | |||
if Bedingung1 or (Bedingung2 and Bedingung 3) then begin | |||
===case=== | |||
Die ''case''-Anweisung prüft den Wert einer Variablen ab und und führt dann den - sofern vorhanden - dazu passenden Fall aus. Dies funktioniert jedoch nur mit einem ordinalen Typ (z. B. Ganzzahl oder einzelnes Zeichen).<br /> | |||
Struktur: | |||
case Wert of | |||
Fall1 : Anweisung; | |||
Fall2 : Anweisung; | |||
Fall3 : begin | |||
Anweisung 1; | |||
Anweisung 2; | |||
end; | |||
else | |||
Standard-Anweisung | |||
end; | |||
Es können als Bedingung (Fall) auch mehrere Angaben erfolgen oder Bereiche angegeben werden.<br /> | |||
Beispiel: | |||
case Monat of | |||
1,3,5,7..8,10,12 : Tage := 31; | |||
2 : begin | |||
if Schaltjahr then begin | |||
Tage := 29; | |||
end else begin | |||
Tage := 28; | |||
end; | |||
end; | |||
else | |||
Tage := 30; | |||
end; | |||
==Schleifen== | |||
Schleifen ermöglichen die mehrfache Ausführung eines Teils des Makros. | |||
===while=== | |||
===for=== | |||
===repeat until=== | |||
=Übersicht Makro-Funktionen= | |||
Hier finden Sie einige nützliche Befehle/Funktionen, die Sie in den Makros verwenden können, um das gewünschte Ergebnis zu erzielen. | |||
==ExtractFileName== | |||
Verwendung: Dateinamen aus Dateipfad auslesen. | |||
Parameter: string | |||
Rückgabe: string | |||
Beispiel:<br /> | |||
cDatei := 'c:\\Ordner\Datei.txt'; | |||
cDatei := ExtractFileName(cDatei); | |||
Erklärung: Der String-Variable ''cDatei'' wird der Wert ''c:\\Ordner\Datei.txt'' zugewiesen. Mit ''ExtractFileName'' wird der Dateiname herausgesucht und zurückgegeben. Danach enthält ''cDatei'' nur noch den Wert ''Datei.txt''. | |||
==StrTran== | |||
Verwendung: Sucht einen Text innerhalb eines Textes und ersetzte diesen durch einen andren Text (Suchen und ersetzen). | |||
Parameter: string, string, string | |||
Rückgabe: string | |||
Beispiel:<br /> | |||
cDatei := 'Datei.txt'; | |||
cName := StrTran(cDatei ,'.txt',<nowiki>''</nowiki>); | |||
Erklärung: Der String-Variable ''cDatei'' wird der Wert ''Datei.txt'' zugewiesen. Mit ''StrTran'' wird im Text der Variable ''cDatei'' nach ''.txt'' gesucht. Der gefundene Teil wird mit einer leeren Zeichenkette ersetzt. Danach enthält ''cDatei'' nur noch den Wert ''Datei''. | |||
==Length== | |||
Verwendung: Ermittelt die Länge einer Zeichenkette. | |||
Parameter: string | |||
Rückgabe: integer | |||
Beispiel:<br /> | |||
cDatei := 'Datei'; | |||
nLaenge := Length(cDatei); | |||
Erklärung: Der String-Variable ''cDatei'' wird der Wert ''Datei'' zugewiesen. Mit ''Length'' wird die Länge ermittelt. Das Wort "Datei" hat 5 Buchstaben. ''nLaenge'' hat also den Wert ''5''. | |||
===LeftStr/RightStr=== | |||
Verwendung: Gibt den linken/rechten Teil einer Zeichenketten zurück. Es werden dabei maximal soviele Zeichen zurückgegeben, wie im zweiten Parameter angegeben. | |||
Parameter: string, integer | |||
Rückgabe: string | |||
Beispiel:<br /> | |||
cText := 'Dies ist ein Beispiel'; | |||
cLeft := LeftStr(cText,2); | |||
cRight := RightStr(cText,5); | |||
Erklärung: Der String-Variable ''cText'' wird der Wert ''Dies ist ein Beispiel'' zugewiesen. Mit ''LeftStr'' und ''RightStr'' werden jeweils die ersten zwei Zeichen von Links und Rechts zurückgegeben. ''cLeft'' enthält danach den Wert ''Di'' und ''cRight'' den Wert ''spiel''. | |||
{{Hinweis|Sollten mehr Zeichen ermittelt werden, als der ursprüngliche Wert Zeichen hat, so ist das Ergbenis gleich dem Ursprung. LeftStr(cDatei,50) hätte z. B. dazu geführt, dass cLeft ebenfalls ''Dies ist ein Beispiel'' enthält.}} | |||
===UpperCase/LowerCase=== | |||
Verwendung: Umwandeln einer Zeichenkette in Großbuchstaben/Kleinbuchstaben. | |||
Parameter: string | |||
Rückgabe: string | |||
Beispiel:<br /> | |||
cText := 'Beispiel'; | |||
cUpper := UpperCase(cText); | |||
cLower := LowerCase(cText); | |||
Erklärung: Der String-Variable ''cText'' wird der Wert ''Beispiel'' zugewiesen. Mit ''UpperCase'' und ''LowerCase'' wird die Zeichenkette umgewandelt. ''cUpper'' enthält danach den Wert ''BEISPIEL'' und ''cLower'' den Wert ''beispiel''. | |||
===Token=== | |||
Verwendung: Teilt eine Zeichenkette anhand eines Zeichens auf und gibt den engebenen Teil zurück. | |||
Parameter: string, string, integer | |||
Rückgabe: string | |||
Beispiel:<br /> | |||
cDatei := 'Datei_Name_Mit_Unterstrichen.txt'; | |||
cTeil := Token(cDatei,'_',2); | |||
Erklärung: Der String-Variable ''cDatei'' wird der Wert ''Datei_Name_Mit_Unterstrichen.txt'' zugewiesen. Mit ''Token'' wird die Zeichenkette aufgeteilt. Als Teiler ist ein Unterstrich angeben. Dies führt im angegebenen Beispiel zu vier Teilen: ''Datei'', ''Name'', ''Mit'' und ''Unterstrichen.txt''. Es wird der zweite Teil gefordert. Die Variable ''cTeil'' enthält demnach den Wert ''Name''. |
Version vom 15. Februar 2018, 15:13 Uhr
Makros werden an vielen Stellen im OBS genutzt, um zur Laufzeit des Programms kunden- oder benutzerbezogene Funktionalitäten auszuführen. Dies beinhaltet u. a. das Verändern (z. B. Kalkulation von Preislisten) oder die Anzeige (z. B. Vorlage:OBS/Eingabemasken/Positionen) von Daten innerhalb des Programms. Auch das Drucksystem von OBS arbeitet mit Makros. Die Makros im OBS orientieren sich an der Syntax der Sprache Pascal.
Syntax
Variablen-Typen
string
Variablen des Typs string enthalten Zeichenketten (Text) wie z. B. 'Max Mustermann' oder 'Musterweg 1a'.
integer
Variablen des Typs integer enthalten Ganzzahlen wie 2, 15 oder 1538.
double
Variablen des Typs double
boolean
Variablen dieses Typs enthalten Wahrheitswerte. Sie können entweder wahr oder falsch sein. Der Wert lässt sich direkt mit true oder false setzen. Es können aber Bedingungen für die Zuweisung verwendet werden. Boolsche Variablen lassen sich in bedingten Anweisungen des Typs if auch ohne Vergleichswert nutzen.
Beispiel:
Vorbelegung:
Verglichen = false; A_ist_kleiner_B = false;
Abfrage:
if Verglichen then begin A_ist_kleiner_B := A < B; Verglichen := true; end;
Methoden
Es gibt zwei Typen: Prozedur und Funktion. Der Unterschied dabei ist, dass Funktionen einen Rückgabewert haben. Die Definition einer Methode erfolgt in der Reihenfolge Typ-Anweisung, Methodenname, Parameter und bei Funktionen der Typ des Rückgabewerts. Mehrere Parameter sind mit Semikolon zu trennen
Beispiel Prozedur:
procedure Name(cParameter1: string; nParameter2: integer);
Beispiel funktion:
function Name(cParameter1: string; nParameter2: integer): boolean;
Bedingte Anweisungen
Bedingte Anweisungen machen es möglich einen Teil des Makros nur ausführen zu lassen, wenn etwas bestimmtes zutrifft. In Pascal gibt es dafür if und case. Die case-Anweisung unterliegt dabei allerdings im Vergleich zur if-Anweisung einiger Einschränkungen.
if
if Bedingung then begin Befehl 1; Befehl 2; ... end;
Es ist auch möglich mehrere Bedingungen zu definieren. Dabei lässt sich bestimmen, ob nur eine, alle oder ein Teil der Bedingung zutreffen muss, um den Teil des Makros auszuführen. Das kann hilfreich sein, wenn in mehreren Fällen das gleiche passieren soll.
Alle Bedingungen sollen zutreffen:
if Bedingung1 and Bedingung2 then begin
Nur eine Bedingung muss zutreffen:
if Bedingung1 or Bedingung2 then begin
Nur Bedingung 1 oder Bedingung 2 und 3 (hier ist die Klammer wichtig!):
if Bedingung1 or (Bedingung2 and Bedingung 3) then begin
case
Die case-Anweisung prüft den Wert einer Variablen ab und und führt dann den - sofern vorhanden - dazu passenden Fall aus. Dies funktioniert jedoch nur mit einem ordinalen Typ (z. B. Ganzzahl oder einzelnes Zeichen).
Struktur:
case Wert of Fall1 : Anweisung; Fall2 : Anweisung; Fall3 : begin Anweisung 1; Anweisung 2; end; else Standard-Anweisung end;
Es können als Bedingung (Fall) auch mehrere Angaben erfolgen oder Bereiche angegeben werden.
Beispiel:
case Monat of 1,3,5,7..8,10,12 : Tage := 31; 2 : begin if Schaltjahr then begin Tage := 29; end else begin Tage := 28; end; end; else Tage := 30; end;
Schleifen
Schleifen ermöglichen die mehrfache Ausführung eines Teils des Makros.
while
for
repeat until
Übersicht Makro-Funktionen
Hier finden Sie einige nützliche Befehle/Funktionen, die Sie in den Makros verwenden können, um das gewünschte Ergebnis zu erzielen.
ExtractFileName
Verwendung: Dateinamen aus Dateipfad auslesen.
Parameter: string
Rückgabe: string
Beispiel:
cDatei := 'c:\\Ordner\Datei.txt'; cDatei := ExtractFileName(cDatei);
Erklärung: Der String-Variable cDatei wird der Wert c:\\Ordner\Datei.txt zugewiesen. Mit ExtractFileName wird der Dateiname herausgesucht und zurückgegeben. Danach enthält cDatei nur noch den Wert Datei.txt.
StrTran
Verwendung: Sucht einen Text innerhalb eines Textes und ersetzte diesen durch einen andren Text (Suchen und ersetzen).
Parameter: string, string, string
Rückgabe: string
Beispiel:
cDatei := 'Datei.txt'; cName := StrTran(cDatei ,'.txt','');
Erklärung: Der String-Variable cDatei wird der Wert Datei.txt zugewiesen. Mit StrTran wird im Text der Variable cDatei nach .txt gesucht. Der gefundene Teil wird mit einer leeren Zeichenkette ersetzt. Danach enthält cDatei nur noch den Wert Datei.
Length
Verwendung: Ermittelt die Länge einer Zeichenkette.
Parameter: string
Rückgabe: integer
Beispiel:
cDatei := 'Datei'; nLaenge := Length(cDatei);
Erklärung: Der String-Variable cDatei wird der Wert Datei zugewiesen. Mit Length wird die Länge ermittelt. Das Wort "Datei" hat 5 Buchstaben. nLaenge hat also den Wert 5.
LeftStr/RightStr
Verwendung: Gibt den linken/rechten Teil einer Zeichenketten zurück. Es werden dabei maximal soviele Zeichen zurückgegeben, wie im zweiten Parameter angegeben.
Parameter: string, integer
Rückgabe: string
Beispiel:
cText := 'Dies ist ein Beispiel'; cLeft := LeftStr(cText,2); cRight := RightStr(cText,5);
Erklärung: Der String-Variable cText wird der Wert Dies ist ein Beispiel zugewiesen. Mit LeftStr und RightStr werden jeweils die ersten zwei Zeichen von Links und Rechts zurückgegeben. cLeft enthält danach den Wert Di und cRight den Wert spiel.
UpperCase/LowerCase
Verwendung: Umwandeln einer Zeichenkette in Großbuchstaben/Kleinbuchstaben.
Parameter: string
Rückgabe: string
Beispiel:
cText := 'Beispiel'; cUpper := UpperCase(cText); cLower := LowerCase(cText);
Erklärung: Der String-Variable cText wird der Wert Beispiel zugewiesen. Mit UpperCase und LowerCase wird die Zeichenkette umgewandelt. cUpper enthält danach den Wert BEISPIEL und cLower den Wert beispiel.
Token
Verwendung: Teilt eine Zeichenkette anhand eines Zeichens auf und gibt den engebenen Teil zurück.
Parameter: string, string, integer
Rückgabe: string
Beispiel:
cDatei := 'Datei_Name_Mit_Unterstrichen.txt'; cTeil := Token(cDatei,'_',2);
Erklärung: Der String-Variable cDatei wird der Wert Datei_Name_Mit_Unterstrichen.txt zugewiesen. Mit Token wird die Zeichenkette aufgeteilt. Als Teiler ist ein Unterstrich angeben. Dies führt im angegebenen Beispiel zu vier Teilen: Datei, Name, Mit und Unterstrichen.txt. Es wird der zweite Teil gefordert. Die Variable cTeil enthält demnach den Wert Name.