//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++
//	|                          Сохраняемые параметры объектов                                   |
//	+                                      ShmalevoZ                                            +
//	|                                       2008-11                                             |
//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++

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


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


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


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


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


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


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


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


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


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


//******************************************************************************
// Существует(Идентификатор)
//
// Параметры: 
//  Идентификатор
//
// Возвращаемое значение:
//  Число					- флаг существования параметра
//
// Описание:
//  Проверяет существование параметра
//
Функция Существует(Идентификатор) Экспорт
	
	Результат	= Мин(1, ПолучитьНомерПараметраПоИдентификатору(Идентификатор));
	
	Возврат Результат;
КонецФункции // Существует()


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


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

