Два знака неравенства в одном операторе

1. Gaz_admin 05.07.19 11:49 Сейчас в теме
Один не совсем хороший человек вставил в код вот такое условие:

Если Дата <> НачалоДня(Дата) <> 25200 Тогда

Описания в документации 1С и в интернете я не нашел.

Как правильно интерпретируется это условие?
По теме из базы знаний
Найденные решения
2. palsergeich 05.07.19 11:54 Сейчас в теме
Сначала выполнится
Дата <> НачалоДня(Дата) - результатом будет булево Истина или ложь
Потом выполнится (Истина|Ложь) <> 25200, где будет приведение типов 25200 -> Истина
3. palsergeich 05.07.19 11:55 Сейчас в теме
То есть результат по факту равен
Дата = НачалоДня(Дата)
4. palsergeich 05.07.19 11:57 Сейчас в теме
(3)
ТОчнее эквивалентен логическому выражению Дата = НачалоДня(Дата)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. spacecraft 05.07.19 12:33 Сейчас в теме
(1) это тоже самое, что и:
Если (Дата <> НачалоДня(Дата)) <> 25200 Тогда
Если Истина <> 25200 Тогда
Если 1 <> 25200 Тогда

По факту всегда будет давать Истина
10. palsergeich 05.07.19 14:48 Сейчас в теме
(6) На сколько я помню по правилам 1С правый операнд приводится к типу левого операнда, а не наоборот,
11. spacecraft 05.07.19 15:30 Сейчас в теме
(10)
На сколько я помню по правилам 1С правый операнд приводится к типу левого операнда, а не наоборот

Это про что конкретно?
В отличие от классических ЯП в 1С своя система правил приведения типов, которая не всегда соответствует стандартным.
Для примера:
Истина + 2 = 3
Истина - 1 = 0
Истина - 0 = 1
1 <> 2 <> 1 будет Ложь
1 <> 2 <> 3 будет Истина
Истина = 2 будет Ложь
Ложь = 2 будет Ложь
12. palsergeich 05.07.19 17:47 Сейчас в теме
(11) Хехе, Вы правы, оно приводит левый операнд к типу правого. Внезапно Оо.
И да,
Дата <> (НачалоДня(Дата) <> 25200
Всегда Истина
Признаю свою неправоту, не ожидал
2. palsergeich 05.07.19 11:54 Сейчас в теме
Сначала выполнится
Дата <> НачалоДня(Дата) - результатом будет булево Истина или ложь
Потом выполнится (Истина|Ложь) <> 25200, где будет приведение типов 25200 -> Истина
3. palsergeich 05.07.19 11:55 Сейчас в теме
То есть результат по факту равен
Дата = НачалоДня(Дата)
4. palsergeich 05.07.19 11:57 Сейчас в теме
(3)
ТОчнее эквивалентен логическому выражению Дата = НачалоДня(Дата)
5. rusdenol 05.07.19 12:29 Сейчас в теме
это читается так: "Если Дата <> (НачалоДня(Дата) <> 25200) Тогда"
singlych; +1 Ответить
7. Gaz_admin 05.07.19 12:38 Сейчас в теме
palsergeich, спасибо за разъяснение!

Теперь осталось выяснить, зачем этот код написан именно так. Что-то мне подсказывает, что это неспроста...
8. Fox-trot 158 05.07.19 12:42 Сейчас в теме
(7) это в рублях? долг? карточный? зп?
9. Gaz_admin 05.07.19 12:51 Сейчас в теме
(8) Просто изменения в конфигурации накапливались уже довольно продолжительное время, соответственно, писались разными людьми, но, тем не менее, в одном стиле и в понятных конструкциях. Откуда-то взялся левый чел, с которым был заключен договор на вполне определенных условиях, но тем не менее в рамках этих условий он постоянно что-то мутит и пытается качать права. Ну и код в его исполнении выглядит соответственно.
Оставьте свое сообщение

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