Preiskalkulations-Schema

 

Mit dem Modul „Preiskalkulationsschema“ können Kalkulationsschemata für das Preiskalkulationsmodul angelegt und gepflegt werden.

Ein Schema besteht aus

      einer dem Schema eindeutig zugeordneten Schemanummer

      einer Bezeichnung des Schemas

      der Angabe der Kalkulationsgrundlage

      optional die Angabe eines Makros mit Prozeduren zur Kalkulation

      einer Sammlung von Preisberechnungsformeln

      einer Sammlung von Preisbezugsbedingungen.

 

Der Wert der Kalkulationsgrundlage gibt an, auf welcher Basis Preise kalkuliert werden sollen.

0: Grundpreise aus <KALKLISTENPREIS> zu letztem Zeitraum

1: Zeitraum manuell, Grundpreise=Listenpreise des vorherigen Zeitraumes

Ist dieser Wert 0, so werden bei der Kalkulation die Preise der Spalte „Originalpreis“ aus der Relation „KalkListenPreis“ genommen. Insbesondere können dann auch Artikel kalkuliert werden, die über Preise in dieser Relation verfügen.

Ist der Wert hingegen 1, so entsprechen bei der Kalkulation die Preise der Spalte „Originalpreis“ den  aktuellen Listenpreisen aus „ArtiListenPreis“.

Soll für alle Kalkulationsschemata die gleiche Kalkulationsgrundlage gelten, so kann der Wert auch per SPA eingestellt werden. Dann erscheint das Feld nicht mehr auf dieser Maske.

SPA-Bezeichnung: „Preiskalkulation: Kalkulationsgrundlage“ in der Gruppe „Preisfindung“

Werte:  0: Grundpreise aus <KALKLISTENPREIS> zu letztem Zeitraum

            1: Zeitraum manuell, Grundpreise=Listenpreise des vorherigen Zeitraumes

            2: In Kalkulationsschema anzugeben

 

Die Angabe eines Makro-Namens ist optional. Per SPA kann dieses Feld der Maske unterdrückt werden, wenn generell keine Makros bei der Preiskalkulation verwendet werden sollen.

SPA-Bezeichnung: „Preiskalkulation: Makro-Unterstützung“

Werte:  0: Nein

             1: Ja

 

Wird hier hingegen ein Makroname angegeben, so muss der entsprechende Makro existieren.

Ein solcher Makro muss dann zu mindestens über die Prozedur

 procedure PreisKalkInit( artikelid,lpgvk,lpgek,pmvk,pmek,ksnr : integer );

(Parameternamen sind dabei natürlich beliebig, die Typen jedoch bindend) verfügen, die jeweils nach Einlesen eines Kalkulationsobjekts ( Listenpreisgruppe ) aufgerufen wird.

Dabei werden in den Parametern folgende Werte übergeben:

Artikelid            Die ArtikelId des (eines) Artikels zur aktuellen VK-Listenpreisgruppe

Lpgvk              Die aktuelle VK-Listenpreisgruppe

Lpgek              Die aktuelle EK-Listenpreisgruppe

Pmvk               Die aktuelle VK-Preismatrixnummer

Pmek               Die aktuelle EK-Preismatrixnummer

Ksnr                 Die Nummer des aktuellen Kalkulationsschemas

Gibt es im Makro eine Prozedur

Prozedure Init();

 

so wird diese noch vor PreisKalkInit aufgerufen. Hier können z.B. global makrointerne Variablen angelegt und initialisiert werden, die dann in PreisKalkInit versorgt wird.

Anwendungsbeispiel:

Sollen in mehreren Formeln eines Preiskalkulationsschemas  Werte berücksichtigt werden, die sich etwa in der Relation ArtikelAddOn befinden ( z.B. artikelindividuelle Margen ), so können diese in der Makroprozedur „PreisKalkInit“ gelesen und in durch Init() angelegte globale Makrovariablen festgehalten werden. Gibt es in dem Makro dann etwa eine Funktion

„function MargenWert( lpnr : integer) : real;“

so kann diese in die Formeln eingebaut werden: N1 = N1 + MargenWert(2); N2=N1+MargenWert(N2).

Enthält der Makro eine Prozedure Init(), so sollte er auch eine Prozedur

  Procedure Final();

Enthalten, die am Ende jeder Kalkulation aufgerufen wird. Hier sollte global belegter Speicherplatz wieder freigegeben werden.

 

Die Bedingungen werden im Kalkulationsmodul vor dem Speichern der Preise zur Prüfung auf Einhaltung herangezogen: Die Preise können erst dann gespeichert werden, wenn die Bedingungen erfüllt sind.

  

Die Formelsammlung ist in Gruppen unterteilt:

Gruppe 0:

Diese Formeln werden im Kalkulationsmodul zur Berechnung der Neu-Preise beim Aufruf für einen Artikelstamm herangezogen, nicht jedoch bei der manuellen Änderung eines Preises.

Andere Gruppen:

Die Formeln einer Gruppe n (n>0) werden im Kalkulationsmodul ausgeführt, wenn dort der Preis Nn (also der Neu-Preis zum Preis mit Nummer n) manuell überschrieben wird.

 

Eine Formel besteht aus

einem Formelziel:

Dieses hat immer die Form Nx, wobei x eine Preislistennummer ist, deren Eintrag in der Preislistenrelation über keine Korrektursperre und einer Sortierung (Kalkulation) > 0.00 verfügt.

Dabei darf die Preislistennummer der aktuellen Formelgruppe nicht eingesetzt werden und innerhalb der Gruppe nur einmal als Formelziel erscheinen.

dem Gleichheitszeichen:

Dieses wird vom System automatisch versorgt.

dem Berechnungstext:

Der Berechnungstext ist ein arithmetischer Ausdruck von Operanden, Klammern und Operatoren. Dabei gelten die üblichen Klammerregeln und Operator-Prioritäten.

Zugelassene Operatoren sind {+ (Addition), -(Subtraktion), * (Multiplikation), / (Division)}. Operanden sind Konstanten, Variablen, Makrofunktionen und wiederum arithmetische Ausdrücke dieser Art.

 Konstanten sind Integer- und Real-Werte. Bei Real-Werten ist die Kommastelle durch einen Punkt zu kennzeichnen.

 Variablen sind von der Form Nx, Ax, oder STGy, wobei x eine Preislistennummer ist, deren Eintrag in der Preislistenrelation über eine Sortierung (Kalkulation) > 0.00 verfügt. Diese können hier auch bei vorhandener Korrektursperre eingesetzt werden.

Ax bezeichnet dabei den ‚alten Preis‘ vor der Kalkulation, Nx den bereits kalkulierten oder manuell geänderten Preis zur Preislistenbezeichnung.

STGy bezeichnet steht für den Steuersatz / 100 (also 0.16 bei 16%), der während der Kalkulation mittels des Steuerschlüssels des kalkulierten Artikels und der Steuergruppe y zum Kalkulationszeitraum bestimmt wird. ‚y‘ muss daher die Nummer einer Steuergruppe sein.

Die Angabe der Steuergruppe kann jedoch unterbleiben; in diesem Fall wird die Steuergruppe laut SPA-Einstellung zur Steuersatzermittlung herangezogen.

            SPA-Bezeichnung: „Preiskalkulation: Default-Steuergruppe“

    Werte:  Nummer der Steuergruppe

 

 Makrofunktionen sind von der Form <Funktionsname>(<Parameterliste>).

<Funktionsname> muss der Funktionsname einer Makro-Funktion im unter Makro-Name bezeichneten Makro sein, die einen Integer- oder Real-Wert zurückgibt.

<Parameterliste> ist eine evtl. leere Aufzählung von Parametern, deren Anzahl der der im Makro definierten Funktion entspricht. Dort sind nur die Parametertypen {integer, real, string} zugelassen. Bei Aufruf der Funktion erfolgt eine typgerechte Konvertierung der Parameterwerte.

 

 Ein Parameter kann sein:

eine Konstante vom Typ Integer, Real oder String

                    Stringkonstanten sind wie “text“ einzuschließen

eine Variable der o.a. Form Nx oder Ax oder STGy

eine der folgenden nur in Parameterlisten erlaubte Zusatzvariablen:

AID      ArtikelId des Artikels, dessen Preise gerade kalkuliert werden

LPGV   VK-Listenpreisgruppe des Artikes,....

LPGE   EK- Listenpreisgruppe des Artikes,....

PMV     VK-Preismatrix des Artikes,....

PME     EK-Preismatrix des Artikes,....

KSN     Nummer des Kalkulkationsschemas

FG       Nummer der Formelgruppe, von der aus die Funktion gerade aufgerufen wird

LPN      Nummer des Formelziels ( also die Preislistennummer ), die gerade berechnet wird.

ein arithmetischer Ausdruck

Eine  Bedingung besteht aus

einer  linken Seite:

Dieses hat immer die Form Nx, wobei x eine Preislistennummer ist, deren Eintrag in der Preislistenrelation über eine Sortierung (Kalkulation) > 0.00 verfügt.

Dabei darf die Preislistennummer nur einmal linksseitig erscheinen.

dem Vergleichsoperator:

Zugelassen sind hier die Operatoren  {< (kleiner), <= (kleiner oder gleich), > (größer), >= (größer oder gleich)}.

einer rechten Seite:

Dieses ist ein Berechnungstext wie in den Formeln.