Это поле в окне Налоговая формула - определение предназначено для выбора допустимых операций для налоговой формулы.
Для открытия окна выберите
.Операция |
Описание |
Пример |
Результат |
---|---|---|---|
+ |
Сложение |
X=2 X=X+1 |
3 |
– |
Вычитание |
X=2 X=5-X |
3 |
* |
Умножение |
X=4 X=X*5 |
20 |
/ |
Деление |
X=5 X=15/X; X=5 X=X/2 |
3; 2.5 |
% |
Модуль (остаток от деления) |
5%2; 10%8; 10%2; |
1; 2; 0 |
(,) |
Приоритет |
5*(2+3) |
25 |
Round (число, десятичная как число) |
Предварительно определенная функция для округления. Правила округления подчиняются следующим настройкам:
|
Round (2.134,2); Round (2.-1) |
2.13; 0 |
Round (число, тип) |
Предварительно определенная функция для округления. Можно выбрать только один из следующих типов:
Правила округления подчиняются настройкам поля Десятичные разряды в окне Общие параметры настройки на закладке Просмотр. |
Round (2.134, Amounts) Если настройка поля сумм десятичных разрядов равна 2. |
2.13 |
Операции |
Описание |
Пример |
Результат |
---|---|---|---|
< |
Меньше, чем |
5<8 |
True |
<= |
Меньше или равно |
5<=8 |
True |
== |
Равно |
5==8 |
False |
!= |
Не равно |
5!=8 |
True |
>= |
Больше или равно |
5>=8 |
False |
> |
Больше |
5>8 |
False |
If…else |
Операции с условиями |
if (X<6) {X=X+2} else {X=X+1} X=3 |
5 |
Пример
ICMS
Индустриализация, продажа, потребление или активы
Сумма брутто ICMS = стоимость нетто позиции / (1-((ставка ICMS/100)*(базис/100)))
Сумма налога ICMS = сумма брутто ICMS – стоимость нетто
Базовая сумма = стоимость нетто позиции / (1-((ставка ICMS/100)*(базис/100))*(1+(ставка IPI/100)*(базис IPI/100)))
Сумма ICMS = базовая сумма * ((100-ставка ICMS)/100)*(базис/100))
Язык чувствителен к регистру.
Одиночные выражения не поддерживаются. Единственные инструкции являются допустимыми.
Допустимые инструкции:
Assignment (присвоение)
If
While
Compound (компоновка)
Правила для инструкций присвоения:
Ссылочная локальная переменная должна быть инициализирована.
Следующие инструкции являются недопустимыми:
a = a + 1
/*локальной переменной 'a' предварительно не присвоено значение*/
b = a
/*локальной переменной 'a' предварительно не присвоено значение*/
Ссылочной внешней локальной переменной в блоке не может быть присвоено значение с другим типом.
Следующие инструкции являются неверными:
a = "124"
/*неверная, поскольку типом локальной переменной 'a' является string (строка), которая может быть переопределена последней инструкцией перед блоком*/
Правила для инструкций if / while:
Выражение, заключенное в скобки "(" и ")", должно относиться к типу boolean (логическое):
True
False
Результат выражения отношения.
Инструкции, заключенные в скобки "{" и "}" плюс "{" и "}", состоят из блока, поэтому применимо правило 2.b).
Правило для функций:
В этой версии поддерживается только функция "Round", имеющая два типа прототипов:
Round (число, десятичная как число)
/* Первый параметр "число" включает целое и вещественное число и представляет число округления; второй параметр "целое число" включает целочисленный тип и представляет только цифры после десятичного знака */
Round (число, тип)
/* Первый параметр является таким же, как первый прототип; значением второго параметра "тип" должно быть одно из следующих: Percents, Prices, Amounts или Quantities */
Правила для выражений:
Логическое выражение:
Операторы: && > ||
Операнды: значение должно быть логическим
Выражение отношения:
Операторы: >, >=, ==, !=, <, <=
Операнды:
Если между двумя операндами существует одно строковое значение, перед выполнением сравнения нестроковое значение меняется на соответствующее строковое значение.
Если между двумя операндами нет строкового значения, возможно сравнение целых, вещественных и логических значений.
Пример
Значение ("truf" > true) является истинным. Здесь второй операнд преобразуется в "true".
Значение (2 < "12") является ложным. Здесь первый операнд преобразуется в "2".
Значение (2 < true) является ложным. Здесь второй операнд преобразуется в 1.
Значение (2 > false) является истинным. Здесь второй операнд преобразуется в 0.
Арифметическое выражение:
Операторы: (*, /, %) > (+, -)
Операнды:
Операнды для "%" должны быть целочисленного типа.
Операнды для операторов, за исключением "%" и "+", должны быть нестрокового типа, включая целые, вещественные и логические значения.
Операнды для "+" могут быть любого типа. Если существует строковое значение операндов, результатом будет строка; в противном случае результатом будет число.
Если два операнда являются целочисленными, результатом "/" также будет целое число. Например, 2 / 4 = 0 (точное деление)
Унарное выражение:
Операторы: !, -
Операнды:
Для "!" операнд должен быть логическим значением.
Для "-" операнд должен быть нестроковым значением.
Выражение в скобках: выражение с самым высоким приоритетом
Операторы: (, )
Их приоритет: 1) < 2) < 3) < 4) < 5)
Другие правила:
Нельзя присваивать строки нестроковому выходному параметру.
Нельзя присваивать значение входному параметру.
Переполнение номера - когда превышено максимальное значение 9223372036854.
Всем выходным переменным должны быть присвоены значения.
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. |