Профессия — 1С

Рукопашный бой Карташ

Категории

События при проведении документа

рубрики: Документы | Дата: 3 Февраль, 2018

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




Но чтобы правильно выбрать ту или иную функцию для своего кода, необходимо представлять в какой последовательности выполняются эти функции и где они выполняются — на клиенте или на сервере.

Как всегда я призываю не принимать на веру любую теорию, а опробовать все самостоятельно на практике. Эксперименты будем проводить на платформе 8.3 с использованием управляемой формы документа. Для начала создадим любой документ с возможностью проведения и добавим в него форму. Далее откроем модуль формы и добавим в него все предопределенные процедуры связанные с записью документа. А чтобы в момент записи и проведения документ мог сам нам рассказать в какой последовательности выполняются предопределенные процедуры, в каждую из них вставим вызов сообщения с указанием имени процедуры.




В итоге получим вот такой код:


&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
	Сообщить("МодульФормы.ПередЗаписью");
КонецПроцедуры

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
	Сообщить("МодульФормы.ОбработкаПроверкиЗаполненияНаСервере");
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	Сообщить("МодульФормы.ПередЗаписьюНаСервере");
КонецПроцедуры

&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	Сообщить("МодульФормы.ПриЗаписиНаСервере");
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
	Сообщить("МодульФормы.ПослеЗаписиНаСервере");
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	Сообщить("МодульФормы.ПослеЗаписи");
КонецПроцедуры

И такую же процедуру проделаем с модулем объекта:


Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	Сообщить("МодульОбъекта.ОбработкаПроверкиЗаполнения");
КонецПроцедуры

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	Сообщить("МодульОбъекта.ПередЗаписью");
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
	Сообщить("МодульОбъекта.ПриЗаписи");
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	Сообщить("МодульОбъекта.ОбработкаПроведения");
КонецПроцедуры

А теперь посмотрим в какой последовательности отработают все вышеперечисленные события. Для этого откроем документ и нажмем кнопку Провести, т.е. выполним проведение документа из его формы. В итоге в окне сообщений получим следующую последовательность событий:

  • МодульФормы.ПередЗаписью
  • МодульФормы.ОбработкаПроверкиЗаполненияНаСервере
  • МодульОбъекта.ОбработкаПроверкиЗаполнения
  • МодульФормы.ПередЗаписьюНаСервере
  • МодульОбъекта.ПередЗаписью
  • МодульОбъекта.ПриЗаписи
  • МодульОбъекта.ОбработкаПроведения
  • МодульФормы.ПриЗаписиНаСервере
  • МодульФормы.ПослеЗаписиНаСервере
  • МодульФормы.ПослеЗаписи

Для наглядности представим информацию в графическом виде:
Схема событий документа
Как видим все процедуры модуля документа за исключением проверки заполнения выполняются в единой транзакции. Также в этой транзакции выполнятся и процедура модуля формы ПриЗаписиНаСервере(). В этой процедуре у нас есть последний шанс отказаться от проведения документа. Стоит также отметить, что после выполнения процедуры модуля документа ПередЗаписью() у нас документ уже записан в базу данных. То есть в процедуре ПриЗаписи() у нас уже есть возможность использовать ссылку на документ.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

   

2018г. Профессия — 1С. Обмен опытом по программированию в 1С