Модуль документа
Следует отличать модуль документа и модули его форм (как и в версии 7.7). В модуле документа располагаются процедуры и функции, связанные с документом как объектом конфигурации, независимо от его экранных форм.
Например, там и только там располагаются обработчики следующих событий:
ОбработкаПроведения
Событие возникает в момент проведения документа. Обычно в нем содержится алгоритм формирования движений документа по регистрам. Событие имеет два параметра: Отказ и Режим. Если в обработчике события первому параметру присвоить значение Истина, тогда документ не будет проведен. Второй параметр позволяет узнать режим проведения документа: оперативный или неоперативный.
Перед началом выполнения данной процедуры, если документ раньше сформировал движения, то они обычно очищаются системой автоматически.
ОбработкаУдаленияПроведения
Событие возникает в момент отмены проведения документа. При этом движения документа, как правило, очищаются автоматически.
ОбработкаЗаполнения
Это событие возникает при вводе документа на основании другого документа (или, например, элемента справочника), который передается в параметр Основание. В данной процедуре программист должен предусмотреть заполнение реквизитов документа.
ПередЗаписью
Это событие возникает перед выполнением записи объекта после начала транзакции, но до начала записи документа в базу данных.
ПередУдалением
Событие возникает перед удалением документа из базы, независимо от того, программно или интерактивно он удаляется.
ПриУстановкеНовогоНомера
Данное событие возникает в момент, когда выполняется установка нового номера документа.
ПриКопировании
Это событие возникает при создании документа копированием. В процедуре-обработчике можно произвести дополнительные действия, например, присвоить новую дату и новый номер, заполнить реквизит Автор и т.д.
Замечание. Все эти процедуры-обработчики событий вызываются при наступлении указанных событий независимо от того, как они были инициированы: программно или интерактивно. Даже если документ записывается методом Записать, то будут вызваны процедуры-обработчики ПередЗаписью и ПриЗаписи. Это следует учитывать при разработке конфигураций.
Кроме вышеперечисленных процедур, в модуле документа могут располагаться процедуры и функции, созданные разработчиком.
Если их объявить с ключевым словом Экспорт, то они станут доступными вне документа, как обычные методы.
Часто таким образом производится печать документов, например, ниже приведена процедура печати расходной накладной:
Процедура Печать(ТабДок) Экспорт
//получение макета
Макет = Документы.РасходнаяНакладная.ПолучитьМакет("Печать");
//вывод шапки
Область = Макет.ПолучитьОбласть("Шапка");
Область.Параметры.НомерДокумента = Номер;
Область.Параметры.От = Дата;
ТабДок.Вывести(Область);
//вывод табличной части Состав
Для Каждого СтрокаСостава Из Состав Цикл
Область = Макет.ПолучитьОбласть("Строка");
Область.Параметры.Заполнить(СтрокаСостава);
ТабДок.Вывести(Область);
КонецЦикла;
//вывод подвала
Область = Макет.ПолучитьОбласть("Подвал");
Область.Параметры.ИтогоКоличество = Состав.Итог("Количество");
Область.Параметры.ИтогоСумма = Состав.Итог{"Сумма");
ТабДок.Вывести(Область);
КонецПроцедуры
Теперь в любом программном модуле можно вызвать эту процедуру и передать ей в качестве параметра табличный документ, который затем можно показать на экране или отправить сразу на принтер.
Например, в форме документа по кнопке «Печать» вызывается следующая процедура:
Процедура ПечатьСПросмотром(Кнопка)
ТабДок = Новый ТабличныйДокумент;
Печать(ТабДок); //вызывается приведенная выше процедура
ТабДок.Показать();
КонецПроцедуры
Аналогично, можно организовать печать текущей расходной накладной из журнала документов, и снова будет вызвана наша процедура Печать из модуля документа, например:
Процедура ПечатьТекущегоДокумента()
Список = ЭлементыФормы.Список,
Если Список.ТекущаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ТекДокумент = Список.ТекущаяСтрока.ПолучитьОбъект();
ТабДок = Новый ТабличныйДокумент;
ТекДокумент.Печать(ТабДок);
ТабДок.Показать();
КонецПроцедуры