Перем КонтекстФормы Экспорт;
//Перем РасширениеФормы;

Функция Конт(Конт) Возврат Конт; КонецФункции
Функция Сам() Возврат Конт(Контекст); КонецФункции

Процедура ЗакрытьФорму() Экспорт
	Если ТипЗначенияСтр(КонтекстФормы)<>"ГрупповойКонтекст" Тогда Возврат; КонецЕсли;
	
	Система = СоздатьОбъект("Система");
	Если Система.ЗакрытьФорму(КонтекстФормы, 0) = 0 Тогда
		КонтекстФормы.Форма.Закрыть(0);
	КонецЕсли;
КонецПроцедуры
//--------------------------------------------

Процедура Деструктор()
// имхо не нужен - artbear
	ЗакрытьФорму();
КонецПроцедуры
//--------------------------------------------

Процедура УстановитьКонтекст(Конт) Экспорт
	КонтекстФормы=Конт;
	//РасширениеФормы.УстановитьФорму(КонтекстФормы.Форма);
	//спОткрытыеКонтексты.ДобавитьЗначение(КонтекстФормы);
КонецПроцедуры
//--------------------------------------------

Функция ОткрытьФорму() Экспорт
Перем Пар[5];
	Если ТипЗначенияСтр(КонтекстФормы)="ГрупповойКонтекст" Тогда
		Модуль=СоздатьОбъект("ВыполняемыйМодуль");
		Модуль.ВыброситьИскл("Форма уже открыта");
	КонецЕсли;
	
	спПараметры=Сам().ПолучитьСписокПараметров("ОткрытьФорму");
	Для ъ=1 По спПараметры.РазмерСписка() Цикл
		Пар[ъ]=спПараметры.ПолучитьЗначение(ъ);
	КонецЦикла;
	
	КонтекстФормы="";
	Конт=Пар[2];
	Если OpenForm(Пар[1], Конт, Пар[3], Пар[4], Пар[5])=0 Тогда
		Модуль=СоздатьОбъект("ВыполняемыйМодуль");
		Модуль.ВыброситьИскл("Ошибка открытия формы");
	КонецЕсли;
	УстановитьКонтекст(Конт);
	Возврат Конт;
КонецФункции
//--------------------------------------------

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

//Процедура дфВвестиЗначение(идРеквизита, Значение) Экспорт 
//	Атрибут=РасширениеФормы.ПолучитьАтрибут(идРеквизита);
//	Атрибут.Значение=Значение;
//	дфВыполнитьФормулу(Атрибут);
//КонецПроцедуры
////--------------------------------------------
