Работа с числовыми аргументами функций и возвращаемыми значениями

1. gml 19.12.24 22:22 Сейчас в теме
При разработке внешних компонент NativeAPI были опытным путем определены следующие особенности:

1. В неизолированном режиме запуска при передаче во внешнюю компоненту аргументов типа "Число" платформа 1С передает:

а) целые числа от -2147483648 до +2147483647 как аргумент типа VTYPE_I4
б) все остальные числа (очень маленькие, очень большие и дробные/смешанные) как аргумент типа VTYPE_R8
в) в веб-клиентах тип аргумента может быть как VTYPE_I4, так и VTYPE_R8 независимо от значения числа.

2. В неизолированном режиме запуска при передаче из внешней компоненты результатов типа "Число":

а) целые числа типов VTYPE_I1,VTYPE_I2, VTYPE_I4,VTYPE_UI1,VTYPE_UI2, VTYPE_UI4 передаются в платформу как 4-байтовое число со знаком
б) целые числа типов VTYPE_I8,VTYPE_UI8, VTYPE_INT,VTYPE_UINT передаются в платформу как Неопределено (значения не передаются)
в) Числа с плавающей точкой типов VTYPE_R4, VTYPE_R8 передаются как VTYPE_R8

3. В изолированном режиме запуска при передаче во внешнюю компоненту аргументов типа "Число" платформа 1С передает:

а) целые числа от -9223372036254775808 до +9223372036254775807 как аргумент типа VTYPE_I4
б) все остальные числа (очень маленькие, очень большие и дробные/смешанные) как аргумент типа VTYPE_R8
в) в веб-клиентах тип аргумента может быть как VTYPE_I4, так и VTYPE_R8 независимо от значения числа.

4. В изолированном режиме запуска при передаче из внешней компоненты результатов типа "Число":

а) целые числа типов VTYPE_I1,VTYPE_I2, VTYPE_I4,VTYPE_UI1,VTYPE_UI2, VTYPE_UI4 передаются в платформу как 8-байтовое число со знаком
б) целые числа типов VTYPE_I8,VTYPE_UI8, VTYPE_INT,VTYPE_UINT передаются в платформу как Неопределено (значения не передаются)
в) Числа с плавающей точкой типов VTYPE_R4, VTYPE_R8 передаются как VTYPE_R8
По теме из базы знаний
Найденные решения
3. user1936660 20.12.24 10:06 Сейчас в теме
Здравствуй, дорогой дневничок!
Сегодня мне было лень писать тематическую статью и что бы это не забыть, я решил написать на форум.
parker_j; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. gml 19.12.24 22:48 Сейчас в теме
(1) Из вышеизложенного следуют выводы:

1. При передаче во внешнюю компоненту целых чисел тип аргумента всегда будет VTYPE_I4, поэтому следует избегать случаев передачи чисел меньше -2147483648 и больше +2147483647, чтобы избежать отсечения старших разрядов при обработке во внешней компоненте.

2. При передаче из внешней компоненты 4-байтовых беззнаковых чисел с единицей в старшем(31) разряде их представление в 1С в зависимости от режима запуска внешней компоненты может быть разным. У меня как раз такими оказались коды возврата. При анализе подобных кодов придётся добавлять дополнительные варианты в сравнение.
3. user1936660 20.12.24 10:06 Сейчас в теме
Здравствуй, дорогой дневничок!
Сегодня мне было лень писать тематическую статью и что бы это не забыть, я решил написать на форум.
parker_j; +1 Ответить
4. gml 20.12.24 19:38 Сейчас в теме
Последнее уточнение по результатам сегодняшних тестов:

3. В изолированном режиме запуска при передаче во внешнюю компоненту аргументов типа "Число" платформа 1С передает:

а) целые числа от -9223372036254775808 до +9223372036254775807 как аргумент типа VTYPE_I4. При этом передаются только младшие 4 байта числа (старшие 4 байта - всегда 0).

б) все остальные числа (очень маленькие, очень большие и дробные/смешанные) как аргумент типа VTYPE_R8
в) в веб-клиентах тип аргумента может быть как VTYPE_I4, так и VTYPE_R8 независимо от значения числа.

4. В изолированном режиме запуска при передаче из внешней компоненты результатов типа "Число":

а) целые числа типов VTYPE_I4, VTYPE_UI4 передаются в платформу в соответствии со своим типом (либо 4-байтовое со знаком, либо 4-байтовое без знака)
б) целые числа типов VTYPE_I1,VTYPE_I2,VTYPE_UI1,VTYPE_UI2,VTYPE_I8,VTYPE_UI8, VTYPE_INT,VTYPE_UINT передаются в платформу как Неопределено (значения не передаются)
в) Числа с плавающей точкой типов VTYPE_R4, VTYPE_R8 передаются как VTYPE_R8

PS Вроде всё. тему можно закрывать.
5. user1936660 20.12.24 23:49 Сейчас в теме
(4)
Вроде всё
Нет. Теперь тщательно проверь на другой версии платформы. Это важно.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот