//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++
//	|                          Фабрика событий компоненты 1С++                                  |
//	+                                      ShmalevoZ                                            +
//	|                                       2009-06                                             |
//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++

//---------------------------------------------------------------------------------------------
// Собственные атрибуты
Перем гПерехватчик;


//******************************************************************************
// НормализоватьКонтекст(СсылаКонтекст)
//
// Параметры: 
//  СсылаКонтекст
//
// Возвращаемое значение:
//  Неопределенный
//
// Описание:
//  Возвращает ссылка на переданный контекст
//
Функция НормализоватьКонтекст(СсылаКонтекст)
	
	Возврат СсылаКонтекст;
	
КонецФункции // НормализоватьКонтекст()


//******************************************************************************
// _this()
//
// Параметры: 
//  СсылкаКонтекст			- контекст
//
// Возвращаемое значение:
//  ГрупповойКонтекст		- ссылка на контекст
//
// Описание:
//  Возвращает ссылку на контекст
//
Функция _this()
	
	Возврат НормализоватьКонтекст(Контекст);
	
КонецФункции // _this()


//******************************************************************************
// Конструктор()
//
// Параметры: 
//  
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Предопределенный метод
//
Процедура Конструктор()
	
	_this().ДобавитьОписаниеСобытия("ПриНачалеРаботыСистемы", 								0);
	_this().ДобавитьОписаниеСобытия("ПриЗавершенииРаботыСистемы",							0);
	_this().ДобавитьОписаниеСобытия("ПриУдаленииЭлемента", 									2);
	_this().ДобавитьОписаниеСобытия("ПриОткрытииИстории",									3);
	_this().ДобавитьОписаниеСобытия("ПриЗаписиИстории",										4);
	_this().ДобавитьОписаниеСобытия("ПриУдаленииИстории",									4);
	_this().ДобавитьОписаниеСобытия("ПриЗаписиКонстанты",									2);
	_this().ДобавитьОписаниеСобытия("ПриУдаленииДокумента",									2);
	_this().ДобавитьОписаниеСобытия("ПриИзмененииВремениДокумента",							1);
	_this().ДобавитьОписаниеСобытия("ПриОтменеПроведенияДокумента",							1);
	_this().ДобавитьОписаниеСобытия("ПриУстановкеОтбора",									2);
	_this().ДобавитьОписаниеСобытия("ПриУдаленииСчета",										2);
	_this().ДобавитьОписаниеСобытия("ПриВклВыклПроводокОперации",							1);
	_this().ДобавитьОписаниеСобытия("ПриСменеРасчетногоПериода",							2);
	_this().ДобавитьОписаниеСобытия("ОбработкаЯчейкиТаблицы",								4);
	_this().ДобавитьОписаниеСобытия("ОбработкаВнешнегоСобытия",								3);
	_this().ДобавитьОписаниеСобытия("НеобработаннаяОшибка",									6);
	_this().ДобавитьОписаниеСобытия("ЗаписьЖурналаРегистрации",								6);
	_this().ДобавитьОписаниеСобытия("ЗаписьПользовательскогоСобытияЖурналаРегистрации",		6);
	_this().ДобавитьОписаниеСобытия("ПриЗагрузкеМодуляФормы",								1);
	_this().ДобавитьОписаниеСобытия("ПриЗагрузкеВнешнегоОтчета",							1);
	_this().ДобавитьОписаниеСобытия("СозданиеКонтекста",									1);
	_this().ДобавитьОписаниеСобытия("ПриОткрытии",											1);
	_this().ДобавитьОписаниеСобытия("ДоСобытияОбработкаПроведения",							2);
	_this().ДобавитьОписаниеСобытия("ПослеСобытияОбработкаПроведения",						2);
	
	//---------------------------------------------------------------------------------------------
	// Установим перехват событий на себя
	УправлениеНастройками	= СоздатьОбъект("УправлениеНастройками");
	УправлениеНастройками.Включить("ПерехватитьСобытияГК");
	гПерехватчик	= СоздатьОбъект("Перехватчик");
	гПерехватчик.ПодключитьСобытие_НеобработаннаяОшибка();
	гПерехватчик.ПодключитьСобытие_ЗаписьСобытияЖурналаРегистрации();
	гПерехватчик.ПодключитьСобытие_ЗаписьПользовательскогоСобытияЖурналаРегистрации();
	гПерехватчик.ПерехватитьСобытияГлобальногоМодуля(_this());
	//---------------------------------------------------------------------------------------------
	// Включим перехват проведения документов
	Количество	= Метаданные.Документ();
	Для НомерДокумента = 1 По Количество Цикл
		МетаДокумент	= Метаданные.Документ(НомерДокумента);
		Состояние("Перехват проведения " + МетаДокумент.Представление());
		гПерехватчик.ПерехватитьСобытияПроведенияДокумента(МетаДокумент.Идентификатор, _this());
	КонецЦикла;
	
КонецПроцедуры // Конструктор()


//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++
//	|                                                                                           |
//	+                                  Перехватчики событий                                     +
//	|                                                                                           |
//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++


//******************************************************************************
// СобытиеГМ_ПриНачалеРаботыСистемы()
//
// Параметры: 
//  
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриНачалеРаботыСистемы() Экспорт
	
	Событие		= "ПриНачалеРаботыСистемы";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриНачалеРаботыСистемы()



//******************************************************************************
// СобытиеГМ_ПриЗавершенииРаботыСистемы()
//
// Параметры: 
//  
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриЗавершенииРаботыСистемы() Экспорт
	
	Событие		= "ПриЗавершенииРаботыСистемы";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриЗавершенииРаботыСистемы()


//******************************************************************************
// СобытиеГМ_ПриУдаленииЭлемента()
//
// Параметры: 
//  СсылкаЭлемент, Режим
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриУдаленииЭлемента(СсылкаЭлемент, Режим) Экспорт
	
	Событие		= "ПриУдаленииЭлемента";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, СсылкаЭлемент, Режим);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, СсылкаЭлемент, Режим);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриУдаленииЭлемента()


//******************************************************************************
// СобытиеГМ_ПриОткрытииИстории()
//
// Параметры: 
//  ТипОбъекта, СсылкаОбъект, ТолькоПросмотр
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриОткрытииИстории(ТипОбъекта, СсылкаОбъект, ТолькоПросмотр) Экспорт
	
	Событие		= "ПриОткрытииИстории";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, ТипОбъекта, СсылкаОбъект, ТолькоПросмотр);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, ТипОбъекта, СсылкаОбъект, ТолькоПросмотр);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриОткрытииИстории()


//******************************************************************************
// СобытиеГМ_ПриЗаписиИстории()
//
// Параметры: 
//  ТипОбъекта, СсылкаОбъект, Значение, ДатаИстории
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриЗаписиИстории(ТипОбъекта, СсылкаОбъект, Значение, ДатаИстории) Экспорт
	
	Событие		= "ПриЗаписиИстории";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, ТипОбъекта, СсылкаОбъект, Значение, ДатаИстории);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, ТипОбъекта, СсылкаОбъект, Значение, ДатаИстории);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриЗаписиИстории()


//******************************************************************************
// СобытиеГМ_ПриУдаленииИстории()
//
// Параметры: 
//  ТипОбъекта, СсылкаОбъект, Значение, ДатаИстории
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриУдаленииИстории(ТипОбъекта, СсылкаОбъект, Значение, ДатаИстории) Экспорт
	
	Событие		= "ПриУдаленииИстории";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, ТипОбъекта, СсылкаОбъект, Значение, ДатаИстории);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, ТипОбъекта, СсылкаОбъект, Значение, ДатаИстории);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриУдаленииИстории()


//******************************************************************************
// СобытиеГМ_ПриЗаписиКонстанты()
//
// Параметры: 
//  Идентификатор, Значение
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриЗаписиКонстанты(Идентификатор, Значение) Экспорт
	
	Событие		= "ПриЗаписиКонстанты";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, Идентификатор, Значение);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, Идентификатор, Значение);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриЗаписиКонстанты()


//******************************************************************************
// СобытиеГМ_ПриУдаленииДокумента()
//
// Параметры: 
//  СсылкаДокумент, Режим
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриУдаленииДокумента(СсылкаДокумент, Режим) Экспорт
	
	Событие		= "ПриУдаленииДокумента";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, СсылкаДокумент, Режим);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, СсылкаДокумент, Режим);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриУдаленииДокумента()


//******************************************************************************
// СобытиеГМ_ПриИзмененииВремениДокумента(СсылкаДокумент)
//
// Параметры: 
//  СсылкаДокумент
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриИзмененииВремениДокумента(СсылкаДокумент) Экспорт
	
	Событие		= "ПриИзмененииВремениДокумента";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, СсылкаДокумент);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, СсылкаДокумент);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриИзмененииВремениДокумента()


//******************************************************************************
// СобытиеГМ_ПриОтменеПроведенияДокумента(СсылкаДокумент)
//
// Параметры: 
//  СсылкаДокумент
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриОтменеПроведенияДокумента(СсылкаДокумент) Экспорт
	
	Событие		= "ПриОтменеПроведенияДокумента";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, СсылкаДокумент);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, СсылкаДокумент);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриОтменеПроведенияДокумента()


//******************************************************************************
// СобытиеГМ_ПриУстановкеОтбора(Идентификатор, Значение)
//
// Параметры: 
//  Идентификатор, Значение
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриУстановкеОтбора(Идентификатор, Значение) Экспорт
	
	Событие		= "ПриУстановкеОтбора";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, Идентификатор, Значение);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, Идентификатор, Значение);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриУстановкеОтбора()


//******************************************************************************
// СобытиеГМ_ПриУдаленииСчета(СсылкаСчет, Режим)
//
// Параметры: 
//  СсылкаСчет, Режим
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриУдаленииСчета(СсылкаСчет, Режим) Экспорт
	
	Событие		= "ПриУдаленииСчета";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, СсылкаСчет, Режим);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, СсылкаСчет, Режим);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриУдаленииСчета()


//******************************************************************************
// СобытиеГМ_ПриВклВыклПроводокОперации(СсылкаДокумент)
//
// Параметры: 
//  СсылкаДокумент
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриВклВыклПроводокОперации(СсылкаДокумент) Экспорт
	
	Событие		= "ПриВклВыклПроводокОперации";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, СсылкаДокумент);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, СсылкаДокумент);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриВклВыклПроводокОперации()


//******************************************************************************
// СобытиеГМ_ПриСменеРасчетногоПериода(СсылкаЖурналРасчетов, ПериодРасчета)
//
// Параметры: 
//  СсылкаЖурналРасчетов, ПериодРасчета
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриСменеРасчетногоПериода(СсылкаЖурналРасчетов, ПериодРасчета) Экспорт
	
	Событие		= "ПриСменеРасчетногоПериода";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, СсылкаЖурналРасчетов, ПериодРасчета);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, СсылкаЖурналРасчетов, ПериодРасчета);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриСменеРасчетногоПериода()


//******************************************************************************
// СобытиеГМ_ОбработкаЯчейкиТаблицы()
//
// Параметры: 
//  Значение, СтандартнаяОбработка, СсылкаТаблица, Адрес
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ОбработкаЯчейкиТаблицы(Значение, СтандартнаяОбработка, СсылкаТаблица, Адрес) Экспорт
	
	Событие		= "ОбработкаЯчейкиТаблицы";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, Значение, СтандартнаяОбработка, СсылкаТаблица, Адрес);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, Значение, СтандартнаяОбработка, СсылкаТаблица, Адрес);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ОбработкаЯчейкиТаблицы()


//******************************************************************************
// СобытиеГМ_ОбработкаВнешнегоСобытия(Источник, ВнешнееСобытие, Данные)
//
// Параметры: 
//  Источник, ВнешнееСобытие, Данные
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ОбработкаВнешнегоСобытия(Источник, ВнешнееСобытие, Данные) Экспорт
	
	Событие		= "ОбработкаВнешнегоСобытия";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, Источник, ВнешнееСобытие, Данные);

	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, Источник, ВнешнееСобытие, Данные);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ОбработкаВнешнегоСобытия()


//******************************************************************************
// Событие_НеобработаннаяОшибка()
//
// Параметры: 
//  СообщениеОбОшибке, Маркер, ИмяФайла, Парам4, НомерСтрокиОшибки, Парам6
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция Событие_НеобработаннаяОшибка(СообщениеОбОшибке, Маркер, ИмяФайла, Парам4, НомерСтрокиОшибки, Парам6) Экспорт
	
	Событие		= "НеобработаннаяОшибка";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, СообщениеОбОшибке, Маркер, ИмяФайла, Парам4, НомерСтрокиОшибки, Парам6);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, СообщениеОбОшибке, Маркер, ИмяФайла, Парам4, НомерСтрокиОшибки, Парам6);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // Событие_НеобработаннаяОшибка()


//******************************************************************************
// Событие_ЗаписьЖурналаРегистрации()
//
// Параметры: 
//  Категория, Событие, ТипСобытия, Комментарий, СсылкаОбъект, ПредставлениеОбъекта
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция Событие_ЗаписьЖурналаРегистрации(Категория, Событие, ТипСобытия, Комментарий, СсылкаОбъект, ПредставлениеОбъекта) Экспорт
	
	_Событие		= "ЗаписьЖурналаРегистрации";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(_Событие, Категория, Событие, ТипСобытия, Комментарий, СсылкаОбъект, ПредставлениеОбъекта);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(_Событие, Категория, Событие, ТипСобытия, Комментарий, СсылкаОбъект, ПредставлениеОбъекта);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // Событие_ЗаписьЖурналаРегистрации()


//******************************************************************************
// Событие_ЗаписьПользовательскогоСобытияЖурналаРегистрации()
//
// Параметры: 
//  Категория, Событие, ТипСобытия, Комментарий, СсылкаОбъект, ПредставлениеОбъекта
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция Событие_ЗаписьПользовательскогоСобытияЖурналаРегистрации(Категория, Событие, ТипСобытия, Комментарий, СсылкаОбъект, ПредставлениеОбъекта) Экспорт
	
	_Событие		= "ЗаписьПользовательскогоСобытияЖурналаРегистрации";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(_Событие, Категория, Событие, ТипСобытия, Комментарий, СсылкаОбъект, ПредставлениеОбъекта);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(_Событие, Категория, Событие, ТипСобытия, Комментарий, СсылкаОбъект, ПредставлениеОбъекта);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // Событие_ЗаписьПользовательскогоСобытияЖурналаРегистрации()


//******************************************************************************
// СобытиеГМ_ПриЗагрузкеМодуляФормы(ИдентификтаорОбъекта)
//
// Параметры: 
//  ИдентификтаорОбъекта
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриЗагрузкеМодуляФормы(ИдентификтаорОбъекта) Экспорт
	
	Событие		= "ПриЗагрузкеМодуляФормы";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, ИдентификтаорОбъекта);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, ИдентификтаорОбъекта);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриЗагрузкеМодуляФормы()


//******************************************************************************
// СобытиеГМ_ПриЗагрузкеВнешнегоОтчета(ИдентификаторОбъекта)
//
// Параметры: 
//  ИдентификаторОбъекта
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриЗагрузкеВнешнегоОтчета(ИдентификаторОбъекта) Экспорт
	
	Событие		= "ПриЗагрузкеВнешнегоОтчета";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, ИдентификаторОбъекта);
	
	Если Результат = 1 Тогда
		Результат	= гПерехватчик.ВыполнитьОригинальноеСобытиеГлобальногоМодуля(Событие, ИдентификаторОбъекта);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриЗагрузкеВнешнегоОтчета()


//******************************************************************************
// СобытиеГМ_СозданиеКонтекста(СсылкаКонтекст)
//
// Параметры: 
//  СсылкаКонтекст
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_СозданиеКонтекста(СсылкаКонтекст) Экспорт
	
	Событие		= "СозданиеКонтекста";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, СсылкаКонтекст);
	
	Возврат Результат;
КонецФункции // СобытиеГМ_СозданиеКонтекста()


//******************************************************************************
// СобытиеГМ_ПриОткрытии(СсылкаКонтекст)
//
// Параметры: 
//  СсылкаКонтекст
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ПриОткрытии(СсылкаКонтекст) Экспорт
	
	Событие		= "ПриОткрытии";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, СсылкаКонтекст);
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ПриОткрытии()


//******************************************************************************
// СобытиеГМ_ВводНового(СсылкаКонтекст, ФлагКопирования, ОбъектКопирования)
//
// Параметры: 
//  СсылкаКонтекст, ФлагКопирования, ОбъектКопирования
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ВводНового(СсылкаКонтекст, ФлагКопирования, ОбъектКопирования) Экспорт
	
	Событие		= "ВводНового";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, СсылкаКонтекст, ФлагКопирования, ОбъектКопирования);
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ВводНового()


//******************************************************************************
// СобытиеГМ_ВводНаОсновании(СсылкаКонтекст, СсылкаОснование)
//
// Параметры: 
//  СсылкаКонтекст, СсылкаОснование
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция СобытиеГМ_ВводНаОсновании(СсылкаКонтекст, СсылкаОснование) Экспорт
	
	Событие		= "ВводНаОсновании";
	Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать(Событие, СсылкаКонтекст, СсылкаОснование);
	
	Возврат Результат;
КонецФункции // СобытиеГМ_ВводНаОсновании()


//******************************************************************************
// ПолучитьТаблицуМетодов(Информатор, СсылкаКонтекст)
//
// Параметры: 
//  Информатор, СсылкаКонтекст
//
// Возвращаемое значение:
//  ТаблицаЗначений
//
// Описание:
//  Вовзращат таблицу методов
//
Функция ПолучитьТаблицуМетодов(Информатор, СсылкаКонтекст)
	
	Результат	= Информатор.ПолучитьТаблицуМетодов(СсылкаКонтекст);
	Результат.НоваяКолонка("Индекс");
	Результат.ВыбратьСтроки();
	Пока Результат.ПолучитьСтроку() = 1 Цикл
		Результат.Индекс	= НРег(СокрЛП(Результат.NameEng));
	КонецЦикла;
	
	Возврат Результат;
КонецФункции // ПолучитьТаблицуМетодов()


//******************************************************************************
// ПолучитьНомерПоследнейСтрокиТелаМодуля(Текст)
//
// Параметры: 
//  Текст
//
// Возвращаемое значение:
//  Число
//
// Описание:
//  Возвращает номер последней строки тела модуля (до блока инициализации)
//
Функция ПолучитьНомерПоследнейСтрокиТелаМодуля(Текст)
	
	Результат	= СтрКоличествоСтрок(Текст);
	
	Пока Результат >= 1 Цикл
		
		СтрокаМодуля	= СтрПолучитьСтроку(Текст, Результат);
		Стр				= НРег(СокрЛП(СтрЗаменить(СтрЗаменить(СтрокаМодуля, " ", ""), СимволТабуляции, "")));
		Если (Лев(Стр, 14) = "конецпроцедуры") или (Лев(Стр, 12) = "конецфункции") Тогда
			Прервать;
		КонецЕсли;
		
		Результат	= Результат - 1;
	КонецЦикла;
	
	Возврат Результат;
КонецФункции // ПолучитьНомерПоследнейСтрокиТелаМодуля()


//******************************************************************************
// Событие_ОбработкаПроведения(СсылкаКонтекст, Параметр)
//
// Параметры: 
//  СсылкаКонтекст, Параметр
//
// Возвращаемое значение:
//  Число
//
// Описание:
//  Вызывается при проведении документа
//
Функция Событие_ОбработкаПроведения(СсылкаКонтекст, Параметр) Экспорт
	
	Перехватчик	= СоздатьОбъект("Перехватчик");
	Событие		= "ОбработкаПроведения";
	Результат	=_this().ПолучитьАбстрактноеСобытие().Опубликовать("ДоСобытия" + Событие, СсылкаКонтекст, Параметр);
	
	Если Результат = 1 Тогда
		
		//---------------------------------------------------------------------------------------------
		// Приходится использовать вот такую странную конструкцию.
		// Побочный эффект - невозможность прерывания проведения
		Информатор			= СоздатьОбъект("Информатор");
		ТаблицаМетодов		= ПолучитьТаблицуМетодов(Информатор, СсылкаКонтекст);
		НомерСтроки			= 0;
		
		//---------------------------------------------------------------------------------------------
		// Если есть родной метод ОбработкаПроведения, то вызовем его
		Если ТаблицаМетодов.НайтиЗначение("обработкапроведения", НомерСтроки, "Индекс") = 1 Тогда
			
			КоличествоПараметров			= ТаблицаМетодов.ПолучитьЗначение(НомерСтроки, "NParams");
			ИсходныйТекстМодуля				= Информатор.ПолучитьТекстМодуля(СсылкаКонтекст);
			НомерПоследнейСтрокиТелаМодуля	= ПолучитьНомерПоследнейСтрокиТелаМодуля(ИсходныйТекстМодуля);
			
			//---------------------------------------------------------------------------------------------
			// Сначала тело модуля
			ТекстМодуля	= "";
			Для НомерСтрокиМодуля = 1 По НомерПоследнейСтрокиТелаМодуля Цикл
				ТекстМодуля	= ТекстМодуля + СтрПолучитьСтроку(ИсходныйТекстМодуля, НомерСтрокиМодуля) + РазделительСтрок;
			КонецЦикла;
			//---------------------------------------------------------------------------------------------
			// Добавим к нему собственный метод
			ТекстМодуля				= ТекстМодуля + "
			| Функция __ОбработкаПроведения__(Параметр) Экспорт
			|	СтатусВозврата(1);
			|	
			|";
			Если КоличествоПараметров = 1 Тогда
				ТекстМодуля	= ТекстМодуля + "
				|	ОбработкаПроведения(Параметр);
				|";
			Иначе
				ТекстМодуля	= ТекстМодуля + "
				|	ОбработкаПроведения();
				|";
			КонецЕсли;
			ТекстМодуля	= ТекстМодуля + "
			|	Возврат СтатусВозврата();
			| КонецФункции
			|";
			//---------------------------------------------------------------------------------------------
			// И добавим блок инициализации модуля
			Для НомерСтрокиМодуля = НомерПоследнейСтрокиТелаМодуля + 1 По СтрКоличествоСтрок(ИсходныйТекстМодуля) Цикл
				ТекстМодуля	= ТекстМодуля + СтрПолучитьСтроку(ИсходныйТекстМодуля, НомерСтрокиМодуля) + РазделительСтрок;
			КонецЦикла;
			
			Модуль	= СоздатьОбъект("ВыполняемыйМодуль");
			Модуль.НазначитьКонтекст(СсылкаКонтекст);
			Модуль.УстановитьМодуль(ТекстМодуля);
			Если Модуль.КомпилироватьМодуль() = 0 Тогда
				Предупреждение("Неудачная попытка компиляции модуля!");
				Возврат 0;
			КонецЕсли;
			Модуль.ВыполнитьМодуль();
			Модуль.ПрисоединитьТекущийМодуль();
			
			Результат	= Модуль.__ОбработкаПроведения__(Параметр);
		КонецЕсли;
	КонецЕсли;
	
	Если Результат = 1 Тогда
		Результат	= _this().ПолучитьАбстрактноеСобытие().Опубликовать("ПослеСобытия" + Событие, СсылкаКонтекст, Параметр);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // Событие_ОбработкаПроведения()
