- Писать многоветвевые условия и выражение
?() - Выбирать подходящий цикл и использовать
ПрерватьиПродолжить - Писать процедуры и функции и объяснять, как передаются параметры
Магазин даёт скидку 5% на покупки от 200 манатов и 10% — от 500 манатов. В накладной сто строк, и сумму каждой нужно рассчитать. Для таких задач программа должна уметь принимать решения (условия), повторять действия (циклы) и разбивать код на части (процедуры и функции).
Условия
СуммаПокупки = 250;
Если СуммаПокупки >= 500 Тогда
Скидка = 10;
ИначеЕсли СуммаПокупки >= 200 Тогда
Скидка = 5;
Иначе
Скидка = 0;
КонецЕсли;
Сообщить("Скидка: " + Скидка + "%");
Остаток = 0;
Статус = ?(Остаток > 0, "В наличии", "Нет в наличии");
Сообщить(Статус);Скидка: 5% Нет в наличии
Если = If, Тогда = Then, ИначеЕсли = ElsIf, Иначе = Else, КонецЕсли = EndIf.Ветви проверяются сверху вниз, и выполняется первая истинная — поэтому для 250 получилось 5%. ?(Условие, А, Б) — краткая форма: возвращает А, если условие истинно, иначе Б. Сложные условия строят из И, ИЛИ, НЕ и скобок: Если (Сумма > 100 И НЕ Оплачено) ИЛИ Срочно Тогда.
Три вида циклов
| Цикл | По-английски | Когда применять |
|---|---|---|
Для Н = 1 По 10 Цикл … КонецЦикла | For … To … Do … EndDo | число повторений известно заранее |
Для Каждого Эл Из Коллекция Цикл | For Each … In … Do | перебор всех элементов коллекции |
Пока Условие Цикл … КонецЦикла | While … Do … EndDo | повторять, пока условие истинно |
Для Н = 1 По 10 Цикл
Если Н % 2 = 1 Тогда
Продолжить; // нечётные пропускаем
КонецЕсли;
Если Н > 8 Тогда
Прервать; // выходим из цикла
КонецЕсли;
Сообщить(Н);
КонецЦикла;
Города = СтрРазделить("Bakı,Gəncə,Şəki", ",");
Для Каждого Город Из Города Цикл
Сообщить(Город);
КонецЦикла;2 4 6 8 Bakı Gəncə Şəki
Продолжить переходит к следующей итерации, Прервать сразу завершает цикл.Вклад 1000 манатов каждый год растёт на 10%. Через сколько лет сумма впервые достигнет 2000 манатов или превысит их? Реши с помощью цикла Пока.
Показать решениеСкрыть решение
Вклад = 1000; Лет = 0;Пока Вклад < 2000 Цикл Вклад = Вклад * 1.1; Лет = Лет + 1; КонецЦикла;Через 7 лет: 1000 · 1,1⁷ ≈ 1948,7 < 2000.
Через 8 лет: 1000 · 1,1⁸ ≈ 2143,6 ≥ 2000.
Ответ: 8 лет. Число повторений заранее неизвестно, поэтому здесь лучше всего подходит
Пока.Процедуры и функции
Процедура (Процедура … КонецПроцедуры) выполняет действие, а функция (Функция … КонецФункции) возвращает значение через Возврат. У параметров могут быть значения по умолчанию. Слово Экспорт делает процедуру доступной из других модулей, например: РаботаСЦенами.СуммаСоСкидкой(200, 5).
Функция СуммаСоСкидкой(Сумма, ПроцентСкидки = 0) Экспорт
Возврат Сумма - Сумма * ПроцентСкидки / 100;
КонецФункции
Процедура Удвоить(Значение)
Значение = Значение * 2;
КонецПроцедуры
Процедура УдвоитьКопию(Знач Значение)
Значение = Значение * 2;
КонецПроцедуры
Процедура Тест()
Сообщить(СуммаСоСкидкой(200, 5));
Сообщить(СуммаСоСкидкой(80));
А = 5;
Удвоить(А);
Б = 5;
УдвоитьКопию(Б);
Сообщить(А);
Сообщить(Б);
КонецПроцедуры190 80 10 5
А изменилась), а Знач передаёт копию (Б не изменилась).Процедуры и функции всегда находятся в каком-либо модуле. Вид модуля определяет, когда и где вызывается код, поэтому, прежде чем писать новую процедуру, выбери для неё правильный «дом»:
- Общий модуль — общий код для всей конфигурации; вызов:
ИмяМодуля.Процедура(). - Модуль объекта — события конкретного элемента справочника или документа (запись, проведение).
- Модуль менеджера — функции для всего типа:
Документы.РасходТовара.ПечатнаяФорма(). - Модуль формы — события и команды формы; подробно разберём его в следующем модуле.
- Модули приложения и сеанса — старт программы и параметры сеанса.
Главное
Если … ИначеЕсли … Иначе … КонецЕсли: выполняется первая истинная ветвь;?(У, А, Б)— краткая форма.- Циклы:
Для … По,Для Каждого … Из,Пока; все заканчиваютсяКонецЦикла. Прерватьвыходит из цикла,Продолжитьпереходит к следующей итерации.- Функция возвращает значение через
Возврат, процедура — нет. - Параметры передаются по ссылке;
Значпередаёт копию,Экспортоткрывает процедуру другим модулям.
Проверь себя
Вопросов: 10. Каждый правильный ответ приносит XP.
?(3 > 5, "A", "B")?