Show TOC

Документация по объектуОкно "Налоговая формула - определение": поле "Операция": Бразилия и Индия Найти этот документ в структуре навигации

 

Это поле в окне Налоговая формула - определение предназначено для выбора допустимых операций для налоговой формулы.

Для открытия окна выберите   Администрирование   Справочники   Финансы   Конфигурация налогового механизма  .

Арифметические операции

Операция

Описание

Пример

Результат

+

Сложение

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 (число, тип)

Предварительно определенная функция для округления.

Можно выбрать только один из следующих типов:

  • Percents

  • Prices

  • Amounts

  • Quantities

Правила округления подчиняются настройкам поля Десятичные разряды в окне Общие параметры настройки на закладке Просмотр.

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))

Конец примера
Грамматические правила

Язык чувствителен к регистру.

  1. Одиночные выражения не поддерживаются. Единственные инструкции являются допустимыми.

    Допустимые инструкции:

    • Assignment (присвоение)

    • If

    • While

    • Compound (компоновка)

  2. Правила для инструкций присвоения:

    1. Ссылочная локальная переменная должна быть инициализирована.

      Следующие инструкции являются недопустимыми:

      a = a + 1

      /*локальной переменной 'a' предварительно не присвоено значение*/

      b = a

      /*локальной переменной 'a' предварительно не присвоено значение*/

    2. Ссылочной внешней локальной переменной в блоке не может быть присвоено значение с другим типом.

      Следующие инструкции являются неверными:

      a = "124"

      /*неверная, поскольку типом локальной переменной 'a' является string (строка), которая может быть переопределена последней инструкцией перед блоком*/

  3. Правила для инструкций if / while:

    1. Выражение, заключенное в скобки "(" и ")", должно относиться к типу boolean (логическое):

      1. True

      2. False

      3. Результат выражения отношения.

    2. Инструкции, заключенные в скобки "{" и "}" плюс "{" и "}", состоят из блока, поэтому применимо правило 2.b).

  4. Правило для функций:

    1. В этой версии поддерживается только функция "Round", имеющая два типа прототипов:

      • Round (число, десятичная как число)

        /* Первый параметр "число" включает целое и вещественное число и представляет число округления; второй параметр "целое число" включает целочисленный тип и представляет только цифры после десятичного знака */

      • Round (число, тип)

        /* Первый параметр является таким же, как первый прототип; значением второго параметра "тип" должно быть одно из следующих: Percents, Prices, Amounts или Quantities */

  5. Правила для выражений:

    1. Логическое выражение:

      Операторы: && > ||

      Операнды: значение должно быть логическим

    2. Выражение отношения:

      Операторы: >, >=, ==, !=, <, <=

      Операнды:

      • Если между двумя операндами существует одно строковое значение, перед выполнением сравнения нестроковое значение меняется на соответствующее строковое значение.

      • Если между двумя операндами нет строкового значения, возможно сравнение целых, вещественных и логических значений.

      Пример Пример

      • Значение ("truf" > true) является истинным. Здесь второй операнд преобразуется в "true".

      • Значение (2 < "12") является ложным. Здесь первый операнд преобразуется в "2".

      • Значение (2 < true) является ложным. Здесь второй операнд преобразуется в 1.

      • Значение (2 > false) является истинным. Здесь второй операнд преобразуется в 0.

      Конец примера
    3. Арифметическое выражение:

      Операторы: (*, /, %) > (+, -)

      Операнды:

      • Операнды для "%" должны быть целочисленного типа.

      • Операнды для операторов, за исключением "%" и "+", должны быть нестрокового типа, включая целые, вещественные и логические значения.

      • Операнды для "+" могут быть любого типа. Если существует строковое значение операндов, результатом будет строка; в противном случае результатом будет число.

      • Если два операнда являются целочисленными, результатом "/" также будет целое число. Например, 2 / 4 = 0 (точное деление)

    4. Унарное выражение:

      Операторы: !, -

      Операнды:

      • Для "!" операнд должен быть логическим значением.

      • Для "-" операнд должен быть нестроковым значением.

    5. Выражение в скобках: выражение с самым высоким приоритетом

      Операторы: (, )

      Их приоритет: 1) < 2) < 3) < 4) < 5)

  6. Другие правила:

    1. Нельзя присваивать строки нестроковому выходному параметру.

    2. Нельзя присваивать значение входному параметру.

    3. Переполнение номера - когда превышено максимальное значение 9223372036854.

    4. Всем выходным переменным должны быть присвоены значения.

Зарезервированные слова (чувствительные к регистру)

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.