//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++
//	|                            Абстрактная фабрика событий                                    |
//	+                                      ShmalevoZ                                            +
//	|                                       2009-06                                             |
//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++

//---------------------------------------------------------------------------------------------
// Собственные атрибуты
Перем гТаблицаИнформацииОПубликуемыхСобытиях;
Перем гАбстрактноеСобытие;


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


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


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


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


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


//******************************************************************************
// ПолучитьСтрокуПубликуемыхСобытий()
//
// Параметры: 
//  
//
// Возвращаемое значение:
//  Строка
//
// Описание:
//  Возвращает строку публикуемых событий с разделителем запятая
//
Функция ПолучитьСтрокуПубликуемыхСобытий() Экспорт
	
	Результат	= "";
	Список		= _this().ПолучитьСписокПубликуемыхСобытий();
	Количество	= Список.РазмерСписка();
	Для Номер = 1 По Количество Цикл
		Результат	= Результат + Список.ПолучитьЗначение(Номер) + ",";
	КонецЦикла;
	Результат	= Лев(Результат, СтрДлина(Результат) - 1);
	
	Возврат Результат;
КонецФункции // ПолучитьСтрокуПубликуемыхСобытий()


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