Загрузка данных
Глава 2. Основные операторы
Вторая глава у нас очень объемная по знаниям, в ней мы научимся работать с
конструкцией Если, разберем два вида цикла, будем пробовать делать собственные
процедуры и функции и освоим такой нужный оператор как Попытка.
Часть 2.1. Условие: Если…Тогда…ИначеЕсли
Начнем мы с очень необходимого оператора, без которого просто никуда. Это
оператор условия Если…Тогда.
Данный оператор управляет выполнением программы в зависимости от логического
выражения (их может быть одно или несколько).
Простейший вариант данного оператора будет следующим:
Если <Условие> тогда
[Операция1];
………..
[ОперацияN];
………..
КонецЕсли;
Рассмотрим подробнее. Для того чтобы начали выполняться операции внутри
конструкции Если…Тогда, нужно, чтобы Условие принимало значение Истина. Если Условие
принимает значение Ложь, то программа не будет заходить внутрь конструкции. Все просто.
Теперь пример.
Создайте самостоятельно обработку, форму и в обработчике нажатия кнопки
«Выполнить» формы напишем следующий код:
Рис. 2.1.1
80
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
В данном коде мы указали, что если введенное число больше нуля, то выводим
сообщение. В противном случае ничего не делаем.
Сохраните обработку и посмотрите, как она работает.
Это самый примитивный вариант использования данного оператора.
Условие для данного оператора может быть каким угодно, главное, чтобы возвращалось
значение типа булево.
Например, может быть такой вариант:
Если Число1 > 1 и Число1 < 10 тогда….
Или такой вариант:
Условие = Число1 > 1 и Число1 < 10;
Если Условие тогда…
И так далее, более подробно про работу с булевыми операторами смотрите главу 1,
часть 3.
Продолжаем изучать дальше конструкцию «Если…». Что если нам надо выполнить
какие-нибудь операции, когда выполняется наше условие, и другие операции, когда оно не
выполняется? Для этого нам помогает оператор условия Иначе.
Рассмотрим схему:
Если <Условие> тогда
[Операция1];
………..
[ОперацияN];
Иначе
[Операция_2];
……….
[Операция_N]
КонецЕсли;
В данном случае выполнение программы после оператора Иначе будет, когда Условие
примет значение Ложь.
Доработайте Ваш пример:
81
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Рис. 2.1.2
В вышеприведенном коде мы вводим некоторое число в программу, после, как в
предыдущем примере, пишем условие, что если это число больше нуля, то выводим
соответствующее сообщение. Но также пишем оператор Иначе, после которого сообщаем,
что число меньше или равно нулю. Запустите данную обработку и посмотрите, как она
работает.
Опять усложним текущий пример. Что если нам необходимо вывести сообщение,
когда число равно нулю, или, к примеру, равно 10?.
Для этого мы используем условную конструкцию ИначеЕсли …Тогда.
Рассмотрим схему:
Если <Условие> тогда
[Операция1];
………..
[ОперацияN];
ИначеЕсли <Условие2> тогда
[Операция_2];
………..
[Операция_2N];
ИначеЕсли <Условие3> тогда
[Операция_2];
………..
[Операция_2N];
.
.
Иначе
[Операция_N];
……….
[Операция_NN]
КонецЕсли;
Операторов ИначеЕсли…Тогда внутри условия может быть бесконечное множество,
82
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
оператор Иначе всегда должен быть один и идти после всех операторов ИначеЕсли…Тогда.
Теперь усложните Ваш пример:
Рис. 2.1.3
В данном примере мы проверяем, больше или равно единицы введенное нами число,
если да, то сообщаем об этом. Потом проверяем, входит ли оно в интервал от 0 до 1, если да,
то сообщаем. Следующим шагом проверяем, равно ли оно нулю, если да, то сообщаем.
И если число не удовлетворяет всем вышеприведенным условиям, т.е. число меньше нуля,
выводим сообщение об этом.
Обращаю Ваше внимание, что условия ИначеЕсли будут выполняться только в том
случае, когда не выполнились все предыдущие условия. Например, если Вы подправите Ваш
пример:
Рис. 2.1.4
83
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Если мы изменим первое условие, что Число1 больше 0, то программа никогда не
зайдет во второе условие. Так как, к примеру, число 0.6 больше нуля, и выполнится данный
код, после чего происходит выход из оператора.
Обратите внимание на один момент, если в Условии идет сразу переменная типа
булево, то не надо писать так:
Если НашеУсловие = Истина тогда…
Если НашеУсловие = Ложь тогда…
Достаточно просто написать условие, например:
Если НашеУсловие тогда…
Или
Если Не НашеУсловие тогда….
Теперь переделайте предыдущий пример. Создайте переменную типа булево с
нужным условием и подставляйте ее в конструкцию Если…Тогда.
Закончим разбирать данный оператор. Попробуйте сами усложнить Ваш пример,
добавив различные дополнительные сравнения.
Теперь изучим похожий оператор, но несколько упрощенный – Вычислить выражение
по условию. Он имеет следующий синтаксис.
?(<Условие>,<Выражение1>,<Выражение2>)
Где
«Условие» – это логическое выражение, в зависимости от результата которого будет
возвращено либо Выражение1, либо Выражение2.
«Выражение1» – возвращается, если логическое выражение Истина.
«Выражение2» – возвращается, если логическое выражение Ложь.
Рассмотрим пример. Вводим некоторое число, и надо вывести сообщение, больше оно
нуля или меньше.
Рис. 2.1.5
84
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
В изучаемом примере первый параметр оператора «?» это наше условие: Число1 >0,
второй параметр – строка с текстом, что наше число больше нуля, оно будет возвращаться,
если первый параметр будет Истина. И третий параметр – строка с текстом, что наше число
ноль или меньше нуля, оно будет возвращаться, если первый параметр будет Ложь.
Посмотрите, как она работает.
Сделайте еще один пример: пользователь вводит некоторое число, нужно извлечь из
него корень, для этого оно всегда должно быть положительным.
Рис. 2.1.6
Разберите данный пример самостоятельно.
Резюме
В этой части Вы изучили один из основных операторов языка программирования 1С,
если Вам не понятно его действие, то смотрите, как работает программа в отладке. Как
работать с отладкой мы изучали во введении, также можете посмотреть примеры в группе
Вконтакте http://vk.com/1c_prosto. Вы должны хорошо владеть данным оператором, чтобы
перейти к дальнейшему изучению языка программирования 1С.
Глава 2. Часть 1. Условие: Если…Тогда…ИначеЕсли
1) Введите интерактивно числа X, Y.
Вычислите Z = X – Y, если X > Y
Z = X + Y, если X >= Y.
2) Введите интерактивно X, Y.
Вычислите Z = X/Y. Если Y = 0, выведите предупреждение, что деление
на 0 невозможно.
3) Введите интерактивно любое число. Проверьте, является ли оно целым
(подсказка: используйте функцию Цел из 4 части урока 2).
4) Вычислите ( B
C
) *(
D E
) , где D, Е, задаются в модуле (суть
F * G
константы), остальные переменные задаются интерактивно,
обработайте все ситуации, чтобы не генерировались ошибки.
5) , где A,B – задаются интерактивно, обработайте
1
A
B
2 4
ситуации, чтобы не генерировались ошибки.
6) Введите интерактивно номер вида ху344яRU63, где 63 – код региона,
код региона может быть любой, состоящий из двух или трех цифр,
последние две цифры определяют регион. Определите код региона и
выведите сообщение, что данный номер принадлежит такому-то
региону (или код региона неизвестен). Должно быть не менее 5-ти
известных регионов.
7) Запросите у пользователя поочередно город, улицу, дом, квартиру и
выведите его адрес в виде: г. Москва, ул. Гагарина, д. 98, кв. 34. Если
пользователь не ввел город, улицу, дом и т.д., заменяйте этот реквизит
«---»(Например: г. Москва, ---, д. 98, кв. ---,).
8) Запросите у пользователя любое число (ввод сделайте целочисленным
от 0 до 9). Если пользователь ввел 1, выведите свою ФИО в верхнем
регистре; если 2 - в нижнем регистре; если 3 - в титульном регистре. В
любом другом случае выведите просто фамилию.
9) Некоторый сотрудник должен отработать с 8 до 17 (норма), включая
час на обед, почасовая ставка - 100 р. Сотрудник интерактивно вводит
время начала рабочего дня, и время окончания рабочего дня. Если он
превысил рабочий день, то ставка первых двух сверхнормативных
A
5
2
часов увеличивается в 1,5 раза, а последующих часов в 2 раза. По
условиям задачи в любом рабочем дне сотрудника есть 1 час на обед,
который не оплачивается. Вычислите з/п сотрудника за рабочий день.
10) Введите интерактивно две любые даты, выведите
соответствующие сообщения если эти даты: а) внутри одной недели;
б) внутри одного месяца; в) внутри одного года; г) принадлежат к
разным годам.