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
|
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 Beleg
Versandkosten = 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 |
string artikelNr |
Die Artikel-Nr. des Artikels, nach dem im Beleg gesucht werden soll
|
|
if (EnthaeltArtikelNr("123456")) {<Anweisungen>}
|
GetPersonFreifeldText(string freifeldName) |
Liefert den Inhalt des Personen-Freifelds mit dem Namen freifeldName zurück |
String |
string freifeldName |
Der Name des gesuchten Freifelds
|
|
let freifeld1 = GetPersonFreifeldText("Freifeld1");
|
GetPostenArtikelHauptwarengruppeId(int postenNr, int shopId) |
Ermittelt die Hauptwarengruppe des Artikels eines Postens für den angegebenen Shop |
Int |
int postenNr |
Die Nummer des Postens, für den die Hauptwarengruppe ermittelt werden soll
|
int shopId |
Die Id des Shops, für den die Hauptwarengruppe ermittelt werden soll
|
|
let warengruppeId = GetPostenArtikelHauptwarengruppeId(1, 1);
|
IsPostenArtikelInWarengruppe(int postenNr, int warengruppeId) |
Prüft, ob ein Postenartikel zu einer bestimmten Warengruppe gehört |
Bool |
int postenNr |
Die Nummer des Postens, für den die Warengruppenzugehörigkeit ermittelt werden soll
|
int warengruppeId |
Die Id der Warengruppe, auf dessen Zugehörigkeit der Posten geprüft werden soll
|
|
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 |
int postenNr |
Die Nummer des Postens, für den das Freifeld ermittelt werden soll
|
string freifeldName |
Der Name des gesuchten Freifelds
|
|
let freifeld1 = GetArtikelFreifeldText(1, "Freifeld1");
|
StartsWithString(string WerbeaktionName, string x) |
Prüft ob der Name einer Werbeaktion mit einer bestimmten Zeichenfolge beginnt |
Bool |
string WerbeaktionName |
Der Name der Werbeaktion
|
string x |
Die zu prüfende Zeichenkette
|
|
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