Добавить в корзинуПозвонить
Найти в Дзене

13. Инструкция "Если"

Между началом программы и её завершением существует много разных путей, по которым может пойти исполнение программы. Для этого есть много разных причин. Например, это зависит от того, какие данные
уже есть в программе. Если есть все необходимые данные, то исполнение пойдёт по одному
пути. Если каких-то данных не хватает, то по другому пути.
Также это зависит от того, что вы хотите получить в результате. Если из своего электронного дневника вы хотите узнать, будет завтра урок математики или нет, то это будет
один путь, простой. А если вы хотите получить расписание уроков на всю неделю с указанием кабинетов, преподавателей и того, что задано, то это будет другой путь, сложный.
Потому что программе нужно будет обойти много разных мест и собрать для вас всю
информацию, которую вы просите.
Именно для того, чтобы направить исполнение программы по одному или по другому
пути, существует инструкция Если Инструкция "Если" позволяет выделить несколько инструкций, которые будут выполняться не все

Между началом программы и её завершением существует много разных путей, по которым может пойти исполнение программы.

Для этого есть много разных причин. Например, это зависит от того, какие данные
уже есть в программе. Если есть все необходимые данные, то исполнение пойдёт по одному
пути. Если каких-то данных не хватает, то по другому пути.
Также это зависит от того, что вы хотите получить в результате. Если из своего электронного дневника вы хотите узнать, будет завтра урок математики или нет, то это будет
один путь, простой. А если вы хотите получить расписание уроков на всю неделю с указанием кабинетов, преподавателей и того, что задано, то это будет другой путь, сложный.
Потому что программе нужно будет обойти много разных мест и собрать для вас всю
информацию, которую вы просите.
Именно для того, чтобы направить исполнение программы по одному или по другому
пути, существует инструкция Если

Инструкция "Если" позволяет выделить несколько инструкций, которые будут выполняться не всегда, а только тогда, когда в результате вычисления логического выражения получается
Истина.
Слова Если, Тогда и КонецЕсли являются обязательными в этой инструкции. Логическое выражение пишется между словами Если и Тогда. А КонецЕсли показывает, где
заканчиваются инструкции, выполнение которых зависит от условия.
Чтобы посмотреть, как это работает, сделайте небольшой пример. Создайте переменную и запишите в неё свой возраст. А затем создайте другую переменную, ЯИдуВДетскийСад, и присвойте ей значение Истина. Но эту переменную создайте только в том случае,
если вы ещё не достигли школьного возраста. Чтобы не запутаться, будем считать, что
школьный возраст начинается с 7 лет.
Когда вы сделаете свой пример, сравните его с тем, что на рисунке

-2

Установите точку останова на строке Если, запустите 1С:Предприятие в режиме отладки и посмотрите значение выражения МойВозраст < 7 (Shift+F9)

Значение выражения «МойВозраст < 7»
Значение выражения «МойВозраст < 7»

Вы увидите, что оно равно Ложь. И это правильно. Ваш возраст больше, чем 7 лет.
Раз выражение ложно, значит, платформа должна пропустить все инструкции, которые написаны внутри инструкции Если. Проверьте это с помощью пошагового исполнения
(F11). Сделайте один шаг

Один шаг до исполнения
Один шаг до исполнения

Платформа перейдёт на строку КонецЕсли. А если вы шагнёте ещё
раз, то она остановится на строке КонецПроцедуры. При этом значение переменной ЯИдуВДетскийСад будет Неопределено, потому что эта инструкция не выполнялась и такая
переменная даже не создавалась.

А теперь познакомьтесь с тем, как поведёт себя платформа в том случае, когда выражение истинно. Для этого вы не будете изменять текст программы. Вы воспользуетесь
возможностью изменения значений переменных прямо в процессе отладки.
Чтобы это сделать, вам потребуется сначала перезапустить отладку. Для этого выполните команду Отладка — Перезапустить

Перезапустить отладку
Перезапустить отладку

После того как отладка перезапустится, исполнение снова остановится на строке Если
Откройте локальные переменные (если это окно у вас закрыто).
Дважды щёлкните мышью по ячейке со значением 25

Изменение значения переменной
Изменение значения переменной

Она перейдёт в режим редактирования. Введите 6 и нажмите Enter.
С этого момента значение переменной МойВозраст будет равно 6. А вы можете продолжать отладку так же, как и раньше.
Посмотрите значение выражения МойВозраст < 7. Теперь оно будет равно Истина

Значение выражения «МойВозраст < 7»
Значение выражения «МойВозраст < 7»

Сделайте один шаг. Исполнение зайдёт «внутрь» инструкции Если

Один шаг исполнения
Один шаг исполнения

если вы сделаете ещё пару шагов, вы дойдёте до конца процедуры. А значение
переменной ЯИдуВДетскийСад будет равно Истина.
Подробнее
Подробнее вы можете прочитать про изменение значений переменных при отладке в документации «Руководство разработчика 8.3. Раздел 28.2.10. Изменение
значения переменной».
До сих пор вы рассматривали самую простую форму инструкции Если. На самом деле
она может быть более сложной. Смотрите.
В вашем примере «особенные» действия выполняются только в том случае, когда ваш
возраст меньше 7 лет. Но представьте, что вам нужно принять решение из двух вариантов.
Если меньше 7 лет, вы идёте в детский сад. А во всех других случаях вы идёте в школу.
Как это записать на встроенном языке?
Оказывается, очень просто. Для этого используется ключевое слово Иначе

МойВозраст = 25;
Если МойВозраст < 7 Тогда
ЯИдуВДетскийСад = Истина;
Иначе
// Инструкции, которые будут выполнены во всех остальных случаях
КонецЕсли;

Доработайте пример так, чтобы в результате его работы у вас создавались две переменные: ЯИдуВДетскийСад и ЯИдуВШколу. И чтобы они принимали правильные значения
(Истина или Ложь) в зависимости от возраста, указанного в переменной МойВозраст.
Сравните свой результат с тем, что показано на рисунке

Доработанный пример
Доработанный пример

Запустите 1С:Предприятие в режиме отладки и проверьте по шагам правильность работы примера для разных значений возраста. Изменяйте возраст прямо в процессе отладки.
Очень часто в инструкции Если анализируется не одно, а несколько условий. Например, в одно прекрасное утро вы проснулись и вспомнили, что вам нужно идти учиться.
Но вы не помните, куда именно: в детский сад, в школу или в институт.
Зато вам известны правила. До 7 лет нужно идти в детский сад. После детского сада
нужно идти в школу. Учиться в школе заканчивают в 18 лет. А в 19 лет поступают в
институт.
Чтобы записать этот алгоритм на встроенном языке, вам понадобится ещё одно ключевое слово — ИначеЕсли

МойВозраст = 25;
Если МойВозраст < 7 Тогда
ЯИдуВДетскийСад = Истина;
ЯИдуВШколу = Ложь;
ИначеЕсли Тогда // Условие, при котором нужно идти в школу
ЯИдуВДетскийСад = Ложь;
ЯИдуВШколу = Истина;
Иначе
КонецЕсли;

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

-10

В режиме отладки пройдите по разным веткам инструкции Если и посмотрите, как
она работает.
Вы увидите, что выражения, которые указаны в инструкции Если, вычисляются и анализируются по очереди. В том порядке, в котором они написаны. Как только попадается
истинное выражение, выполняется соответствующая ветка инструкции Если. После этого
исполнение переходит на КонецЕсли. То есть инструкции, расположенные в тех ветках,
где выражение было ложно, или в тех ветках, до которых проверка выражений не дошла,
просто не выполняются.
В этом заключается особенность инструкции Если, о которой нужно помнить и которую нужно учитывать. Если вы откроете локальные переменные, то увидите, что после
выполнения примера переменная ЯИдуВИнститут может оказаться не определена. Например, если ваш возраст равен 15

Переменная «ЯИдуВИнститут» не определена
Переменная «ЯИдуВИнститут» не определена

если возраст равен 20, то не определены окажутся переменные ЯИдуВДетскийСад
и ЯИдуВШколу

Не определены переменные «ЯИдуВДетскийСад» и «ЯИдуВШколу»
Не определены переменные «ЯИдуВДетскийСад» и «ЯИдуВШколу»

В «живой» программе вы наверняка будете создавать подобные переменные не
просто так, а для того чтобы использовать их в дальнейшем. И если какой-то из этих
переменных не окажется, ваша программа работать не сможет.
Какой выход из этой ситуации? Нудно и дотошно в каждой ветке инструкции Если
прописывать создание всех переменных, которые вам могут понадобиться? Нет.
Есть гораздо более простое и удобное решение. Прямо перед инструкцией Если вы
создаёте все переменные, которые вам понадобятся. И присваиваете им некоторое стандартное значение — значение «по умолчанию». Например, Ложь.
А дальше, в ветках инструкции Если, вы меняете значения только тех переменных,
которым это действительно нужно. Посмотрите пример на рисунке

Другой вариант примера
Другой вариант примера

Сделайте этот пример в своей конфигурации и посмотрите, как он работает.

При любых значениях возраста будут существовать все переменные. И они будут иметь
правильные значения.

 Все переменные определены
Все переменные определены

Задание 3.24
Вы с другом каждый день играете в игру через Интернет. В будний день родители
разрешают вам играть только один час. В выходные дни вы можете играть по
4 часа. Используя переменную НомерДняНедели, вычислите, сколько часов вы
можете играть с другом в выбранный день. Результат поместите в переменную
ВремяДляИгры.
Задание 3.25
В задании 3.24 нужно учесть, что номер дня недели может быть задан с ошибкой.
В случае ошибки ваша программа должна вернуть результат 0.
Задание 3.26
Супермаркет работает с 9 часов утра до 8 часов вечера. Вам нужно сходить в
супермаркет и купить кефир. Если кефира не будет, то ряженку. Если не будет ни
того, ни другого, тогда нужно зайти в круглосуточный магазин и купить молоко,
если оно там есть.
Используйте переменные ЕстьКефир, ЕстьРяженка, ЕстьМолоко и ТекущийЧас.
Название своей покупки в виде строки поместите в переменную МояПокупка.