Programmlogik

Aus Mauve System3 Handbuch
Zur Navigation springen Zur Suche springen

Einleitung

Programmlogik.png

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 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;
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