06. Процедуры
Процедуры — это пользовательские скрипты для реализации сложной бизнес-логики. Могут вызываться из документов, API, расписаний и других процедур.
6.1. Синтаксис процедуры
ПРОЦЕДУРА ИмяПроцедуры
# Тело процедуры
ВЫЧИСЛИТЬ Переменная = Выражение
ЕСЛИ условие ТО
# код
КОНЕЦ_ЕСЛИ
ЦИКЛ ПО Коллекция КАК Элемент
# код
КОНЕЦ_ЦИКЛА
ВОЗВРАТ Значение
КОНЕЦ_ПРОЦЕДУРЫ
6.2. Пример процедуры
ПРОЦЕДУРА РассчитатьСкидкуПоКлиенту(IDКлиента, СуммаЗаказа)
ВЫЧИСЛИТЬ Клиент = ПРОЧИТАТЬ("Клиенты", IDКлиента)
ЕСЛИ ПУСТО(Клиент) ТО
ВОЗВРАТ 0
КОНЕЦ
ВЫЧИСЛИТЬ БазоваяСкидка = Клиент.СкидкаПроцент
# Дополнительная скидка за крупную сумму
ЕСЛИ СуммаЗаказа > 100000 ТО
ВЫЧИСЛИТЬ БазоваяСкидка = БазоваяСкидка + 5
КОНЕЦ
# Скидка не более 30%
ЕСЛИ БазоваяСкидка > 30 ТО
ВЫЧИСЛИТЬ БазоваяСкидка = 30
КОНЕЦ
ВОЗВРАТ БазоваяСкидка
КОНЕЦ_ПРОЦЕДУРЫ
6.3. Операторы и конструкции
| Оператор | Назначение | Пример |
|---|---|---|
| ВЫЧИСЛИТЬ | Присвоение переменной | ВЫЧИСЛИТЬ x = 10 |
| ЕСЛИ ... ТО ... ИНАЧЕ ... | Условный оператор | ЕСЛИ x > 0 ТО ... ИНАЧЕ ... |
| ЦИКЛ ПО ... КАК ... | Цикл по массиву | ЦИКЛ ПО Список КАК Эл |
| ПРЕРВАТЬ | Выход из цикла | ЕСЛИ условие ТО ПРЕРВАТЬ |
| ПРОДОЛЖИТЬ | Переход к следующей итерации | ЕСЛИ условие ТО ПРОДОЛЖИТЬ |
| ОШИБКА | Прерывание с сообщением | ОШИБКА "Текст ошибки" |
| ВОЗВРАТ | Возврат значения | ВОЗВРАТ Результат |
6.4. Функции доступа к данным
| Функция | Описание |
|---|---|
| СОЗДАТЬ("Коллекция") | Создаёт новый объект |
| ПРОЧИТАТЬ("Коллекция", ID) | Читает объект по ID |
| ЗАПИСАТЬ(Объект) | Сохраняет объект |
| УДАЛИТЬ_ОБЪЕКТ(Объект) | Удаляет объект |
| НАЙТИ("Коллекция", "Фильтр") | Находит первую запись |
| НАЙТИ_ВСЕ("Коллекция", "Фильтр") | Находит все записи |
6.5. Пример массовой обработки
ПРОЦЕДУРА ОбновитьСтатусыПросроченныхЗаказов
ВЫЧИСЛИТЬ Просроченные = НАЙТИ_ВСЕ("ЗаказНаряд",
"Статус = 'В работе' AND Дата < date('now', '-14 days')")
ВЫЧИСЛИТЬ Количество = КОЛИЧЕСТВО(Просроченные)
ВЫВЕСТИ "Найдено просроченных заказов: " + Количество
ЦИКЛ ПО Просроченные КАК Заказ
ЗАПОЛНИТЬ Заказ.Статус = "Просрочен"
ЗАПОЛНИТЬ Заказ.ДатаОбновления = ТЕКУЩАЯ_ДАТА_ВРЕМЯ()
ВЫЧИСЛИТЬ _ = ЗАПИСАТЬ(Заказ)
КОНЕЦ_ЦИКЛА
ВОЗВРАТ Количество
КОНЕЦ_ПРОЦЕДУРЫ