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>
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
EnthaeltERezepte
nur Apotheke
Bool
Global
Lesbar
EnthaeltRezepte
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
keine
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;