//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++
//	|                         Абстрактная запись журнала расчетов                               |
//	+                                      ShmalevoZ                                            +
//	|                                       2009-11                                             |
//	+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++---+++

//---------------------------------------------------------------------------------------------
// Собственные атрибуты
Перем гИдентификатор;
Перем гСписокАтрибутов;


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


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


//******************************************************************************
// ВыброситьОшибку(Текст)
//
// Параметры: 
//  Текст					- текст сообщения
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Выбрасывает ошибку времени выполнения
//
Процедура ВыброситьОшибку(Текст)
	
	_this()._ВыброситьИскл(Текст);
	
КонецПроцедуры // ВыброситьОшибку()


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


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

		МетаЖурнал	= Метаданные.ЖурналРасчетов(Вид);
		Количество	= МетаЖурнал.Реквизит();
		Для Номер = 1 По Количество Цикл
			гСписокАтрибутов.ДобавитьЗначение(МетаЖурнал.Реквизит(Номер).Идентификатор);
		КонецЦикла;
		
		Количество	= гСписокАтрибутов.РазмерСписка();
		Для Номер = 1 По Количество Цикл
			_this().ДобавитьАтрибут(гСписокАтрибутов.ПолучитьЗначение(Номер));
		КонецЦикла;
	КонецЕсли;
	
	Возврат Результат;
КонецФункции // ИспользоватьЖурнал()


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


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

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