Умножить число на булево

1. Vlan 36 16.11.23 15:10 Сейчас в теме
Задался я целью укоротить функцию в конфигурации, которая возвращает ближайшую дату дня рождения клиента от даты продажи. И как-то незаметно дошел до маразма... такого кода
БлижайшаяДата = Дата(Год(ДатаПродажи)+1*(ДатаПродажи-Дата(Год(ДатаПродажи),Месяц(ДеньРождения),День(ДеньРождения))>0),Месяц(ДеньРождения),День(ДеньРождения));

То есть я перемножаю 1 на результат сравнения (булево). Вопрос: допустимо ли такое на практике?
По теме из базы знаний
Найденные решения
16. Vlan 36 17.11.23 07:36 Сейчас в теме
В общем, для себя решил не использовать недокументированные возможности, дабы избежать рисков. Есть не менее полезные функции, которые к тому же нагляднее.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. antz 16.11.23 15:16 Сейчас в теме
Быстрее было попробовать уже) В принципе, допустимо, истина преобразуется в 1, ложь - в 0.
4. Vlan 36 16.11.23 15:18 Сейчас в теме
(2) То, что работает, я конечно же проверил. Дело в "правилах хорошего тона". Можно или нельзя? Вдруг выстрелит где-то подвохом?
3. soft_wind 16.11.23 15:18 Сейчас в теме
используйте команду
?(Булево, Занч1, Знач2)
5. Vlan 36 16.11.23 15:20 Сейчас в теме
(3) Спасибо, тоже вариант
6. soft_wind 16.11.23 15:27 Сейчас в теме
(5) при умножении на булево происходить неявное преобразование
Истина = 1
Ложь = 0

конечно можно пользоваться, но вот читаемость кода при этом становится ...
7. Vlan 36 16.11.23 15:30 Сейчас в теме
(6) Это был спортивный интерес. Ваш вариант нагляднее, но мой чуть короче. Видели бы вы, сколько кода изначально в этой функции! Там сравниваются года, потом месяцы, потом дни :-)
12. user1880116 16.11.23 20:09 Сейчас в теме
(7)
но мой чуть короче
Ты свои выкрутасы с коротким кодом потом сам же сопровождать и замучаешся. Через месяца три посмотришь на свой код, и будешь вопросы задавать - что за дебил эту непонятную херь написал?

Не выпендривайся и пиши как тебе ниже предложили:
БлижайшаяДата = Дата(Год(ДатаПродажи), Месяц(ДеньРождения), День(ДеньРождения));

Если БлижайшаяДата < ДатаПродажи Тогда
    // Пропустили в этом году, отметим в следующем.
    БлижайшаяДата = ДобавитьМесяц(БлижайшаяДата, 12);
КонецЕсли;
14. Vlan 36 16.11.23 22:02 Сейчас в теме
(12)Можно построчно переменным каждый блок присвоить для наглядности. Вопрос был не в этом.
PS ДобавитьМесяц() тоже записал.
9. user856012 14 16.11.23 16:05 Сейчас в теме
(6)
при умножении на булево происходить неявное преобразование
...пока программисты фирмы 1С в очередной версии платформы не решат, что это надо отменить. Или даже не решат, а оно само так выйдет, побочным эффектом от какой-нибудь новой рюшечки.

А поскольку преобразование "неявное", то и претензий предъявить нельзя будет! ;-)
8. soft_wind 16.11.23 15:45 Сейчас в теме
(7) кода может быть и чуть побольше (это не сильно страшно)
если он при этом более удобочитаемый

например, такой вариант
ГодП	= Год(ДатаПродажи);
месяцР	= Месяц(ДеньРождения);
ДеньР	= День(ДеньРождения);
ДельтаГод = ?(ДатаПродажи > Дата(ГодП, МесяцР, ДеньР), 1, 0);

БлижайшаяДата = Дата(ГодП + ДельтаГод, МесяцР, ДеньР);

Показать
10. soft_wind 16.11.23 16:14 Сейчас в теме
(8) или такой пример
БлижайшаяДата = Дата(Год(ДатаПродажи), Месяц(ДеньРождения), День(ДеньРождения));
БлижайшаяДата = ДобавитьМесяц(БлижайшаяДата, ?(ДатаПродажи > БлижайшаяДата, 12, 0));
11. starjevschik 16.11.23 20:04 Сейчас в теме
а с 29 февраля норм работает?
13. user1880116 16.11.23 21:13 Сейчас в теме
15. Vlan 36 16.11.23 22:03 Сейчас в теме
(11) Там еще возможность пустой даты нужно учитывать. Это уже нюансы.
16. Vlan 36 17.11.23 07:36 Сейчас в теме
В общем, для себя решил не использовать недокументированные возможности, дабы избежать рисков. Есть не менее полезные функции, которые к тому же нагляднее.
Оставьте свое сообщение

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