Модуль документа

Следует отличать модуль документа и модули его форм (как и в версии 7.7). В модуле документа располагаются процедуры и функции, связанные с документом как объектом конфигурации, независимо от его экранных форм.

Например, там и только там располагаются обработчики следующих событий:

ОбработкаПроведения

Событие возникает в момент проведения документа. Обычно в нем содержится алгоритм формирования движений документа по регистрам. Событие имеет два параметра: Отказ и Режим. Если в обработчике события первому параметру присвоить значение Истина, тогда документ не будет проведен. Второй параметр позволяет узнать режим проведения документа: оперативный или неоперативный.

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

ОбработкаУдаленияПроведения

Событие возникает в момент отмены проведения документа. При этом движения документа, как правило, очищаются автоматически.

ОбработкаЗаполнения

Это событие возникает при вводе документа на основании другого документа (или, например, элемента справочника), который передается в параметр Основание. В данной процедуре программист должен предусмотреть заполнение реквизитов документа.

ПередЗаписью

Это событие возникает перед выполнением записи объекта после начала транзакции, но до начала записи документа в базу данных.

ПередУдалением

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

ПриУстановкеНовогоНомера

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

ПриКопировании

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

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

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

Если их объявить с ключевым словом Экспорт, то они станут доступными вне документа, как обычные методы.

Часто таким образом производится печать документов, например, ниже приведена процедура печати расходной накладной:

 

Процедура Печать(ТабДок) Экспорт
//получение макета
	Макет = Документы.РасходнаяНакладная.ПолучитьМакет("Печать");
	
//вывод шапки
	Область = Макет.ПолучитьОбласть("Шапка");
	Область.Параметры.НомерДокумента = Номер;
	Область.Параметры.От = Дата;
	ТабДок.Вывести(Область);
 
	//вывод табличной части Состав
	Для Каждого СтрокаСостава Из Состав Цикл
		Область = Макет.ПолучитьОбласть("Строка");
		Область.Параметры.Заполнить(СтрокаСостава);
		ТабДок.Вывести(Область);
	КонецЦикла;
 
	//вывод подвала
	Область = Макет.ПолучитьОбласть("Подвал");
	Область.Параметры.ИтогоКоличество = Состав.Итог("Количество");
	Область.Параметры.ИтогоСумма = Состав.Итог{"Сумма");
	ТабДок.Вывести(Область);
КонецПроцедуры

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

Например, в форме документа по кнопке «Печать» вызывается следующая процедура:

 

Процедура ПечатьСПросмотром(Кнопка)
	ТабДок = Новый ТабличныйДокумент;
	Печать(ТабДок); //вызывается приведенная выше процедура
	ТабДок.Показать();
КонецПроцедуры

 

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

 

Процедура ПечатьТекущегоДокумента()
	Список = ЭлементыФормы.Список,
	Если Список.ТекущаяСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли;
	ТекДокумент = Список.ТекущаяСтрока.ПолучитьОбъект();
	ТабДок = Новый ТабличныйДокумент;
	ТекДокумент.Печать(ТабДок);
	ТабДок.Показать();
КонецПроцедуры
бухгалтерский учет