- •Режим отладки
- •Добавление данных
- •Объект данных
- •Объект конфигурации описывает, как будут выглядеть его данные
- •Интерфейс
- •Что такое формы?
- •Представления объекта конфигурации в интерфейсе
- •Наименование и код
- •Реквизиты
- •Командный интерфейс раздела
- •Ввод по строке
- •Добавление формы
- •Редактор формы
- •Изменение формы списка
- •Изменение формы объекта
- •3. Встроенный язык
- •Простые типы Почему текст разноцветный
- •Какие бывают инструкции
- •Инструкция присваивания
- •Переменная
- •Точки останова и просмотр значений
- •Изменение значений переменных
- •Контекстная подсказка
- •Выбор имени для переменной
- •Выражение
- •Арифметические операции
- •Операции со строками
- •Тип «Дата» и операции с датами
- •Тип «Булево» и логические операции
- •Булевы операции
- •Инструкция «Если»
- •Красивая программа
- •Инструкция «Цикл»
- •Функции
- •Контекст и область видимости
- •Процедуры
- •Чтение и отладка процедур и функций
Булевы операции
А сейчас можно познакомиться с самыми интересными логическими операциями. Кроме операций сравнения есть еще группа логических операций, которые называются булевы операции.
Если операции сравнения можно было выполнять (в основном) над числами, строками и датами, то булевы операции выполняются только со значениями типа Булево. То есть со значениями Истина и Ложь.
Пока что вам трудно представить, зачем это может понадобиться. Но сейчас на нескольких примерах вы сразу все поймете.
Для этих примеров вам понадобится записывать булевы значения прямо в тексте программы, то есть использовать литералы. Так вот, литералы типа Булево выглядят очень просто. Значение Истина обозначается Истина, а значение Ложь обозначается Ложь.
Например, если вы хотите создать переменную, которая будет описывать погоду за окном, вы можете написать так (рис. 3.81).
Рис. 3.81. Литерал значения «Истина»
А если в другой переменной вы хотите уточнить, есть на улице дождь или нет, вы можете написать так (рис. 3.82). Попробуйте и посмотрите, чему равны переменные.
Рис. 3.82. Литерал значения «Ложь»
Обратите внимание, что платформа раскрашивает слова Истина и Ложь красным цветом. Потому что это специальные зарезервированные слова. И это значит, что переменную с таким именем, если вам вдруг захочется, создать нельзя.
|
ПОДРОБНЕЕ Полный список зарезервированных слов вы можете посмотреть в документации «Руководство разработчика 8.3. Раздел 4.2.4.6. "Зарезервированные слова"». |
Чтобы познакомиться с первой булевой операцией, создайте две переменные: ЯУмеюПлавать и РядомЕстьМоре. Задайте им те значения, которые есть на самом деле. А в книге, для примера, я присвою им значение Истина (рис. 3.83).
Рис. 3.83. Переменные «ЯУмеюПлавать» и «РядомЕстьМоре»
Теперь вам нужно с помощью логической операции узнать, будете вы плавать в море или нет.
Сначала попробуйте сказать это обычными словами. Наверное, получится что-то вроде «если я умею плавать и если рядом есть море, то тогда я буду плавать в море».
А теперь посмотрите (рис. 3.84), как эта же фраза выглядит на встроенном языке.
Рис. 3.84. Операция «И»
Чтобы сказать то же самое на встроенном языке, используется операция И. Как она работает, вы можете проверить сами на этом примере, изменив значения переменных.
Плавать в море вы будете только в том случае, когда оно есть рядом и вы умеете плавать. Если моря рядом нет, то плавать просто негде. А если вы не умеете плавать, то у вас тоже ничего не получится. Это очень опасно, вы можете утонуть. Ну, а если и моря нет, и плавать вы не умеете, то тем более поплавать в море вам не удастся.
|
Итак, операция И возвращает значение Истина только в том случае, когда оба операнда имеют значение Истина. Во всех остальных случаях она возвращает значение Ложь. |
Теперь решите другую задачу. Создайте две переменные УМеняЕстьЛодка и УМеняЕстьПлот. Можете задать им любые значения. А в книге, для примера, я присвою им значение Истина (рис. 3.85).
Рис. 3.85. Переменные «УМеняЕстьЛодка» и «УМеняЕстьПлот»
Теперь вам нужно с помощью логической операции узнать, сможете вы переплыть через озеро или нет.
Сначала попробуйте сказать это обычными словами. Наверное, получится что-то вроде «если у меня есть плот или лодка, то я могу переплыть через озеро».
А теперь посмотрите (рис. 3.86), как эта же фраза выглядит на встроенном языке.
Рис. 3.86. Операция «ИЛИ»
Чтобы сказать то же самое на встроенном языке, используется операция ИЛИ. Как она работает, вы можете проверить сами на этом примере, изменив значения переменных.
Если у вас есть лодка, вы можете переплыть через озеро? Да.
А если у вас не лодка, а плот – тогда сможете? Да, сможете.
А если у вас есть и лодка, и плот? Конечно! Даже два раза! Один раз на лодке, а другой – на плоту (шутка)!
А в каком случае вам не удастся переплыть через озеро? Правильно. Когда у вас нет ни лодки, ни плота.
|
Итак, операция ИЛИ работает аналогично операции И, только в отношении значения Ложь. Она возвращает значение Ложь только в том случае, когда оба операнда имеют значение Ложь. Во всех остальных случаях она возвращает значение Истина. |
Теперь усложните свой пример и познакомьтесь с тем, что в одном выражении могут использоваться сразу несколько булевых операций.
Создайте три переменные: ЯУмеюПлавать, РядомЕстьМоре и РядомЕстьБассейн. Задайте им те значения, которые есть на самом деле. А в книге я снова не буду усложнять и присвою им значение Истина (рис. 3.87).
Рис. 3.87. Переменные «ЯУмеюПлавать», «РядомЕстьМоре» и «РядомЕстьБассейн»
А вопрос, решением которого вы займетесь, будет практически тем же самым. Чему будет равна переменная ЯБудуПлавать?
Если вы будете отвечать словами, то скажете: «Я буду плавать, если я умею плавать и рядом есть море или бассейн». Попробуйте записать это на встроенном языке (рис. 3.88).
Рис. 3.88. Переменная «ЯБудуПлавать»
На первый взгляд кажется, что все хорошо. Но нужно проверить.
Например, вы не умеете плавать. В этом случае не важно, есть рядом бассейн или нет: плавать вы не должны. Но что говорит вам программа? Попробуйте (рис. 3.89).
Рис. 3.89. «ЯБудуПлавать = Истина»
Программа говорит вам, что плавать вы будете. Получается какое-то «опасное» программирование. С таким программированием и утонуть недолго!
В чем же дело? Может быть, вы написали неправильные операции? Нет, правильные.
Просто вы не учли, что если несколько булевых операций встречаются в одном выражении, у них есть определенный порядок выполнения. Точно так же, как было с арифметическими операциями +, -, * и /.
Сначала выполняется операция И, а затем уже выполняется операция ИЛИ. А если подряд встречаются несколько одинаковых операций, то они выполняются в той последовательности, в которой написаны.
Поэтому в примере выражение было посчитано таким образом (рис. 3.90).
Рис. 3.90. Порядок вычисления выражения
Сначала была выполнена операция И, которая дала Ложь. А затем операция ИЛИ, результатом которой явилась Истина.
На самом же деле для вас в этом выражении важны две вещи. Что вы умеете плавать и что есть, где плавать. А море это или бассейн – не так важно.
Поэтому правильным решением будет РядомЕстьМоре ИЛИ РядомЕстьБассейн заключить в скобки (рис. 3.91). Попробуйте.
Рис. 3.91. «ЯБудуПлавать = Ложь»
Тогда платформа сначала вычислит то выражение, которое в скобках. То есть узнает, есть, где плавать, или плавать негде. А потом уже поинтересуется вашим умением плавать (рис. 3.92).
Рис. 3.92. Порядок вычисления выражения
Чтобы закрепить этот пример, немного измените его условие. Создайте три переменные: ЯУмеюПлавать, РядомЕстьМоре и РядомЕстьВанна. Задайте им те значения, которые были в последнем примере: Ложь, Истина и Истина (рис. 3.93).
Рис. 3.93. Переменные «ЯУмеюПлавать», «РядомЕстьМоре» и «РядомЕстьВанна»
А вычислить нужно будет переменную, которая называется ЯБудуКупаться. Будьте внимательны: имя переменной изменилось не просто так.
Попробуйте записать выражение на встроенном языке и потом сравните с тем, что на рисунке 3.94.
Рис. 3.94. «ЯБудуКупаться = Истина»
Запустите «1С:Предприятие» в режиме отладки и посмотрите, какой получается результат, если изменить значения переменных.
Почему в этом случае скобки не понадобились, хотя пример внешне очень похож на предыдущий? Скобки не понадобились потому, что «естественный» порядок выполнения логических операций в этом выражении вполне вас устраивает (рис. 3.95).
Рис. 3.95. Порядок вычисления выражения
Действительно, умение плавать важно только тогда, когда вы собираетесь зайти в море. Если вы хотите искупаться в ванне, то умение плавать вам совершенно не нужно.
Поэтому совершенно правильно, что сначала выполняется операция И и выясняется, можете ли вы купаться в море. А затем уже проверяется наличие ванны, для использования которой способность плавать не требуется.
В заключение нужно сказать еще об одной булевой операции – операции НЕ. Она очень простая. Она возвращает булево значение, противоположное тому, которое имеется.
Чтобы посмотреть, как она работает, вы можете использовать пример, показанный на рисунке 3.96.
Рис. 3.96. Операция «НЕ»
Обычно с использованием этой операции никаких трудностей не возникает. Единственное, что может вам понадобиться, это порядок выполнения булевых операций. Полностью он выглядит так:
сначала выполняется то, что в скобках;
затем операция НЕ;
затем операция И;
затем операция ИЛИ.
|
3.20. Задание простое Чтобы по пути на работу защититься от дождя, вы берете с собой зонт. С помощью переменных ЯИдуНаРаботу и ИдетДождь вычислите значение переменной НадоВзятьЗонт. Проверьте, что ваша инструкция правильно работает при любых значениях исходных переменных. |
|
3.21. Задание простое В каких случаях вы не ходите в школу? Когда выходной (праздники, каникулы) и когда вы болеете. С помощью переменных СегодняВыходной и ЯБолею вычислите значение переменной ЯНеИдуВШколу. Проверьте, что ваша инструкция правильно работает при любых значениях исходных переменных. |
|
3.22. Задание сложное В хорошую погоду, когда у вас нет занятий, вы всегда идете гулять. С помощью переменных ХорошаяПогода, СегодняВыходной и СегодняПраздник вычислите значение переменной ЯИдуГулять. Проверьте, что ваша инструкция правильно работает при любых значениях исходных переменных. |
|
3.23. Задание сложное Вы работаете только по будним дням. С помощью переменных СегодняСуббота и СегодняВоскресенье вычислите значение переменной ЯИдуНаРаботу. Проверьте, что ваша инструкция правильно работает при любых значениях исходных переменных. |
