Работа с числовыми аргументами функций и возвращаемыми значениями
При разработке внешних компонент 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
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
По теме из базы знаний
- Загрузка из EXCEL в 1С. com.sun.star.ServiceManager (LibreOffice/OpenOffice)
- NativeAPI. Внешние компоненты на С++ "для чайников"
- Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux
- MS Office Excel для пользователей. Подводные камни и полезные возможности
- 1С:Ассемблер. Немного летнего веселья!
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Из вышеизложенного следуют выводы:
1. При передаче во внешнюю компоненту целых чисел тип аргумента всегда будет VTYPE_I4, поэтому следует избегать случаев передачи чисел меньше -2147483648 и больше +2147483647, чтобы избежать отсечения старших разрядов при обработке во внешней компоненте.
2. При передаче из внешней компоненты 4-байтовых беззнаковых чисел с единицей в старшем(31) разряде их представление в 1С в зависимости от режима запуска внешней компоненты может быть разным. У меня как раз такими оказались коды возврата. При анализе подобных кодов придётся добавлять дополнительные варианты в сравнение.
1. При передаче во внешнюю компоненту целых чисел тип аргумента всегда будет VTYPE_I4, поэтому следует избегать случаев передачи чисел меньше -2147483648 и больше +2147483647, чтобы избежать отсечения старших разрядов при обработке во внешней компоненте.
2. При передаче из внешней компоненты 4-байтовых беззнаковых чисел с единицей в старшем(31) разряде их представление в 1С в зависимости от режима запуска внешней компоненты может быть разным. У меня как раз такими оказались коды возврата. При анализе подобных кодов придётся добавлять дополнительные варианты в сравнение.
Последнее уточнение по результатам сегодняшних тестов:
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 Вроде всё. тему можно закрывать.
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 Вроде всё. тему можно закрывать.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот