События Типов справочников и ТКЭД. Часть 2.

12 4

Цикл статей:

События Типов справочников и ТКЭД. Часть 1.

События Типов справочников и ТКЭД. Часть 2.

События Типов справочников и ТКЭД. Часть 3.

Продолжаем знакомиться с событиями Типов Справочников (ТС) и ТКЭД.

Форма-карточка – Показ

Выполняется после события «Запись – Открытие», при открытии записи, смене текущей записи, добавлении новой записи при визуальном режиме работы. В случае ошибки в вычислениях события выводится сообщение об ошибке, но карточка открывается.

В данном событии нельзя выводить диалоговые окна, так как могут возникнуть проблемы на уровне платформы с определением активного окна.

Главное предназначение этого события – управление доступностью элементов формы.

  // Например,сделать недоступными для изменения реквизиты 
  // "Дополнение" и "Примечание" и кнопку "Отмена"
  OnlyReadActionsAndRequisites(Object; ArrayOf("Дополнение"; "test1");
    ArrayOf('CancelAction'); TRUE; Sender) 

Запись – Сохранение Возможность

Выполняется до начала транзакции на сохранение изменений записи на сервере. На момент выполнения события изменения в сохраняемой записи на сервере еще не отражены.

В случае ошибки в вычислениях события выводится сообщение об ошибке,  происходит возврат в режим изменения записи.

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

Запись – Сохранение До

Выполняется до сохранения записи в рамках транзакции на сохранение. На момент выполнения события изменения в сохраняемой записи на сервере еще не отражены.

В случае ошибки в вычислениях события выводится сообщение об ошибке,  происходит возврат в режим изменения записи и откат транзакции.

После проверки на корректность сохраняемых данных в рамках события Сохранения Возможность, данное событие начинает перенос данных с клиента на сервер. Здесь целесообразно производить те действия, которые влияют на другие объекты системы, и которые необходимо откатить вместе с транзакцией при возникновении ошибки. Например, создание копии текущей записи в другом справочнике или автоматическое создание замещения работников, если добавляется новый работник. Либо синхронизация каких-либо реквизитов в другой справочник.

Внимание! Так как событие выполняется в рамках транзакции, то увеличение времени обработки кода, соответственно, увеличивает и время транзакции. В свою очередь это может существенно сказаться на производительности системы.

Система DIRECTUM работает на самом низком уровне изоляции транзакций - READ UNCOMITTED. Однако могут быть ситуации, когда в процессе работы, требуются данные из подтвержденных транзакций, поэтому нельзя использовать функции, выводящие диалоговые окна, т.к. это может привести к блокировкам работы других пользователей на время показа диалогового окна.

Запись – Сохранение После

Данное событие также выполняется в рамках транзакции на сохранение. Изменения в сохраняемой записи на сервере уже отражены.

В случае ошибки в вычислениях события выводится сообщение об ошибке,  происходит возврат в режим изменения записи и откат транзакции. Это означает, что отраженные на сервере данные при возникновении ошибки откатятся до того значения, которое было до сохранения.

В данном событии нельзя изменять значения реквизитов сохраняемой записи, так как уже сохраненные на сервере данные окажутся некорректными. Также изменение значений реквизитов может вызвать вычисления на них, что в свою очередь приведет к нарушению логики процесса сохранения.

По аналогии с событием «Сохранение До» здесь целесообразно производить те действия, которые влияют на другие объекты системы, и которые необходимо откатить вместе с транзакцией при возникновении ошибки. Основное отличие в том, что данные по текущей записи справочника уже отражены на сервере и, можно изменять объекты системы, зависящие от текущей записи. Например, если текущую запись надо указать в качестве значения реквизита другой записи.

Внимание! Нельзя использовать функции, выводящие диалоговые окна. 

Для большего понимания различий событий Сохранения приведена следующая таблица:

Наименование события

Транзакция началась?

Критерий ситуации, когда требуется использование события

Сохранение Возможность

Нет

Вычисления изменяют только текущую запись, проверка на корректность заполнения реквизитов

Сохранение До

Да

Вычисления изменяют другие объекты системы. В случае ошибки все изменения надо откатить

Сохранение После

Да

Вычисления, которые изменяют другие объекты системы и требуют измененных данных текущей записи справочника в БД. В случае ошибки все изменения надо откатить.

Запись – Отмена До

Выполняется до отмены изменений в записи. На момент выполнения события вновь вставленная запись существует на клиенте, но не существует на сервере. Не новая запись существует и на клиенте, и на сервере, в наборе данных содержится текущая информация записи.

В случае ошибки в вычислениях события выводится сообщение об ошибке, отмена изменений не прерывается.

Запись – Отмена После

Выполняется после отмены изменений в записи. На момент выполнения события вновь вставленная запись не существует ни на клиенте, ни на сервере, Указатель (Object) находится на следующей существующей записи, либо указывает на пустой набор данных. Не новая запись существует и на клиенте, и на сервере, в наборе данных содержится восстановленная информация записи, соответственно тут можно менять другие объекты системы на основании восстановленной информации.

В случае ошибки в вычислениях события выводится сообщение об ошибке, отмена изменений не прерывается.

Так как запись восстанавливается к первоначальному состоянию, тут можно восстанавливать признаки доступности для элементов формы. Но делать это можно только для ранее существовавшей записи, так как добавляемая запись уже не существует и управлять нечем. Поэтому в этом случае необходимо в предыдущих событиях сохранить в окружении свойство Object.Inserted, потому что в данном событии оно либо не существует (в случае, если отменяемая запись была только что добавлена в пустой справочник), либо вызывается для другой записи и всегда имеет значение True.

Заключительная часть совсем скоро...

Марина Котусева
Запись – Сохранение После
Внимание! Нельзя использовать функции, выводящие диалоговые окна.
А подскажете, почему?
Андрей Девятьяров

Потому что событие выполняется в рамках транзакции, и возможна блокировка работы других пользователей на время показа сообщения.

Александр Павлов

Просьба автору -  делать ссылки на Справку

Андрей Девятьяров
Просьба автору -  делать ссылки на Справку

Александр, спасибо за дополнение. Статья дополняет справку, если делать ссылки - то их будет очень много. Сделал общую ссылку в первой части.

Авторизуйтесь, чтобы написать комментарий