Серверные алгоритмы модификации операций в журнале
Серверные алгоритмы модификации операций журнала принимают с клиентского места модифицируемую операцию и набор параметров. Алгоритмы могут изменять полученные параметры. При этом наличие параметров зависит от того, разрешена ли передача параметров этому алгоритму клиентским алгоритмом модификации (логические поля "до", "после" и "возврат" типа МОДИФ_ПАРАМ). Алгоритмы могут отменить действие путем возврата НЕТ в качестве результата выполнения. Алгоритмы могут быть заданы в том числе и для разделяемых типов операций, поэтому в них передается имя журнала. Ссылки на алгоритмы задаются: для типовых операций - в редакторе типов операций, для ручных операций и операций исходных остатков - в диалоге настройки алгоритмов журнала. Права доступа к операции, передаваемые во все алгоритмы модификации, являются входным параметром и не могут изменяться в алгоритмах. Права доступа можно использовать для анализа условий модификации операции или для добавления других операций с такими же правами в алгоритмах "после_модификации".
Параметры алгоритмов ДО_ДОБАВЛЕНИЯ и ПОСЛЕ_ДОБАВЛЕНИЯ:
ВЫЧИСЛИТЬ (СТРОКА: журнал; ПЕРЕМ <ТИП>: оп; ПЕРЕМ АЛГ_ПАРАМ: парам; ПЕРЕМ ПРАВА_ДОСТУПА: доступ; ПЕРЕМ ЛОГИКА: рез) //… КОНЕЦ
- журнал - входной параметр. Имя журнала.
- оп - входной и выходной параметр в ДО_ДОБАВЛЕНИЯ, входной параметр в ПОСЛЕ_ДОБАВЛЕНИЯ. Добавляемая операция. Вместо идентификатора <ТИП> задается имя типа операции или имя одного из родительских типов. Как для типовых, так и для ручных операций в качестве имени типа может использоваться имя базового типа ОПЕРАЦИЯ. Для операций исходных остатков вместо идентификатора <ТИП> следует использовать тип ОСТАТОК.
- парам - входной и выходной параметр. Набор параметров.
- доступ - входной параметр. Права доступа к добавляемой операции.
- рез - выходной параметр. Логическое значение результата выполнения алгоритма.
Пример
Пример иллюстрирует использование алгоритма ПОСЛЕ_ДОБАВЛЕНИЯ, в ходе работы которого при добавлении операции типа "Движ_тов" в журнал автоматически добавляется операция типа "Движ_ден" в этот же журнал, между операциями устанавливается связь.
ВЫЧИСЛИТЬ(СТРОКА: журнал; // вход ПЕРЕМ ОПЕРАЦИЯ: оп; // вход ПЕРЕМ АЛГ_ПАРАМ: парам; // вход/выход ПЕРЕМ ПРАВА_ДОСТУПА: доступ; // вход ПЕРЕМ ЛОГИКА: рез) // вход/выход ПЕРЕМ ЖУРНАЛ: ж ж.название = журнал ПЕРЕМ ДенегДвиж: опер опер.дата_время = оп.дата_время опер.комментарий = "Движение денег" ж.ДОБАВИТЬ(опер) ПЕРЕМ СВЯЗИ: св св.связи[опер.номер] = ДА ж.ЗАПИСАТЬ_СВЯЗИ(журнал, оп.номер, св) рез = ДА КОНЕЦ
Параметры алгоритмов ДО_ИЗМЕНЕНИЯ и ПОСЛЕ_ИЗМЕНЕНИЯ:
ВЫЧИСЛИТЬ (СТРОКА: журнал; ПЕРЕМ <ТИП>: старая_оп; ПЕРЕМ <ТИП>: новая_оп; ПЕРЕМ АЛГ_ПАРАМ: парам; ПЕРЕМ ПРАВА_ДОСТУПА: доступ; ПЕРЕМ ЛОГИКА: рез) //… КОНЕЦ
- журнал - входной параметр. Имя журнала.
- старая_оп - входной и выходной параметр в ДО_ИЗМЕНЕНИЯ, входной параметр в ПОСЛЕ_ИЗМЕНЕНИЯ. Операция до редактирования.
- новая_оп - входной параметр. Операция после редактирования.
- парам - входной и выходной параметр. Набор параметров.
- доступ - входной параметр. Права доступа к операции после редактирования.
- рез - выходной параметр. Логическое значение результата выполнения алгоритма.
Параметры алгоритмов ДО_УДАЛЕНИЯ и ПОСЛЕ_УДАЛЕНИЯ:
ВЫЧИСЛИТЬ (СТРОКА: журнал; ПЕРЕМ <ТИП>: оп; ПЕРЕМ АЛГ_ПАРАМ: парам; ПЕРЕМ ПРАВА_ДОСТУПА: доступ; ПЕРЕМ ЛОГИКА: рез) //… КОНЕЦ
- журнал - входной параметр. Имя журнала.
- оп - входной параметр. Удаляемая операция.
- парам - входной и выходной параметр. Набор параметров.
- доступ - входной параметр. Права доступа к удаляемой операции.
- рез - выходной параметр. Логическое значение результата выполнения алгоритма.
Пример
Пример иллюстрирует использование алгоритма ДО_УДАЛЕНИЯ, в ходе работы которого при удалении операции типа "Движ_тов" из журнала автоматически удаляются все связанные операции с этим типом.
ВЫЧИСЛИТЬ(СТРОКА: журнал; // вход ПЕРЕМ ТоварДвиж: оп; // вход ПЕРЕМ АЛГ_ПАРАМ: парам; // вход/выход ПЕРЕМ ПРАВА_ДОСТУПА: доступ; // вход ПЕРЕМ ЛОГИКА: рез) // вход/выход ЕСЛИ парам.парам["уд_связ"] = ДА ТО ПЕРЕМ ЖУРНАЛ: ж ж.название = журнал ПЕРЕМ СВЯЗИ: ж_связи ж.СЧИТАТЬ_СВЯЗИ(журнал, оп.номер, ж_связи) ЦИКЛ ИНДЕКС(знач = ж_связи.связи[инд]) ж.УДАЛИТЬ(инд) КОНЕЦ_ЦИКЛА КОНЕЦ_ЕСЛИ рез = ДА КОНЕЦ