1c-syntax / bsl-language-server

Реализация Language Server Protocol для языка 1C (BSL)
https://1c-syntax.github.io/bsl-language-server
Other
307 stars 105 forks source link

[NEW] Многократный вызов функций ТекущаяДатаСеанса (ТекущаяДата) в рамках одного метода #1521

Open artbear opened 3 years ago

artbear commented 3 years ago

Описание проблемы, ошибки, которую надо диагностировать

Следует избегать в коде одной процедуры (функции) многократного обращения к функции ТекущаяДатаСеанса (ТекущаяДата), так как возвращаемые значения будут отличаться друг от друга.

Неправильно

ДатаПоследнегоОповещения = ТекущаяДатаСеанса();
ДатаСледующегоОповещения = РассчитатьДату() + ТекущаяДатаСеанса();

Правильно использовать ранее рассчитанные дату и время:

ДатаПоследнегоОповещения = ТекущаяДатаСеанса();
ДатаСледующегоОповещения = РассчитатьДату() + ДатаПоследнегоОповещения;

связанные ишузы по методам ТекущаяДата, ТекущаяДатаСеанса

Ссылка на источник, подтверждающее нарушение либо обоснование наличия проблемы

https://its.1c.ru/db/v8std/content/643/hdoc

Параметры диагностики

Тип Статья на русском

Важность Статья на русском

Тэги Статья на русском

Время на исправление (минут)

1 минута

Дополнительная информация

asosnoviy commented 3 years ago
НачалоЗамера = ТекущаяДатаСеанса();
ОкончаниеЗамера = ТекущаяДатаСеанса();
НачалоЗамера = ТекущаяДатаСеанса();
ВремяВыполнения = ТекущаяДатаСеанса() - НачалоЗамера;
artbear commented 3 years ago

Да, в случае замеров нужно исключение, но подобных замеров все-таки не так много. И в стандарте 1С об этом ни слова (

zeegin commented 3 years ago
НачалоЗамера = ТекущаяДатаСеанса();
ОкончаниеЗамера = ТекущаяДатаСеанса();
НачалоЗамера = ТекущаяДатаСеанса();
ВремяВыполнения = ТекущаяДатаСеанса() - НачалоЗамера;

Пример знатный, но плохо когда в одном методе делается несколько замеров. Ведь замеряют обычно ключевые операции, а вызов нескольких ключевых операций в одном методе противоречит определению ключевой операции.

Либо это какие-то частные замеры, которые тоже стоит разделить на пару методов.