Programmlogik
Zur Navigation springen
Zur Suche springen
Einleitung
Mittels des Reiters Programmlogik im Dialog Portoberechnung kann mit Hilfe der VersandkostenDSL ( Domain Specific Language ) jede Art von Versandkostenstruktur abgebildet werden.
- Syntax prüfen Nach Klick auf diesen Button wird der in den Editor eingegebene Text einer Syntaxprüfung unterzogen. Das Ergebnis wird in dem Textfeld unterhalb des Programmeditors angezeigt.
- Programmlogik
- Das obere Textfeld in diesem Bereich ist der Programmeditor. In diesen geben Sie den Programmcode für die Portologik ein. Welche Optionen dafür zur Verfügung stehen finden Sie unter Sprachbeschreibung
- Im den unteren Textfeld wird das Ergebnis der Syntax-Prüfung angezeigt.
- Optionen
- Portoartikel festlegen Hier bestimmen Sie mit Hilfe der Jokersuche den Portoartikel für die Programmlogik.
Sprachbeschreibung
Allgemein
- Eigene Variablen müssen immer erst mit "let" dekaliert werden
- Anweisungen sind immer mit " ; " (Semikolon) zu beenden
- Dezimal-Zahlen sind immer mit . (Punkt), nicht mit , (Komma) zu trennen
- Anweisungen innerhalb einer Abfrage müssen immer innerhalb der Klammern { } stehen
- Strings wie "Amazon" bei einer Abfrage if (VerkaufskanalName == "Amazon") sind immer in doppelte Anführungsstriche zu schreiben
- Errechnete Portokosten müssen immer in den Beleg zurückgeschrieben werden
- Liefer-Variablen enthalten immer die Lieferadresse, wenn diese leer ist, automatisch die Rechungsadresse
- Um die berechneten Versandkosten in den Beleg zurückzuschreiben verwenden Sie die Anweisung
Versandkosten = <Ergebnis der Berechnung>
siehe Code-Beispiele
Farben
Farbe | Bedeutung | Beispiel |
---|---|---|
rot | Text / String | "DE" , "AT" , "Amazon" |
orange | lesbare Variable | BruttoGesamt, LieferlandIsoAlpha |
blau | Funktion | let, if, else |
grün | Definition einer Variable | Kommentar und beschreibbare Variable bspw. VersandArtid |
schwarz | Definition einer Variable | Text in Kommentaren und eigene Variablen |
Befehle
Befehl | Bemerkung | Beispiel | |
---|---|---|---|
let | Definition und Initialisierung einer Variablen | let AnzahlArtikel = 0; | |
if (<Bedingung>){<Anweisungen>} | Auswertung einer Bedingung. Die <Bedingung> muss wahr oder falsch als Ergebnis liefern. Ist das Ergebnis wahr, werden die <Anweisungen> in den geschweiften Klammern ausgeführt. |
if (LieferlandIsoAlpha == "DE") {Anweisung}; | |
else{<Anweisungen>} | Ist nur mit einem vorangehenden if erlaubt, die in den geschweiften Klammern enthaltenen <Anweisungen> werden nur ausgeführt, wenn die <Bedingung> falsch ist. | else {Anweisung}; | |
else if (<Bedingung2>){<Anweisungen>} | So wie else, nur das zusätzlich noch die <Bedingung2> hinter dem else if geprüft wird. Die <Anweisungen> in den geschweiften Klammern werden nur ausgeführt, wenn <Bedingung> falsch und <Bedingung2> wahr ist. |
else if (LieferlandIsoAlpha == "AT" | LieferlandIsoAlpha == "NL") {Anweisung}; |
loop posten{<Anweisungen>} | Geht die Posten eines Belegs in einer Schleife durch. Die <Anweisungen> in den geschweriften Klammern werden für jeden Posten des Belegs durchgeführt. Variablen mit der Sichtbarkeit Postenschleife sind nur innerhalb der geschweiften Klammern gültig. |
loop posten {Anweisung}; |
Operatoren
Operator | Bemerkung | Beispiel |
---|---|---|
= | Zuweisung eines Wertes | porto = 3.99; |
* | Multiplikation | porto = 0.49 * Stueck; |
/ | Division | if (KundenKategorieId == 2) {porto = porto / 2;} |
// | Division mit Aufrundung des Ergebnisses | if (KundenKategorieId == 2) {porto = porto // 2;} |
% | Modulo | AnzahlPakete = AnzahlArtikel % 5.3; |
+ | Plus | if (KundenKategorieName == "VIP") {porto = porto - 2;} |
- | Minus | if (KundenKategorieName == "Ausland") {porto = porto + 2;} |
<= | Kleiner gleich Vergleich | if (BruttoGesamt <= 100) {porto = 10;} |
>= | Größer gleich Vergleich | if (BruttoGesamt >= 100) {porto = 0;} |
< | Kleiner Vergleich | if (BruttoGesamt < 100) {porto = 10;} |
> | Größer Vergleich | if (BruttoGesamt > 100) {porto = 0;} |
== | Gleich-Vergleich von Strings | if (VerkaufskanalName == "Amazon") |
!= | Ungleich-Vergleich von Strings | if (VerkaufskanalName != "Amazon") |
&& | UND-Verknüpfung von Abfragen | if (VersandArtId == 2 && ZahlungsweiseId == 2) |
|| | Oder-Verknüpfung von Abfragen | if (LieferlandIsoAlpha == "DE" || LieferlandIsoAlpha == "AT") |
IN | Wert in Bereich vorhanden | if (LieferlandIsoAlpha IN ("DE","AT","NL","BE")) |
/* */ | Kommentar | /* Portobrechnung Deutschland DHL Paket national */ |
Variablen
Name | Bemerkung | Typ | Sichtbarkeit | Zugriff |
---|---|---|---|---|
true | Wahr | Bool | Global | Lesbar |
false | Falsch | Bool | Global | Lesbar |
CurrentDay | Aktueller Tag (1-31) | Int | Global | Lesbar |
CurrentMonth | Aktueller Monat (1-12) | Int | Global | Lesbar |
CurrentYear | Aktuelles Jahr (vierstellig) | Int | Global | Lesbar |
AuftragsDatumDay | Tag des Auftragsdatums (1-31) | Int | Global | Lesbar |
AuftragsDatumMonth | Monat des Auftragsdatums (1-12) | Int | Global | Lesbar |
AuftragsDatumYear | Jahr des Auftragsdatums (vierstellig) | Int | Global | Lesbar |
EnthaeltVerschreibungsPflichtige | nur Apotheke | Bool | Global | Lesbar |
EnthaeltKuehlPflichtige | nur Apotheke | Bool | Global | Lesbar |
BruttoGesamt | Summe aller Posten-Bruttobeträge, die keine Versandkosten- oder Zahlungsweiseartikel enthalten, inkl. Posten- und Belegrabatt. Rabatte werden jedoch nicht auf rezeptpflichtige Artikel angewandt. | Decimal | Global | Lesbar |
BruttoGesamtOhneRabatt | Summe aller Posten-Bruttobeträge, die keine Versandkosten- oder Zahlungsweiseartikel enthalten, ohne Posten- und Belegrabatt. | Decimal | Global | Lesbar |
NettoGesamt | Summe aller Posten-Netttobeträge, die keine Versandkosten- oder Zahlungsweiseartikel enthalten, inkl. Posten- und Belegrabatt. Rabatte werden jedoch nicht auf rezeptpflichtige Artikel angewandt. | Decimal | Global | Lesbar |
NettoGesamtOhneRabatt | Summe aller Posten-Nettobeträge, die keine Versandkosten- oder Zahlungsweiseartikel enthalten, ohne Posten- und Belegrabatt. | Decimal | Global | Lesbar |
LieferlandIsoAlpha | 2-Stelliger IsoAlphaCode | String | Global | Lesbar |
LieferPlz | String | Global | Lesbar | |
LieferPlzZone | Erste Stelle der Postleitzahl | String | Global | Lesbar |
LieferPlzBereich | Die ersten zwei Stellen der Postleitzahl | String | Global | Lesbar |
LieferStrasse | String | Global | Lesbar | |
VersandArtName | String | Global | Les- und Schreibbar | |
VersandArtId | Int | Global | Les- und Schreibbar | |
PortoArtikelBezeichnung | String | Global | Les- und Schreibbar | |
PortoArtikelBemerkung | String | Global | Les- und Schreibbar | |
GesamtGewicht | In kg. | Decimal | Global | Lesbar |
GesamtVolumen | In cm³. | Decimal | Global | Lesbar |
KundenKategorieName | String | Global | Lesbar | |
KundenKategorieId | Int | Global | Lesbar | |
ZahlungsweiseName | String | Global | Lesbar | |
ZahlungsweiseId | Int | Global | Lesbar | |
BelegtypName | String | Global | Lesbar | |
BelegtypId | Int | Global | Lesbar | |
VerkaufskanalName | Amazon, Mauve Webshopsystem, Unbekannt, Email etc. | String | Global | Lesbar |
VerkaufskanalId | Int | Global | Lesbar | |
BelegSprache | String | Global | Lesbar | |
VersandkostenSindNetto | Gibt an ob die definierten Kosten netto oder brutto sind | Bool | Global | Les- und Schreibbar |
AnzahlEinnahmeBelege | String | Global | Lesbar | |
SummeZahlungen | Decimal | Global | Lesbar | |
UeberwiegenderMwStSatz | Der Mehrtsteuersatz, dessen Posten die höchste Netto-Gesamtsumme besitzen. Grundlage der Mehrwertsteuerzuordnung ist die in den Posten hinterlegte Mehrwertsteuer. | Decimal | Global | Lesbar |
UeberwiegenderMwStSatzAufgrundArtikel | Der Mehrtsteuersatz, dessen Posten die höchste Netto-Gesamtsumme besitzen. Grundlage der Mehrwertsteuerzuordnung ist die in der Artikelverwaltung hinterlegte Mehrwertsteuer. | Decimal | Global | Lesbar |
Stueck | Int | Postenschleife | Lesbar | |
PostenNr | String | Postenschleife | Lesbar | |
ArtikelNr | String | Postenschleife | Lesbar | |
ArtikelGewicht | Decimal | Postenschleife | Lesbar | |
VerschreibungsPflichtig | nur Apotheke | Bool | Postenschleife | Lesbar |
RezeptBildVorhanden | nur Apotheke | Bool | Global | Lesbar |
ApothekenPflichtig | nur Apotheke | Bool | Postenschleife | Lesbar |
KuehlPflichtig | nur Apotheke | Bool | Postenschleife | Lesbar |
IsCustomKuehlPflichtig | nur Apotheke | Bool | Postenschleife | Lesbar |
CustomKuehlPflichtigThreshold | nur Apotheke | Bool | Postenschleife | Lesbar |
RezeptArt | nur Apotheke (Kein, Kassenrezept, Privat, Kassenrezept(befreit), Sprechstundenbedarf, Praxisbedarf | String | Postenschleife | Lesbar |
ArtikelHoehe | Decimal | Postenschleife | Lesbar | |
ArtikelBreite | Decimal | Postenschleife | Lesbar | |
ArtikelLaenge | Decimal | Postenschleife | Lesbar | |
ArtikelVolumen | Decimal | Postenschleife | Lesbar | |
ArtikelWarengruppeID | Hauptwarengruppe des Artikels | Decimal | Postenschleife | Lesbar |
IstAbdaArtikel | nur Apotheke | Bool | Postenschleife | Lesbar |
Versandkosten | Schreiben der errechneten Versandkosten in den BelegVersandkosten = porto; |
Decimal | Global | Nur Schreiben |
BelegWerbeaktionId | Int | Global | Lesbar | |
BelegWerbeaktionName | String | Global | Lesbar | |
PostenWerbeaktionID | Int | Postenschleife | Lesbar | |
PostenWerbeaktionName | String | Postenschleife | Lesbar | |
WaehrungKurs | Decimal | Global | Lesbar | |
WaehrungCode | String | Global | Lesbar |
Methoden
Name | Bemerkung | Rückgabe-Typ | Parameter | Beispiel | ||||
---|---|---|---|---|---|---|---|---|
EnthaeltArtikelNr(string artikelNr) | Prüft, ob der Beleg einen Posten mit der Artikel-Nr. artikelNr besitzt | Bool |
|
if (EnthaeltArtikelNr("123456")) {<Anweisungen>}
| ||||
GetPersonFreifeldText(string freifeldName) | Liefert den Inhalt des Personen-Freifelds mit dem Namen freifeldName zurück | String |
|
let freifeld1 = GetPersonFreifeldText("Freifeld1");
| ||||
GetPostenArtikelHauptwarengruppeId(int postenNr, int shopId) | Ermittelt die Hauptwarengruppe des Artikels eines Postens für den angegebenen Shop | Int |
|
let warengruppeId = GetPostenArtikelHauptwarengruppeId(1, 1);
| ||||
IsPostenArtikelInWarengruppe(int postenNr, int warengruppeId) | Prüft, ob ein Postenartikel zu einer bestimmten Warengruppe gehört | Bool |
|
let inWarengruppe = IsPostenArtikelInWarengruppe(1, 1);
| ||||
GetCurrentShippingCosts() | Gibt die aktuell verbuchten Portokosten zurück | Decimal |
|
let porto = 0; /*Verkaufskanal Amazon Marketplace*/ if (VerkaufskanalId == 4) { /*Portokosten aus Beleg wieder zurückgeben*/ porto = GetCurrentShippingCosts(); } else /*Mauve ApoShop etc.*/ { porto = 3.9; if (BruttoGesamt >= 100) { porto = 0; VersandartId = 1; } } Versandkosten = porto; | ||||
GetArtikelFreifeldText(int postenNr, string freifeldName) | Liefert den Inhalt des Artikel-Freifelds für den Artikel des Postens mit der PostenNr postenNr und dem Namen freifeldName zurück | String |
|
let freifeld1 = GetArtikelFreifeldText(1, "Freifeld1");
| ||||
StartsWithString(string WerbeaktionName, string x) | Prüft ob der Name einer Werbeaktion mit einer bestimmten Zeichenfolge beginnt | Bool |
|
let beginntMitABC = StartsWithString(BelegWerbeaktionName, "ABC");
|
Code-Beispiel
Allgemeiner Code-Aufbau
/*Variablendeklaration*/ let porto = 0; /*Abfragen / Anweisungen*/ if (LieferlandIsoAlpha == "DE") { if (BruttoGesamt >= 100) /*Portofreigrenze von 100€*/ { porto = 0; } else { porto = 3.95; } } /*Versandkosten zuweisen*/ Versandkosten = porto;
Beispiel-Logik 1
/*Portologik für Shop-Bestellungen*/ if (LieferlandIsoAlpha == "DE") /*Deutschland*/ { if (ZahlungsweiseId == 4 || VersandArtId == 5) /*Nachnahme*/ { VersandArtId = 5; /*Automatisches Setzen der Versandart Nachnahme wenn ZW = Nachnahme*/ PortoArtikelBezeichnung = "DHL Nachnahme"; if (BruttoGesamt >= 100) /*Portofreigrenze*/ { porto = 0; } else { porto = 4.95; } } else { if (VersandArtId == 6) /*Express*/ { PortoArtikelBezeichnung = "UPS Express"; porto = 9.95; } else /*DHL Paket*/ { VersandArtId = 2; /*Automatisches Setzen der Versandart DHL Paket, wenn kein Nachnahme und kein Express*/ PortoArtikelBezeichnung = "DHL Paket"; if (BruttoGesamt >= 100) /*Portofreigrenze*/ { porto = 0; } else { porto = 4.95; } } } } else if (LieferlandIsoAlpha in ("CH")) /*Schweiz*/ { VersandkostenSindNetto = true; PortoArtikelBezeichnung = "DHL Europaket CH"; VersandArtId = 7; porto = 10.85; } else if (LieferlandIsoAlpha in ("AT")) /*Österreich*/ { PortoArtikelBezeichnung = "DHL Regio AT"; VersandArtId = 4; porto = 9.90; } else if (LieferlandIsoAlpha in ("BE","DK","FR","GB","LU","NL","HR","BG","BA")) { PortoArtikelBezeichnung = "DHL Europaket"; VersandArtId = 8; porto = 19.55; } else if (LieferlandIsoAlpha in ("US","MT","LT")) { PortoArtikelBezeichnung = "DHL Premium International"; VersandArtId = 3; porto = 59; } else if (LieferlandIsoAlpha in ("SI","NO")) { PortoArtikelBezeichnung = "DHL Europaket"; VersandArtId = 8; porto = 29.55; } else if (LieferlandIsoAlpha in ("FI","IE","GR","IT","PL","PT","SE","SK","ES","CZ","HU")) { PortoArtikelBezeichnung = "DHL Europaket"; VersandArtId = 8; porto = 14.90; } else { PortoArtikelBezeichnung = "DHL Premium International"; VersandArtId = 3; porto = 59.00; } Versandkosten = porto;
- Siehe auch:
- Portoberechnung Optionen
- Portoberechnung