Select language:

Dokumentacja obiektuPole Operacja okna Formuła podatku - Definicja: Brazylia i Indie

 

To pole dostępne w oknie Formuła podatku - Definicja służy do wybierania poprawnych operacji dla formuły podatku.

W celu wyświetlenia tego okna należy wybrać opcje   Administracja  Definicje  Księgowość  Konfiguracja mech. dot. podatków  .

Obliczenia arytmetyczne

Operacja

Opis

Przykład

Wynik

+

Dodawanie

X=2

X=X+1

3

Odejmowanie

X=2

X=5-X

3

*

Mnożenie

X=4

X=X*5

20

/

Dzielenie

X=5

X=15/X;

X=5

X=X/2

3;

2.5

%

Moduł (reszta z dzielenia)

5%2;

10%8;

10%2;

1;

2;

0

(,)

Priorytet

5*(2+3)

25

Round (Number, Decimals as Number)

Predefiniowania funkcja zaokrąglania.

Reguły zaokrąglania są zgodne z następującymi ustawieniami:

  • Pole Metoda zaokrąglania w oknie Ustawienia dokumentu

  • Pole Zaokrąglanie w oknie Definiowanie walut

  • Pole Miejsca dziesiętne w oknie Ustawienia ogólne, na karcie Wyświetl

Round (2.134,2);

Round (2.-1)

2.13;

0

Round (Number, Type)

Predefiniowania funkcja zaokrąglania.

Do wyboru dostępne są następujące typy:

  • Percents

  • Prices

  • Amounts

  • Quantities

Reguły zaokrąglania są zgodne z ustawieniami w polu Miejsca dziesiętne w oknie Ustawienia ogólne, na karcie Wyświetl

Round (2.134, Amounts)

Jeśli ustawienie pola Kwoty w oknie Miejsca dziesiętne jest równe 2.

2.13

Operacje dot. warunków

Operacje

Opis

Przykład

Wynik

<

Mniejszy niż

5<8

Prawda

<=

Mniejszy lub równy

5<=8

Prawda

==

Równy

5==8

Fałsz

!=

Różny

5!=8

Prawda

>=

Większy lub równy

5>=8

Fałsz

>

Większe niż

5>8

Fałsz

If…else

Operacja dot. warunków

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

{X=X+1}

X=3

5

Przykład Przykład

ICMS

Uprzemysłowienie lub Ponowna sprzedaż lub Zużycie lub Zasoby

Kwota brutto ICMS = Wartość netto towaru / (1-((Stawka ICMS/100)*(Podstawa/100)))

Kwota podatku ICMS = Kwota brutto ICMS – Wartość netto

Kwota bazowa = Wartość netto pozycji / (1-((Stawka ICMS/100)*(Podstawa/100))*(1+(Stawka IPI/100)*(Stawka IPI/100)))

Kwota ICMS = Kwota bazowa * ((100-Stawka ICMS)/100)*(Podstawa/100))

Koniec przykładu
Reguły gramatyki

W tym języku istotna jest pisownia dużą i małą literą.

  1. Wyrażenia samodzielne nie są obsługiwane. Poprawne są tylko instrukcje.

    Do poprawnych instrukcji należą:

    • Przypisanie

    • If

    • While

    • Compound

  2. Reguły instrukcji przypisania:

    1. Zmienna lokalna, do której istnieje odwołanie, musi być zainicjowana.

      Poprawne są następujące instrukcje:

      a = a + 1

      /*wartość nie zostanie przypisana do zmiennej lokalnej 'a' zanim */

      b = a

      /*wartość nie zostanie przypisana do zmiennej lokalnej 'a' zanim */

    2. Do zewnętrznej zmiennej lokalnej w bloku, do której istnieje odwołanie, wartość nie można przypisać wartości innego typu.

      Następujące instrukcje są niepoprawne:

      a = "124"

      /*takie przypisanie nie jest poprawne, ponieważ typ zmiennej lokalnej 'a' to string, co może zostać określone w ostatniej instrukcji przed blokiem*/

  3. Reguły dla instrukcji if / while:

    1. Wyrażenie zawarte między znakami "(" i ")" musi być typu boolean:

      1. Prawda

      2. Fałsz

      3. Wynik wyrażenia relacji.

    2. Instrukcje zawarte między "{" i "}" oraz "{" i "}" zawierają blok, dlatego obowiązuje reguła 2.b).

  4. Reguła dla funkcji:

    1. W tej wersji obsługiwana jest tylko funkcja „Round”, dla której istnieją dwa typy prototypów:

      • Round (Number, Decimals as Number)

        /* Pierwszy parametr „Number” zawiera liczby całkowite i rzeczywiste. Ten parametr reprezentuje liczbę zaokrąglaną; drugi parametr „integer” zawiera wartość typu integer i reprezentuje liczbę cyfr po separatorze miejsc dziesiętnych */

      • Round (Number, Type)

        /* Pierwszy parametr jest taki sam, jak pierwszy prototyp; wartość drugiego parametru „Type” musi być jedną z następujących wartości: Percents, Prices, Amounts lub Quantities */

  5. Reguły dla wyrażeń:

    1. Wyrażenie logiczne:

      Operatory && > ||

      Operandy: wartość musi być typu boolean

    2. Wyrażenie relacji:

      Operatory: >, >=, ==, !=, <, <=

      Operandy:

      • Jeśli między dwoma operandami występuje jeden ciąg znaków, wówczas przed porównaniem wartość niebędąca ciągiem znaków zostanie zmieniona na wartość odpowiadającego ciągu znaków

      • Jeśli między dwoma operandami nie ma żadnego ciągu znaków, wówczas możliwe jest porównanie wartości typu integer, real i boolean

      Przykład Przykład

      • Wartość ("truf" > true) jest równa true. W tym przypadku drugi operand zostaje przekształcony na „true”.

      • Wartość (2 < "12") jest równa false. W tym przypadku pierwszy operand zostaje przekształcony na „2”.

      • Wartość (2 < true) jest równa false. W tym przypadku drugi operand zostaje przekształcony na 1.

      • Wartość (2>true) jest równa true. W tym przypadku drugi operand zostaje przekształcony na 0.

      Koniec przykładu
    3. Wyrażenie arytmetyczne:

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

      Operandy:

      • Operandy dla "%" muszą być typu integer\

      • Operandy dla operatorów (z wyjątkiem "%" i "+") muszą być typu innego niż string, np.: integer, real i boolean

      • Operandy dla "+" mogą być dowolnego typu. Jeśli operatory zawierają wartość typu string, wynikiem będzie ciąg znaków; w przeciwnym wypadku wynikiem będzie liczba.

      • Jeśli obydwa operatory są typu integer, wówczas wynik "/" również będzie typu integer. Na przykład, 2 / 4 = 0 (dzielenie bez reszty)

    4. Wyrażenie jednoargumentowe:

      Operatory: !, -

      Operandy:

      • W przypadku "!" wartość musi być typu boolean

      • W przypadku "-" wartość musi być typu innego niż string

    5. Wyrażenie z nawiasami: wyrażenie o najwyższym priorytecie

      Operatory: (, )

      Priorytet jest następujący: 1) < 2) < 3) < 4) < 5)

  6. Inne reguły:

    1. Ciągi znaków nie mogą być przypisywane do parametrów wyjściowych typu innego niż string

    2. Nie można przypisać wartości do parametru wejściowego

    3. Zbyt wysoka liczba - gdy dojdzie do przekroczenia maksymalnej wartości 9223372036854

    4. Do wszystkich zmiennych wyjściowych należy przypisywać wartości

Słowa zastrzeżone (z rozróżnianiem wielkości znaków)

if

Percents

ContinueNotice

Round

else

Prices

ContinueNextPageNotice

while

Amounts

B1Notice

True

Quantities

false

COMPILER B1

CHARACTERS

letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" .

digit = "0123456789" .

cr = CHR(13).

tab = CHR(9) .

If = CHR(10) .

anyButQuote = ANY – “ ' ”

anyButApostrophe = ANY – “ ' ”

COMMENTS FROM "/*" TO "*/"

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.

Was this page helpful to you?

Related Content

The following content is not part of SAP product documentation. For more information, see the following disclaimer Information published on SAP site .