Истина ИЛИ Неопределено

1. Linx-p 18.06.20 11:24 Сейчас в теме
Здравствуйте коллеги. Наткнулся на почему-то неожиданную для меня особенность компиляции кода 1с83.
Под разными ролями пользователей выражение вида (Истина Или Неопределено) обрабатывается по разному. Например, под полными правами выражение возвращает значение типа булево, с другими ролями это выдает ошибку.
Подскажите, какие права в роли отвечают за такое поведение, или где смотреть?

PS
Да, косяк.
Под всеми правами Булево или Непределено отрабатывает одинаково.
Истина Или Неопределено возвращает Истина
Ложь Или Неопределено возвращает Ошибку.

Ложь или Неопределено=Истина ошибки не возвращает )

Чтоб не ошибки нужно заставлять разработчика не лениться, а дописывать в логических конструкциях: Флаг = ( А=Истина или Б=Истина );

Всем спасибо))
По теме из базы знаний
Найденные решения
19. Sashares 34 18.06.20 12:06 Сейчас в теме
(17)
вопрос почему под разными ролями обрабатывается по разному, где настраивать?

Обрабатывается для всех одинаково. Логика едина.

У пользователя с полными правами все заканчивается на вычислении первого выражения.
Для остальных пользователей - выполняется попытка вычислить остальные выражения и валится.



(17)
если А=Ложь, а Б=Неопределено что возвращается?

Ошибка, естественно.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. ZergKRSK 129 18.06.20 11:28 Сейчас в теме
(1) какую ошибку то выдает?
4. Linx-p 18.06.20 11:35 Сейчас в теме
(3) ошибку преобразования типов. Сейчас смоделирую )
Давно исправил и забыл, но интерес остался. Сейчас есть минутка задать вопрос
7. Linx-p 18.06.20 11:41 Сейчас в теме
(3)
Преобразование значения к типу Булево не может быть выполнено
5. Kovekh 18.06.20 11:36 Сейчас в теме
(1)А точно прям в коде "Истина ИЛИ Неопределено" или, может, эти значения возвращают какие-то другие функции, в которых могут быть запросы к полям, к которым у пользователя нет прав?
6. Linx-p 18.06.20 11:38 Сейчас в теме
(5) там выражение с переменными конечно, это рабочий код. под полными правами), а без полных ошибка
11. ZergKRSK 129 18.06.20 11:45 Сейчас в теме
(6) ну логично же что под ограниченными правами нет доступа к каким-то объектам метаданных. Допустим, какая-то функция не выполняется и не может вернуть тип Булево, а у вас проверка по типу Булево. Отсюда и ошибка. Тема создана ради темы.
12. Linx-p 18.06.20 11:51 Сейчас в теме
(5)
Код приблизительно такой:
Флаг = РольДоступна("ПолныеПрава") Или П1 Или Ф1;

Если значение п1 или ф1 будет Неопределено, то под полными правами все выражение приводится к булево, а без полных прав - ошибка преобразования типов.

Решается конечно легко так:
Флаг =РольДоступна("ПолныеПрава") Или П1=Истина Или Ф1=Истина;

Но интересует где настраивается такое поведение для разных ролей?
14. Sashares 34 18.06.20 11:58 Сейчас в теме
(12)При чем тут роли?
В 1С ленивое вычисление условий.
То есть если условие вида "А ИЛИ Б ИЛИ В", то если А = Истина, на этом вычисление заканчивается, т.к. этого достаточно. И не важно какие значения у Б и В.

И только если А = Ложь, то вычисляются следующие выражения условия.

Как раз то, что у вас и происходит.
У пользователя с полными правами все заканчивается на вычислении первого выражения.
Для остальных пользователей - выполняется попытка вычислить остальные выражения и валится.
17. Linx-p 18.06.20 12:04 Сейчас в теме
(14)
вопрос почему под разными ролями обрабатывается по разному, где настраивать?

согласен, что с ИСТИНА поспешил, я имел в виду тип данных,
но нужно было писать ЛОЖЬ )
если А=Ложь, а Б=Неопределено что возвращается?
19. Sashares 34 18.06.20 12:06 Сейчас в теме
(17)
вопрос почему под разными ролями обрабатывается по разному, где настраивать?

Обрабатывается для всех одинаково. Логика едина.

У пользователя с полными правами все заканчивается на вычислении первого выражения.
Для остальных пользователей - выполняется попытка вычислить остальные выражения и валится.



(17)
если А=Ложь, а Б=Неопределено что возвращается?

Ошибка, естественно.
21. Linx-p 18.06.20 12:10 Сейчас в теме
2. platonov.e 158 18.06.20 11:25 Сейчас в теме
может на это значение просто прав не хватает?
8. Linx-p 18.06.20 11:42 Сейчас в теме
(2)
а какие должны быть права?
9. platonov.e 158 18.06.20 11:43 Сейчас в теме
(8) вам нужно сперва понять что на какой то объект действительно прав не хватает. а потом посмотреть какие права нужны на него.
13. Linx-p 18.06.20 11:52 Сейчас в теме
(9)
там нет объектов. преобразование простых типов
18. platonov.e 158 18.06.20 12:05 Сейчас в теме
(13) ну это какой то объект базы или просто переменная?
10. user1357043 18.06.20 11:44 Сейчас в теме
(8)Ну так у вас у пользователя не хватает прав на вычисление значения "истина" или "неопределено". Скорее всего, можно в журнале посмотреть, на что именно не хватает прав этому пользователю.
Попробуйте в коде написать именно "Истина или Неопределено" и он вам отработает под любым пользователем.
15. Linx-p 18.06.20 12:00 Сейчас в теме
(10)
согласен, некорректно написал, Истина или Неопределено всегда вернет Истина
а вот Ложь или Неопределено ведет себя странно
16. Sashares 34 18.06.20 12:04 Сейчас в теме
(15)
а вот Ложь или Неопределено ведет себя странно

Даже комментировать не буду.. надеюсь вы поймете сами, какую чушь написали.
20. Linx-p 18.06.20 12:08 Сейчас в теме
(16)
меня просто интересует параметр, с которым под одной ролью:
А или Неопределено = А
а под другой:
А или Неопределено - ошибка преобразования
23. Sashares 34 18.06.20 12:12 Сейчас в теме
(20)
Нет такого параметра, это логика вычисления выражений.

Замените ИЛИ на И, тогда будут всегда вычисляться все выражения.

То есть "А И Неопределено" - всегда будет выдаваться ошибка преобразования, т.к. Неопределено к булево не приводится.
24. user1357043 18.06.20 12:17 Сейчас в теме
(15)Если Истина ИЛИ Неопределено, то значение Неопределено не проверяется и не выдает ошибки (сразу возвращается истина)
Если Ложь ИЛИ Неопределено, то Неопределено проверяется и возвращается ошибка.
1С так работает для оптимизации. Поскольку в операторе ИЛИ истина тогда, когда хотябы одно значение равно истине. Поэтому остальные вычислять нет необходимости.
Можно попробовать поставить Неопределено на первое место. Тогда ошибка будет всегда.
25. Linx-p 18.06.20 13:10 Сейчас в теме
(24)
да я вкурсе.
там было длинное выражение в котором была и проверка в т.ч. на ПолныеПрава, потому под полными правами, и еще какими-то, срабатывало )
а когда в конец дописали "или ещё_один_флаг", то кому-то стало плохо )
22. DenisCh 18.06.20 12:12 Сейчас в теме
Оставьте свое сообщение

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