//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++
//	|                 Базовый объект для классов с сохраняемыми атрибутами                      |
//	+                                      ShmalevoZ                                            +
//	|                                       2009-07                                             |
//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++

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


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


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


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


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


//******************************************************************************
// СохранитьАтрибутыОбъекта(ЗначенияАтрибутов, Схема)
//
// Параметры: 
//  ЗначенияАтрибутов, Схема
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Сохраняет значения атрибутов
//
Процедура СохранитьАтрибутыОбъекта(ЗначенияАтрибутов, Схема = "Конфигурация")
	
	//---------------------------------------------------------------------------------------------
	// Присвоим атрибутам новые значения
	Сервис	= СоздатьОбъект("Общие.Сервис.Прочее");
	КоличествоАтрибутов	= ЗначенияАтрибутов.КоличествоКолонок();
	Для НомерАтрибута = 1 По КоличествоАтрибутов Цикл
		Идентификатор	= ЗначенияАтрибутов.ПолучитьПараметрыКолонки(НомерАтрибута);
		_Стр			= Шаблон("[Сервис.Присвоить(_this()." + Идентификатор + ", ЗначенияАтрибутов.ПолучитьЗначение(1, НомерАтрибута))]");
	КонецЦикла;
	
	СохранитьСостояниеОбъекта(Схема);
	
КонецПроцедуры // СохранитьАтрибутыОбъекта()


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