1С 8 счет

Конструкция языка 1с условие

Условие служит для возможности определения разного поведения программы в зависимости от разных входных данных.
Условие довольно простая конструкция она начинается с оператора Если и заканчивается оператором КонецЕсли;. Между ними может быть ветвление. Веткой в статье называется блок кода образованный после оператора «Если» или операторов начинающихся с «Иначе». Сложность при чтении условий могут вызвать сложные и вложенные условия.

Все существующие операторы условия можно записать следующим образом:

Если <условие> Тогда
ИначеЕсли <условие> Тогда
Иначе
КонецЕсли;

Давайте сначала разберемся, что происходит при выполнении условия. При проверке значения условия программа приравнивает результат условия к значению типа булево и в зависимости от этого определяет заходить(Истина) в ветку или нет(Ложь). Например:

Сегодня = ДеньНедели(ТекущаяДата);
Если Сегодня = 6 Тогда
Сообщить(«Суббота»);
ИначеЕсли Сегодня = 7 Тогда
Сообщить(«Воскресенье»);
Иначе
Сообщить(«Трудовые будни»);
КонецЕсли;

Программа поочередно проверяет условия:
1. Если Сегодня — шестой день недели, то сообщить иначе перейти к следующему условию
2. Если Сегодня — седьмой день недели, то сообщить иначе перейти к следующему условию
3. При операторе Иначе ничего не проверяется, а выполняется следующий за ним код безусловно. Т.е. если условие не зашло ни в одну из предыдущих веток, то обязательно зайдет в эту.
Если условие выполняется то другие ветки не проверяются! Т.е. если программа заходит в ветку, то оставшиеся ветки до оператора КонецЕсли она пропускает.

Минимальная законченная конструкция условия выглядит так:

Если <условие> Тогда
КонецЕсли;

Остальные ветки пишутся по необходимости.

Если переменная содержит значение типа булево, то можно не сравнивать её со значением Ложь или Истина, а просто использовать в условии, например, так:

Сегодня = ДеньНедели(ТекущаяДата);
Выходной = (Сегодня > 5);
Если Выходной Тогда
Сообщить(«Выходной»);
Иначе
Сообщить(«Трудовые будни»);
КонецЕсли;

Также если переменная содержит число, то это можно использовать в условии, программа трактует значения чисел по следующему принципу: Ложь соответствует 0, остальные числа – Истина.

>Профессия — 1С

Условия в языке программирования 1С

рубрики: Язык программирования 1С | Дата: 5 Май, 2017

В любом языке программирования существуют операторы ветвления (условные операторы). Когда в зависимости от истинности некоторого условия выполняется один либо другой набор команд.

В языке программирования 1С этой цели служит конструкция

Если <Логическое выражение> Тогда //Набор команд 1 ИначеЕсли <Логическое выражение> Тогда //Набор команд 2 Иначе //Набор команд 3 КонецЕсли;

Алгоритм работы достаточно прост. По очереди проверяются логические выражения следующие за операторами Если и ИначеЕсли. Как только очередное логическое выражение принимает значение Истина выполняется набор команд, следующих за этим логическим выражением. Больше никаких проверок не делается и выполнение блока Если…КонецЕсли; на этом завершается. Если у всех логических выражений значение оказалось Ложь, будет выполнен набор команд, следующих за оператором Иначе.
Конструкция ИначеЕсли <Логическое выражение> Тогда может повторяться столько раз сколько необходимо. При этом она может вообще не использоваться как и оператор Иначе. То есть в простейшем случае мы имеем:

Если <Логическое выражение> Тогда //Набор команд КонецЕсли;

В логических выражениях могут применяться математические операторы сравнения (=, >, <, >=, <=, <>) и булевы операции (И, ИЛИ, НЕ). Важно понимать, что логическое выражение должно возвращать либо Ложь либо Истина.

И тогда становиться ясно, что в качестве него могут использоваться и булевы переменные и даже функции. Вот пара примеров:

&НаКлиенте Функция ПроверитьПрава() Возврат Истина; КонецФункции &НаКлиенте Функция ПолучитьКакоеТоЧисло() Возврат 1; КонецФункции &НаКлиенте Процедура ПримерыЛогическихВыражений() Отказ = Ложь; Если НЕ Отказ Тогда //Набор команд КонецЕсли; Если ПолучитьКакоеТоЧисло() = 1 Тогда //Набор команд КонецЕсли; Если ПроверитьПрава() Тогда //Набор команд КонецЕсли; КонецПроцедуры

А теперь рассмотрим одну особенность, связанную с использованием булевых операций. Допустим у нас есть вот такая конструкция:

Если <ЛогическоеВыражение_1> ИЛИ <ЛогическоеВыражение_2> Тогда

Совершенно очевидно, что если у нас ЛогическоеВыражение_1 = Истина, то проверять на истинность ЛогическоеВыражение_2 нет никакого смысла, т.к. в этом случае все равно ЛогическоеВыражение_1 ИЛИ ЛогическоеВыражение_2 = Истина. И начиная с версии 8.0 платформа так и поступает, т.е. последующие логические выражения будет вычисляться только в том случае, если уже вычисленные не позволяют однозначно определить результат в целом. Знание этого факта позволяет избежать ошибок и сократить количество кода.
В качестве примера обратимся к распространенной ситуации, когда у нас есть реквизит составного типа и нам надо проверить его на заполненность. Пусть у нас есть реквизит составного типа Контрагент, который может принимать тип Справочник.Физлица либо Справочник.Организации. На время этого примера забудем про функцию ЗначениеЗаполнено(). Как известно когда у нас еще не выбран тип составного реквизита, его значение равно Неопределено. Таким образом реквизит незаполнен, когда его значение неопределено либо пустая ссылка. И мы можем записать наше условие в двух вариантах:

// Вариант_1 Если Контрагент = Неопределено ИЛИ Контрагент.Пустая() Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = «Не выбран контрагент»; Сообщение.Сообщить(); КонецЕсли; // Вариант_2 Если Контрагент.Пустая() ИЛИ Контрагент = Неопределено Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = «Не выбран контрагент»; Сообщение.Сообщить(); КонецЕсли;

Так вот, корректно будет работать только первый вариант, потому что когда тип у нас еще не выбран и значение реквизита равно Неопределено для него не существует метода Пустая() и второй вариант в этом случае завершится с ошибкой, а в первом варианте платформа не будет проверять значение на пустую ссылку, если тип не определен, т.к. ей будет достаточно первого услови. Как видим, иногда от перестановки слагаемых результат очень даже меняется.

В некоторых случаях можно применять сокращенную запись конструкции с условием. Синтаксис ее следующий:

?(<Логическое выражение>, <ВыражениеЕслиИстина>, <ВыражениеЕслиЛожь>)

Как правило применяется, когда надо присвоить переменной разные значения в зависимости от выполнения какого-то условия. Также удобно применять при формировании динамических запросов. С ее помощью мы сможем, например, вот такой код:

Если Отказ Тогда ТекстСообщения = «Ошибка»; Иначе ТекстСообщения = «Операция завершена»; КонецЕсли;

записать всего одной строчкой:

ТекстСообщения = ?(Отказ, «Ошибка», «Операция завершена»);

1С 8 счет

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

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