Имя: Пароль:
1C
1С v8
Булево("Да") - ошибка преобразования
0 Chameleon1980
 
30.05.23
09:39
Привет всем.
До недавнего времени свято верил в Булево("Да")
Но истина оказалась другой.

Имеем две базы почти идентичные
платформа одна и та-же: 1С:Предприятие 8.3 (8.3.21.1674)
ОС одна и та-же

на одной базе выполнение кода Булево("Да") = Истина
на другой - Булево("Да") приводит к ошибке преобразования типа

вангую, что где-то в настройках конфы?
может кто навскидку подсказать, куда можно посмотреть?

Вопрос очень важный.
1 Волшебник
 
30.05.23
09:46
Не пытайтесь преобразовать строку в булево. Используйте настоящее булевое значение Истина или Ложь.

Если нужно преобразовать строку, то делайте так:

БулевоеЗначение = (значение = "Да");
2 Волшебник
 
30.05.23
09:48
(0) Конфигуратор / Администрирование / Региональные установки
снять флаг "Использовать системные", задать "Логическое Истина" и "Логическое Ложь"
3 Dmitry1c
 
30.05.23
10:23
(0) что это вообще?
4 Bigbro
 
30.05.23
10:53
это попытки использовать Да/Нет вместо Истина/Ложь..
с разной степенью успешности.
5 Donkey_hot
 
30.05.23
11:33
(4) Это даже печальнее по сравнению с использованием для этих целей нуля и единицы.
6 DrZombi
 
30.05.23
12:09
Помница в 7.7 вообще особо не доверяли 1С :)
7 rudnitskij
 
30.05.23
17:20
(0) Если вы брезгуете писать ИСТИНА или ЛОЖЬ - преобразуйте  с помощью Булево() цифры. Там ноль преобразует в ЛОЖЬ, а все цифры в истину, и от региональных установок ничего не зависит
8 eddy_n
 
31.05.23
07:32
(7) Верно подмечено. Можно не записывать Количество() > 0. Достаточно Количество().
9 НафНаф
 
31.05.23
09:08
(7) числа
10 Chai Nic
 
31.05.23
09:14
(7) А это документировано, такое преобразование? Если нет, то в очередном релизе платформы может сломаться.
11 Chai Nic
 
31.05.23
09:15
(0) Но зачем? Не могу представить, когда это может пригодиться.
12 KJlag
 
31.05.23
09:16
(10)
Булево (Boolean)
Синтаксис:
Булево(<Значение>)
Параметры:
<Значение> (обязательный)
Тип: Число, Булево, Строка.
Исходное значение.
Возвращаемое значение:
Тип: Булево.
Полученное значение.
Описание:
Преобразует полученный параметр в значение типа Булево.
Преобразование числа к типу Булево производится по следующим правилам:
0 преобразуется в Ложь;
остальные значения преобразуются в Истина.
13 Chai Nic
 
31.05.23
09:19
(12) Отсюда вывод, что любая строка, в том числе "0" - будет восприниматься как Истина. А число 0 - Ложь.
Но опять же не понятно, нафига всё это?
14 Fedor-1971
 
31.05.23
09:53
(13) Платформа 8.3.19.1522 не совсем такая логика
Булево(0) = Ложь
Булево(цифра не 0) = Истина
Булево("А") - ошибка преобразования
Булево("истина") = Истина

таки, корректно преобразуются только числа и строки "Истина", "Ложь", "Да", "Нет", любая другая строка = ошибка преобразования

(8) по уму, и для души, корректнее писать:  НЕ Количество() = 0  
т.е. Количество() вернёт цифру, а проверка оной на "НЕ 0" займет 1 такт процессора, а "> 0", если правильно помню, 3 такта
Преобразование Булево(Количество()) - добавляет накладные расходы на вызов функции

На большом потоке проверок можно оптимизировать время работы кода на минуты, но проблема в том, что сейчас на это не обращают внимание при разработке
15 KJlag
 
31.05.23
10:00
(13)
там это относится к числам:
Преобразование ЧИСЛА к типу Булево производится по следующим правилам:
  0 преобразуется в Ложь;
  остальные значения преобразуются в Истина.

как происходит преобразование строки не вкурсе, особо это не юзал.

скорее всего как говорит (14)
16 Андрюха
 
31.05.23
11:20
(1) БулевоеЗначение = (СтрСравнить(Значение, "Да") = 0);
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший