Перейти к содержанию
Educora
Начальный16 мин5 / 14

Условия, циклы, процедуры и функции

Принимай решения с помощью `Если … ИначеЕсли … КонецЕсли`, повторяй действия тремя видами циклов, разбивай код на процедуры и функции с параметрами, разберись со словами `Знач` и `Экспорт`.

Проверь себя
В этом уроке ты узнаешь
  • Писать многоветвевые условия и выражение ?()
  • Выбирать подходящий цикл и использовать Прервать и Продолжить
  • Писать процедуры и функции и объяснять, как передаются параметры

Магазин даёт скидку 5% на покупки от 200 манатов и 10% — от 500 манатов. В накладной сто строк, и сумму каждой нужно рассчитать. Для таких задач программа должна уметь принимать решения (условия), повторять действия (циклы) и разбивать код на части (процедуры и функции).

Условия

1C
СуммаПокупки = 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повторять, пока условие истинно
1C
Для Н = 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).

1C
Функция СуммаСоСкидкой(Сумма, ПроцентСкидки = 0) Экспорт
    Возврат Сумма - Сумма * ПроцентСкидки / 100;
КонецФункции

Процедура Удвоить(Значение)
    Значение = Значение * 2;
КонецПроцедуры

Процедура УдвоитьКопию(Знач Значение)
    Значение = Значение * 2;
КонецПроцедуры

Процедура Тест()
    Сообщить(СуммаСоСкидкой(200, 5));
    Сообщить(СуммаСоСкидкой(80));
    А = 5;
    Удвоить(А);
    Б = 5;
    УдвоитьКопию(Б);
    Сообщить(А);
    Сообщить(Б);
КонецПроцедуры
Ожидаемый результат
190
80
10
5
По умолчанию параметры передаются по ссылке (А изменилась), а Знач передаёт копию (Б не изменилась).

Процедуры и функции всегда находятся в каком-либо модуле. Вид модуля определяет, когда и где вызывается код, поэтому, прежде чем писать новую процедуру, выбери для неё правильный «дом»:

  • Общий модуль — общий код для всей конфигурации; вызов: ИмяМодуля.Процедура().
  • Модуль объекта — события конкретного элемента справочника или документа (запись, проведение).
  • Модуль менеджера — функции для всего типа: Документы.РасходТовара.ПечатнаяФорма().
  • Модуль формы — события и команды формы; подробно разберём его в следующем модуле.
  • Модули приложения и сеанса — старт программы и параметры сеанса.

Главное

  • Если … ИначеЕсли … Иначе … КонецЕсли: выполняется первая истинная ветвь; ?(У, А, Б) — краткая форма.
  • Циклы: Для … По, Для Каждого … Из, Пока; все заканчиваются КонецЦикла.
  • Прервать выходит из цикла, Продолжить переходит к следующей итерации.
  • Функция возвращает значение через Возврат, процедура — нет.
  • Параметры передаются по ссылке; Знач передаёт копию, Экспорт открывает процедуру другим модулям.

Проверь себя

Вопросов: 10. Каждый правильный ответ приносит XP.

1 / 10
Что вернёт выражение ?(3 > 5, "A", "B")?