[ Вопрос дня ] Как корректнее программно регулировать видимость реквизита на форме, через условие “Если” или через вычисление логического выражения?

Доброго дня, коллеги!

В разделе “Общие приемы и механизмы решения задач” курса Подготовка к аттестации 1С:Специалист по платформе 1С:Предприятие 8.3 встречаются любопытные вопросы. Так, слушатель приводит пример двух фрагментов кода. На первый взгляд две равнозначные конструкции, дающие одинаковый результат, но суть вычислений при этом совершенно разная.

Вопрос

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

Пример 1 – условие:

Если Объект.Вид = Перечисления.ВидыРасчета.Метод1 Тогда
    Элементы.УчетнаяЗапись.Видимость = Истина;
КонецЕсли

Пример 2 – без условия:

Элементы.УчетнаяЗапись.Видимость = Объект.Вид = ВидыРасчета.Метод1;

Вопрос следующий – как методологически писать более корректно?

Ответ

Здравствуйте! Можно использовать оба варианта. По эффективности они равноценны – условие будет проверено в любом случае, по одинаковым правилам. Второй вариант лаконичнее, но первый проще для восприятия.

Для улучшения восприятия я обычно во втором варианте заключаю условие в скобки, хотя это и необязательно:

Элементы.УчетнаяЗапись.Видимость = (Объект.Вид = ВидыРасчета.Метод1);

Важно также понимать, что в первом случае – оператор ветвления (Если), во втором – вычисление выражения (логического).

В первом варианте команда Элементы.УчетнаяЗапись.Видимость = Истина; будет выполнена только если истинно выражение

Объект.Вид = Перечисления.ВидыРасчета.Метод1

Во втором варианте присвоение значения объекту Элементы.УчетнаяЗапись.Видимость будет выполнено всегда.

Если какие-то действия нужно выполнить, только если условие истинно, следует использовать первый вариант – Сокращенный вариант оператора ЕСЛИ: ЕСЛИ … ТОГДА … КОНЕЦ.

Если нужно всегда присваивать объекту какое-то логическое значение (Истина или Ложь), следует использовать второй вариант (или полный вариант оператора ЕСЛИ: ЕСЛИ … ТОГДА … ИНАЧЕ … КОНЕЦ).

В Вашем примере изменение видимости для элемента формы УчетнаяЗапись во втором варианте произойдет всегда, а в первом – только при истинности условия

Объект.Вид = Перечисления.ВидыРасчета.Метод1

В приведенном примере с точки зрения логики выполнения команд эти два варианта не эквивалентны.

Выражение

Элементы.УчетнаяЗапись.Видимость = (Объект.Вид = ВидыРасчета.Метод1);

соответствует полной форме оператора ЕСЛИ:

Если Объект.Вид = Перечисления.ВидыРасчета.Метод1 Тогда
  Элементы.УчетнаяЗапись.Видимость = Истина;
Иначе
  Элементы.УчетнаяЗапись.Видимость = Ложь;
КонецЕсли

Нужно также учесть, что если переменная не объявлялась в секции Перем, то перед использованием она должна быть инициализирована. В противном случае возникнет исключение.

Если же переменная объявлена в секции Перем, но значение ей не присвоено, её значение – Неопределено.

Если используется второй вариант Переменная = (выражение), инициализация переменной производится всегда.

Если используется первый вариант ЕСЛИ условие ТОГДА Переменная = (выражение), инициализация переменной производится только если условие истинно. В этом случае нужно обеспечить, чтобы переменная перед использованием была инициализирована.

Это замечание относится к вычислению собственных переменных. При использовании встроенных объектов (как в данном примере: Элементы.УчетнаяЗапись.Видимость), они уже предварительно инициализированы.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.