3ERP

3ERP - простая и бесплатная программа для бухгалтерского и оперативного учёта в учреждениях сферы торговли и услуг, общественного питания, складского хранения, автосервиса, медицины, логистики, производства, управления работами и заявками, поддерживающая до 100 пользователей, на русском языке и полностью бесплатная для 1 пользователя. На сайт (скачать)

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')")
    
    ВЫЧИСЛИТЬ Количество = КОЛИЧЕСТВО(Просроченные)
    ВЫВЕСТИ "Найдено просроченных заказов: " + Количество
    
    ЦИКЛ ПО Просроченные КАК Заказ
        ЗАПОЛНИТЬ Заказ.Статус = "Просрочен"
        ЗАПОЛНИТЬ Заказ.ДатаОбновления = ТЕКУЩАЯ_ДАТА_ВРЕМЯ()
        ВЫЧИСЛИТЬ _ = ЗАПИСАТЬ(Заказ)
    КОНЕЦ_ЦИКЛА
    
    ВОЗВРАТ Количество
КОНЕЦ_ПРОЦЕДУРЫ
3526 | 0 | 3526 | 348 | 162 | 29