Show TOC

ObjektdokumentationFeld Operation im Fenster: Steuerformel - Definition (BR, IN) Dieses Dokument in der Navigationsstruktur finden

 

Mit diesem Feld im Fenster Steuerformel - Definition können Sie gültige Berechnungen für die Steuerformel auswählen.

Öffnen Sie dieses Fenster über   Administration   Definition   Finanzwesen   Konfiguration Steuer-Engine  .

Arithmethische Berechnungen

Operation

Beschreibung

Beispiel

Ergebnis

+

Addition

X=2

X=X+1

3

Subtraktion

X=2

X=5-X

3

*

Multiplikation

X=4

X=X*5

20

/

Division

X=5

X=15/X;

X=5

X=X/2

3;

2.5

%

Modulus (Rest aus der Division)

5%2;

10%8;

10%2;

1;

2;

0

(,)

Priorität

5*(2+3)

25

Round (Number, Decimals as Number)

Eine vordefinierte Rundungsfunktion.

Die Rundungsregeln beruhen auf folgenden Einstellungen:

  • Feld Rundungsmethode im Fenster Belegeinstellungen

  • Rundungsfeld im Fenster Währungen festlegen

  • Feld Dezimalstelle im Fenster Allgemeine Einstellungen, Registerkarte Anzeigen

Runden (2,134,2);

Runden (2,-1)

2.13;

0

Round (Number, Type)

Eine vordefinierte Rundungsfunktion.

Sie können nur eine der folgenden Einstellungen wählen:

  • Prozente

  • Preise

  • Beträge

  • Mengen

Die Rundungsregeln beruhen auf den Einstellungen im Feld Dezimalstelle im Fenster Allgemeine Einstellungen, Registerkarte Anzeigen.

Runden (2,134, Beträge)

Wenn die Einstellung des Feldes Dezimalstelle Beträge 2 lautet.

2.13

Bedingungsoperationen

Operationen

Beschreibung

Beispiel

Ergebnis

<

Kleiner als

5<8

True

<=

Kleiner gleich

5<=8

True

==

Gleich

5==8

False

!=

Ungleich

5!=8

True

>=

Größer gleich

5>=8

False

>

Größer als

5>8

False

If…else

Bedingungsoperation

if (X<6) {X=X+2} else

{X=X+1}

X=3

5

Beispiel Beispiel

ICMS

Industrialisierung oder Wiederverkauf oder Verbrauch oder Assets

ICMS Bruttobetrag = Nettowert Artikel / (1-((ICMS-Satz/100)*(Basis/100)))

ICMS Steuerbetrag = ICMS Bruttobetrag – Nettowert

Basisbetrag = Nettowert Artikel / (1-((ICMS-Satz/100)*(Basis/100))*(1+(IPI-Satz/100)*(IPI-Basis/100)))

ICMS-Betrag = Basisbetrag * ((100-ICMS-Satz)/100)*(Basis/100))

Ende des Beispiels.
Grammatikregeln

Bei dieser Sprache wird zwischen Groß- und Kleinschreibung unterschieden.

  1. Einzelausdrücke werden nicht unterstützt. Nur Anweisungen sind gültig.

    Zu den gültigen Anweisungen gehören:

    • Zuordnungen

    • If

    • While

    • Zusammengesetzt

  2. Regeln für Zuordnungsanweisungen:

    1. Die lokale Bezugsvariable muss initialisiert sein.

      Die folgenden Anweisungen sind ungültig:

      a = a + 1

      /*der lokalen Variable "a" ist zuvor kein Wert zugeordnet */

      b = a

      /*der lokalen Variable "a" ist zuvor kein Wert zugeordnet */

    2. Der externen Bezugsvariable im Block kann kein Wert mit einem anderen Typ zugeordnet werden.

      Die folgenden Anweisungen sind nicht korrekt:

      a = "124"

      /*nicht korrekt, da der Typ der lokalen Variable "a" String ist, was durch die letzte Anweisung vor dem Block bestimmt werden kann*/

  3. Regeln für If/While-Anweisungen:

    1. Der Typ des in "(" und ")" eingeschlossenen Ausdrucks muss vom Typ boolesch sein:

      1. True

      2. False

      3. Das Ergebnis des Beziehungsausdrucks.

    2. Die in "{" und "}" plus "{" und "}" eingeschlossenen Anweisungen bestehen aus einem Block, daher kommt Regel 2.b) zur Anwendung.

  4. Regel für Funktionen:

    1. Dieses Release unterstützt nur die Funktion "Runden", die über zwei Arten von Prototypen verfügt:

      • Round (Number, Decimals as Number)

        /* Der erste Parameter "Zahl" enthält ganze und reelle Zahlen und stellt die Rundungszahl dar; der zweite Parameter "Ganzzahl" enthält den Typ integer und stellt nur die Zahlen nach dem Dezimalzeichen dar */

      • Round (Number, Type)

        /* Der erste Parameter ist derselbe wie beim ersten Prototyp; der Wert des zweiten Parameters "Typ" muss einer der folgenden Werte sein: Prozente, Preise, Beträge oder Mengen */

  5. Regeln für Ausdrücke:

    1. Logischer Ausdruck:

      Operatoren: && > ||

      Operanden: Wert muss boolesch sein

    2. Beziehungsausdruck:

      Operatoren: >, >=, ==, !=, <, <=

      Operanden:

      • Ist ein Stringwert zwischen zwei Operanden vorhanden, wird der Nicht-Stringwert vor einem Vergleich in den entsprechenden Stringwert geändert.

      • Ist kein Stringwert zwischen zwei Operanden vorhanden, können die Werte des Typs integer, reell und boolesch verglichen werden.

      Beispiel Beispiel

      • Der Wert von ("truf" > true) ist true. Hier wird der zweite Operand in "true" umgewandelt.

      • Der Wert von (2 > "12") ist false. Hier wird der erste Operand in "2" umgewandelt.

      • Der Wert von (2 < true) ist false. Hier wird der zweite Operand in 1 umgewandelt.

      • Der Wert von (2 > false) ist true. Hier wird der zweite Operand in 0 umgewandelt.

      Ende des Beispiels.
    3. Arithmetischer Ausdruck:

      Operatoren: (*, /, %) > (+, -)

      Operanden:

      • Die Operanden für "%" müssen vom Typ integer sein\

      • Die Operanden für die Operatoren, außer "%" und "+" , müssen vom Typ Nicht-String sein, einschließlich integer, reell und boolesch.

      • Die Operanden für "+" können einen beliebigen Typ haben. Befindet sich ein Stringwert unter den Operanden, ist das Ergebnis eine Zeichenfolge; anderenfalls ist das Ergebnis numerisch.

      • Sind beide Operanden ganze Zahlen, ist auch das Ergebnis der Division ganzzahlig. Zum Beispiel: 2 / 4 =0 (genaue Division)

    4. Monadischer Ausdruck:

      Operatoren: !, -

      Operanden:

      • Bei "!" müssen boolesche Werte stehen.

      • Bei "-" müssen Nicht-Stringwerte stehen.

    5. Klammerausdruck: Ausdruck mit der höchsten Priorität

      Operatoren: (, )

      Ihre Priorität ist: 1) < 2) < 3) < 4) < 5)

  6. Weitere Regeln:

    1. Strings können nicht einem Ausgabeparameter zugeordnet werden, der nicht aus einem String besteht.

    2. Dem Eingabeparameter kann kein Wert zugeordnet werden.

    3. Zahlenüberlauf - wenn der Maximalwert 9223372036854 überschritten wird

    4. Allen Ausgabevariablen müssen Werte zugeordnet werden.

Reservierte Wörter (Groß-/Kleinschreibung beachten)

if

Percents

ContinueNotice

Round

else

Prices

ContinueNextPageNotice

while

Amounts

B1Notice

True

Quantities

false

UMWANDLUNGSPROGRAMM B1

ZEICHEN

Buchstabe = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" .

Zahl = "0123456789" .

cr = CHR(13).

tab = CHR(9) .

If = CHR(10) .

anyButQuote = ANY – “ ' ”

anyButApostrophe = ANY – “ ' ”

BEMERKUNGEN VON "/*" BIS "*/"

IGNORE

cr + lf + tab

TOKENS

ident = letter {letter | digit | '_'} .

number = digit {digit}.

real = digit {digit} "." digit {digit}.

string = '"' {anyButQuote} '"' | "'" {anyButApostrophe} "'".

PRODUCTIONS

B1 = Body.

Body = StatSeq .

StatSeq = Stat [";"] {Stat [";"]}.

CompoundStat = "{" StatSeq "}".

Stat = AssignStat | IfStat | WhileStat | CompoundStat.

AssignStat = Ident "=" Exp.

IfStat = "if" "(" Exp ")" CompoundStat [ "else" CompoundStat ].

WhileStat = "while" "(" Exp ")" CompoundStat.

Exp = ConExp.

ConExp = OrExp.

OrExp = AndExp { "||" AndExp }.

AndExp = RelExp { "&&" RelExp }.

RelExp = AddExp [ RelOp AddExp].

RelOp = ( "<" | "<=" | ">" | ">=" | "==" | "!=" ).

AddExp = MulExp { AddOp MulExp}.

AddOp = ( "+" | "-" ).

MulExp = Factor { MulOp Factor }.

MulOp = ( "*" | "/" | "%" ).

Factor = ("true" | "false" | integer | string | real |"(" Exp ")" | IdentOrFunction | Enum | UnaryOp Factor).

IdentOrFunction = Ident (ParamList | ).

Ident = ident.

ParamList = "(" [Exp { "," Exp}] ")".

Enum = RoundTypeEnum | SystemStringEnum.

RoundTypeEnum = ("Percents" | "Prices" | "Amounts" | "Quantities").

SystemStringEnum = ("ContinueNotice" | "ContinueNextPageNotice" | "B1Notice").

UnaryOp = ("-" | "!").

END B1.