Поиск по блогу

понедельник, 23 марта 2015 г.

Последовательность вызова событий при записи документа

Последовательность выполнения событий при записи в регистр сведений

У объекта Документ имеется свой набор событий, с помощью которых разработчик может вмешаться в процесс записи документа в базу данных используя обработчики этих событий. В зависимости от вида действия, которое выполнит пользователь, события документа вызываются в определенной последовательности.
Существуют следующие основные виды действий для документа:
  • Записать
  • Провести
  • Провести и закрыть
  • Отмена проведения
Рассмотрим последовательность выполнения событий при каждом действии.

Действие Записать


Для непроведенного документа последовательность выполнения событий при записи документа из формы будет следующей:
1. Последовательность событий при записи документа
  1. Модуль формы (&НаКлиенте) - перед записью;
  2. Модуль формы (&НаСервере) - перед записью на сервере;
  3. Модуль объекта - перед записью (начинается транзакция, документ еще не записан);
  4. Модуль объекта - при записи (документ записан);
  5. Модуль формы (&НаСервере) - при записи на сервере (фиксация транзакции);
  6. Модуль формы (&НаСервере) - после записи на сервере;
  7. Модуль формы (&НаКлиенте) - после записи.
Заметим, что для расширения формы документа платформа 1С по-умолчанию устанавливает значение Истина для свойства ПриЗаписиПерепроводить, поэтому, при записи проведенного документа из формы платформа 1С выполнит автоматически его перепроведение. В этом случае для проведенного документа последовательность выполнения событий при записи из формы будет следующей:
2. Последовательность событий при записи проведенного документа
  1. Модуль формы (&НаКлиенте) - перед записью;
  2. Модуль формы (&НаСервере) - обработка проверки заполнения на сервере;
  3. Модуль объекта - обработка проверки заполнения;
  4. Модуль формы (&НаСервере) - перед записью на сервере;
  5. Модуль объекта - перед записью (начало транзакции, документ еще не записан);
  6. Модуль объекта - при записи (документ записан);
  7. Модуль объекта - обработка проведения (формирование набора записей движений документа);
  8. Модуль формы (&НаСервере) - при записи на сервере (записан набор записей движений документа, фиксация транзакции);
  9. Модуль формы (&НаСервере) - после записи на сервере;
  10. Модуль формы (&НаКлиенте) - после записи.
Если для свойства ПриЗаписиПерепроводить установить значение Ложь, тогда последовательность выполнения событий при записи проведенного документа из формы будет такой же как и для непроведенного документа.

Последовательность выполнения событий при записи документа из формы, у которого запрещено проведение (свойство Проведение установлено в значение Запретить) будет следующей:
3. Последовательность событий для не проводимого документа
В отличии от документа, у которого разрешено проведения, в этом случае отсутствует событие ОбработкаПроведения. Но, при записи проведенного документа с перепроведением и при записи документа, у которого запрещено проведение, кроме самой записи, в контексте формы и в контексте объекта вызывается также событие ОбработкаПроверкиЗаполнения. Это событие вызывается расширением формы для проверки заполнения реквизитов при записи или при проведении документа в форме.

Действие Провести


При выполнении данного действия, то есть запись нового документа с проведением из формы, последовательность выполнения событий будет такая же как и у действия запись проведенного документа (см. рисунок 2).

Действие Провести и закрыть

Последовательность выполнения событий аналогична действию провести (см. рисунок 2).

Действие Отмена проведения

Данное действие инициирует запись документ и запускает следующую последовательность событий:
4. Последовательность событий при отмене проведения документа
  1. Модуль формы (&НаКлиенте) - перед записью;
  2. Модуль формы (&НаСервере) - перед записью на сервере;
  3. Модуль объекта - перед записью (начало транзакции);
  4. Модуль объекта - обработка удаления проведения (удаление движений);
  5. Модуль объекта - при записи (движения удалены, документ записан);
  6. Модуль формы (&НаСервере) - после записи на сервере (фиксация транзакции);
  7. Модуль формы (&НаКлиенте) - после записи.

Если действия выполняются не из формы (выполняются программно), отличия состоя в том, что не выполняются события формы!

4 комментария:

  1. Если сравнить этот пост с дивным золотым ювелирным украшением, то указание на диаграммах моментов срабатывания подписок на события стало бы сверкающим камушком на нём ))

    ОтветитьУдалить
  2. а где "ПриУстановкеНовогоНомера"?

    ОтветитьУдалить