Конструкции встроенного языка
Текст программного модуля записывается на встроенном языке с использованием конечного набора конструкций и ключевых слов.
Конструкции встроенного языка могут записываться на русском или английском языке, кроме нескольких слов, для которых нет подходящих русских эквивалентов, например, Null.
Операторы встроенного языка должны разделяться точкой с запятой («;»), но после ключевых слов КонецПроцедуры или КонецФункции точка с запятой не ставится, поскольку это не операторы, а операторные скобки.
Ниже описаны основные конструкции встроенного языка 1C:Предприятия 8.0.
Условия
Конструкция «Если … Тогда»
Оператор Если предназначен для проверки логических выражений и полностью аналогичен подобным операторам в других языках программирования. Когда результат логического выражения равен Истина, то выполняется блок операторов после ключевого слова Тогда. Оператор Если может иметь ветви ИначеЕсли, а также ветвь Иначе.
Примеры:
-
//1-й пример -
Если Состав.Количество()=0 Тогда -
Предупреждение("Не указано ни одной строки!"); -
КонецЕсли; -
//2-й пример -
Eсли Сотр.Категория = Перечисления Категории.Совместитель Тогда -
//обработаем как совместителя -
Иначе -
//обычный сотрудник -
КонецЕсли; -
-
//3-й пример -
Если выбор = 1 Тогда -
Сообщить("Выбран 1-й пункт"); -
ИначеЕсли выбор = 2 или выбор = 3 Тогда -
Сообщить("Выбран 2-й или 3-й пункт"); -
Иначе -
Сообщить("Обработка этого пункта не предусмотрена"); -
КонецЕсли;
Ключевые слова ИначеЕсли, Иначе и КонецЕсли желательно записывать с новой строки. Следующий пример показывает нежелательное форматирование оператора Если:
-
//так делать не рекомендуется! -
Если Состав. Количество () = 0 Тогда ... Иначе ... КонецЕсли;
При таком форматировании нарушается блочная структура программы, не работают группировки конструкций встроенного языка в редакторе модулей, усложняется понимание программы.
Если результат выражения имеет тип «булево» и требуется сравнить его со значением Истина, то следующие конструкции полностью эквивалентны:
-
Если Выборка.Следующий() = Истина Тогда //так не рекомендуется -
Если Выборка.Следующий() Тогда //это рекомендуемый вариант
Логический оператор НЕ позволяет инвертировать результат логического выражения и подобным же образом заменить сравнение со значением Ложь. Следующие конструкции делают одно и то же:
-
Если ВыбФирма.Пустая() = Ложь Тогда
-
Если НЕ ВыбФирма.Пустая() Тогда
Конструкция «?(…, …, …)»
Данная конструкция позволяет записать условный оператор в одну строку и вычислить его как выражение.
Пример:
Коментарий = ? (Количество=0, "Пусто", Строка (Количество)+" ш т . ");
Обычно эта конструкция применяется в выражениях и работает как следующая функция:
-
Функция СокращенноеЕсли(РезультатУсловия,выражение1,выражение2)
-
Если РезультатУсловия Тогда //Истина -
Возврат выражение!; -
Иначе //Ложь -
Возврат выражение2; -
КонецЕсли; -
КонецФункции
Логические выражения
В операторе Если, конструкциях «?(…)», а также в цикле Пока применяются логические выражения, т.е. такие, результат которых имеет тип «булево» с двумя значениями: Истина и Ложь.
В логических выражениях могут применяться логические сомножители НЕ, И, ИЛИ (в порядке приоритета). Для задания правильного порядка вычисления рекомендуется расставлять скобки, например:
-
//следующую конструкцию: -
Если НЕ Страна = ВыбСтрана ИЛИ Цена > 100 И Цена < 1000 Тогда -
//лучше записать так: -
Если (НЕ Страна = ВыбСтрана) ИЛИ (Цена > 100 И Цена < 1000) Тогда
В 1C: Предприятии 8.0 введено сокращенное вычисление логических выражений. Это означает, что если по части выражения можно определить конечный результат, тогда остаток логического выражения не вычисляется.
Например:
-
Если Цена > 10 И Цена < 20 Тогда
При вычислении результата составного логического выражения проверяется первое условие «Цена > 10». Допустим, цена равна 5, тогда первое условие не выполняется (дает значение Ложь) и следующую часть вычислять уже не нужно, поскольку в любом случае результат всего выражения будет Ложь.
Другой пример:
-
Если Цена = 10 ИЛИ Цена = ПолучитьЦенуСоСкидкой Тогда
Сначала проверяется первое условие «Цена = 10». Допустим, оно выполняется (дает значение Истина), тогда следующую часть условия можно не вычислять, поскольку результат всего выражения будет Истина, независимо от второго условия. Обратите внимание, что в этом случае функция ПолучитьЦенуСоСкидкой не будет вызвана! Если по проектной логике она должна вызываться в любом случае, тогда это следует сделать до условия, а результат запомнить в переменную, например:
-
ЦенаСоСкидкой = ПолучитьЦенуСоСкидкой();
-
Если Цена = 10 ИЛИ Цена = ЦенаСоСкидкой Тогда
Итак, при сокращенном вычислении логических выражений применяются следующие правила:
-
Если один из сомножителей оператора И равен Ложь, то конечный результат выражения будет Ложь, независимо от значения других сомножителей.
-
Если один из сомножителей оператора ИЛИ равен Истина, то конечный результат выражения будет Истина, независимо от значения других сомножителей.