Az Adóképlet – definíciók ablak ezen mezőjének segítségével érvényes műveleteket választhat ki az adóképlet számára.
Az ablak megnyitásához válassza a következő elérési útvonalat:
.Művelet |
Leírás |
Példa |
Eredmény |
---|---|---|---|
+ |
Összeadás |
X=2 X=X+1 |
3 |
– |
Kivonás |
X=2 X=5-X |
3 |
* |
Szorzás |
X=4 X=X*5 |
20 |
/ |
Osztás |
X=5 X=15/X; X=5 X=X/2 |
3; 2.5 |
% |
Modulus (osztási maradék) |
5%2; 10%8; 10%2; |
1; 2; 0 |
(,) |
Prioritás |
5*(2+3) |
25 |
Kerekítés (szám, tizedesek számként) |
Előre definiált kerekítési funkció. A kerekítési szabályok ezeket a beállításokat követik:
|
Kerekítés (2,134,2); Kerekítés (2.-1) |
2.13; 0 |
Kerekítés (szám, típus) |
Előre definiált kerekítési funkció. Az alábbi típusok közül csak egyet választhat:
A kerekítési szabályok az Általános beállítások ablak Tizedesjegy mezőjének Megjelenítés lapján történt beállításokat követik. |
Kerekítés (2,134, összegek) Ha a Tizedesjegy Összegek mező értéke 2. |
2.13 |
Műveletek |
Leírás |
Példa |
Eredmény |
---|---|---|---|
< |
Kisebb, mint |
5<8 |
Igaz |
<= |
Kisebb vagy egyenlő |
5<=8 |
Igaz |
== |
Egyenlő |
5==8 |
Hamis |
!= |
Nem egyenlő |
5!=8 |
Igaz |
>= |
Nagyobb vagy egyenlő |
5>=8 |
Hamis |
> |
Nagyobb, mint |
5>8 |
Hamis |
If…else |
Feltételes utasítás |
if (X<6) {X=X+2} else {X=X+1} X=3 |
5 |
Példa
ICMS
Iparosítás vagy újraeladás vagy fogyasztás vagy vagyon
ICMS bruttó összeg = Cikk nettó érték / (1-((ICMS kulcs/100)*(bázis/100)))
ICMS adóösszeg = ICMS bruttó összeg – nettó érték
Bázisösszeg = Cikk nettó érték / (1-((ICMS kulcs/100)*(bázis/100))*(1+(IPI kulcs/100)*(IPI bázis/100)))
ICMS összeg = Bázisösszeg * ((100-ICMS kulcs)/100)*(bázis/100))
A nyelv megkülönbözteti a kis- és nagybetűs írást.
Az egyszavas kifejezéseket a rendszer nem támogatja. Csak utasítások érvényesek.
Az érvényes utasítások az alábbiakat foglalják magukban:
Hozzárendelés
Ha
Míg
Összetett
Értékadó utasítások szabályai:
A hivatkozott lokális változót inicializálni kell.
Az alábbi utasítások érvénytelenek:
a = a + 1
/*a lokális változó 'a' nem az előtte lévő értékhez van hozzárendelve */
b = a
/*a lokális változó 'a' nem az előtte lévő értékhez van hozzárendelve */
A hivatkozott külső lokális változó a blokkban nem rendelhető hozzá más típusú értékhez.
Az alábbi utasítások helytelenek:
a = "124"
/*ez azért nem helyes, mert az 'a' lokális változó típusa sztring, amelyet a blokk előtti utolsó utasításban lehet meghatározni*/
If / while utasítások szabályai:
A "(" and ")" közé tett kifejezéstípusnak boole-i típusúnak kell lennie:
Igaz
Hamis
A relációs kifejezés eredménye.
A "{" and "}" plus "{" and "}" közé tett utasítások egy blokkot képeznek, így a 2.b) szabály alkalmazandó.
Funkciószabályok:
Ez a verzió csak a "Kerekítés" funkciót támogatja, amelynek két prototípusa van:
Kerekítés (szám, tizedesek számként)
/* Az első paraméter "szám" egész és valós számokat foglal magában és a kerekített számot képezi le; a második paraméter "egész" az egész típusokat foglalja magában és csak a tizedesvessző utáni számjegyeket képezi le */
Kerekítés (szám, típus)
/* Az első paraméter ugyanaz, mint az első prototípus; a második paraméter "típus" értéke a következő értékek egyike: százalékok, árak, összegek vagy mennyiségek */
Kifejezési szabályok:
Logikai kifejezés:
Operátorok: && > ||
Operandusok: az érték boole-i kell, hogy legyen
Relációs kifejezés:
Operátorok: >, >=, ==, !=, <, <=
Operandusok:
Ha két operandus között egy szöveg érték található, a nem szöveg típusú érték átváltozik a megfelelő szövegértékre az összehasonlítás megtörténte előtt
Ha nincs szöveg érték két operandus között, az egész szám, a valós szám és boole-i értékei összehasonlíthatók
Példa
A ("truf" > true) értéke igaz. Ebben az esetben a második operandus "igaz" értékre konvertálódott.
A (2 < "12") értéke hamis. Ebben az esetben az első operandus "2" értékre konvertálódott.
A (2< igaz) értéke hamis. Ebben az esetben a második operandus "1" értékre konvertálódott.
A (2>hamis) értéke igaz. Ebben az esetben a második operandus "0" értékre konvertálódott.
Aritmetikai kifejezés:
Operátorok: (*, /, %) > (+, -)
Operandusok:
A "%" operandusa egész típusú kell, hogy legyen\
Az operátorok operandusai, kivéve a "%" és "+" nem szöveg típusúnak kell lenniük, például egész vagy valós számok, boole-i
A "+" operandusa bármilyen típusú lehet. Ha az operandusnak szöveg értéke van, az eredmény szöveg lesz; egyébként az eredmény numerikus lesz.
Ha mindkét operandus egész szám, "/" eredménye szintén egész szám lesz. Például 2 / 4 = 0 (osztás pontosan)
Unáris kifejezés:
Operátorok: !, -
Operandusok:
A "!" operandusnak boole-i értéknek kell lennie.
A "-" operandusnak nem szöveg típusú értéknek kell lennie.
Zárójeles kifejezés: a legmagasabb prioritású kifejezés
Operátorok: (, )
Prioritásaik: 1) < 2) < 3) < 4) < 5)
Egyéb szabályok:
A szövegek nem rendelhetők nem szöveg típusú kimeneti paraméterekhez
Bemeneti paraméterhez nem lehet értéket rendelni
Szám-túlcsordulás - ha túllépi a maximális 9223372036854 értéket
Az összes kimeneti változónak hozzárendelt értéknek kell lennie.
if |
Percents |
ContinueNotice |
Round |
else |
Prices |
ContinueNextPageNotice |
|
while |
Amounts |
B1Notice |
|
True |
Quantities |
||
false |
B1 FORDÍTÓ |
KARAKTEREK betűk = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" . számjegyek = "0123456789" . cr = CHR(13). tab = CHR(9) . If = CHR(10) . anyButQuote = ANY – “ ' ” anyButApostrophe = ANY – “ ' ” |
COMMENTS FROM "/*" TO "*/" |
IGNORÁLÁS cr + lf + tab |
TOKENEK ident = betű {letter | digit | '_'} . szám = számjegy {digit}. real = számjegy {digit} "." számjegy {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. |