Загрузка данных


Функция РезультатЗаполненияПроизводственногоКалендаряПоУмолчанию(КодКалендаря, НомерГода, Знач КодБазовогоКалендаря = Неопределено) Экспорт
	
	ВидыДней = Новый Соответствие;
	ПереносыДней = Новый Соответствие;
	
	// Если есть данные в макете - используем их.
	// Сразу получаем данные еще и по базовому календарю, если он задан.
	КодыКалендарей = Новый Массив;
	КодыКалендарей.Добавить(КодКалендаря);
	ЕстьБазовыйКалендарь = Ложь;
	Если КодБазовогоКалендаря <> Неопределено Тогда
		КодыКалендарей.Добавить(КодБазовогоКалендаря);
		ЕстьБазовыйКалендарь = Истина;
	КонецЕсли;
	
	// Отбираем данные из макета по обоим календарям.
	// Получаем не полный набор, а только праздничные дни и переносы.
	ДанныеИзМакета = ДанныеПроизводственныхКалендарейПоУмолчанию(КодыКалендарей, Ложь);
	
	ОтборСтрок = Новый Структура("КодПроизводственногоКалендаря,Год");
	ОтборСтрок.Год = НомерГода;
	
	ЕстьДанныеКалендаря = Ложь;
	ОтборСтрок.КодПроизводственногоКалендаря = КодКалендаря;
	ДанныеКалендаря = ДанныеИзМакета.НайтиСтроки(ОтборСтрок);
	Если ДанныеКалендаря.Количество() > 0 Тогда
		ЕстьДанныеКалендаря = Истина;
		ЗаполнитьВидыДнейДаннымиКалендаря(ДанныеКалендаря, ВидыДней, ПереносыДней);
	КонецЕсли;
	
	// Проверяем, есть ли в макете данные базового календаря.
	ЕстьДанныеБазовогоКалендаря = Ложь;
	Если ЕстьБазовыйКалендарь Тогда
		ОтборСтрок.КодПроизводственногоКалендаря = КодБазовогоКалендаря;
		ДанныеКалендаря = ДанныеИзМакета.НайтиСтроки(ОтборСтрок);
		Если ДанныеКалендаря.Количество() > 0 Тогда
			ЕстьДанныеБазовогоКалендаря = Истина;
			Если Не ЕстьДанныеКалендаря Тогда
				ЗаполнитьВидыДнейДаннымиКалендаря(ДанныеКалендаря, ВидыДней, ПереносыДней);
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	// Дополняем данными по умолчанию на остальные дни.
	ДатаДня = Дата(НомерГода, 1, 1);
	Пока ДатаДня <= Дата(НомерГода, 12, 31) Цикл
		Если ВидыДней[ДатаДня] = Неопределено Тогда
			ВидыДней.Вставить(ДатаДня, ВидДняПоДате(ДатаДня));
		КонецЕсли;
		ДатаДня = ДатаДня + ДлинаСуток();
	КонецЦикла;
	
	// Если данных в макете не было, то обращаемся к заполнению постоянных праздников.
	Если Не ЕстьДанныеКалендаря Тогда
		Если ЕстьБазовыйКалендарь И ЕстьДанныеБазовогоКалендаря Тогда
			// Постоянные праздники базового календаря запрашиваем только если их не было в макете.
			КодБазовогоКалендаря = Неопределено;
		КонецЕсли;
		ЗаполнитьПостоянныеПраздничныеДни(ВидыДней, ПереносыДней, НомерГода, КодКалендаря, КодБазовогоКалендаря);
	КонецЕсли;
	
	// Преобразовываем в таблицу.
	ДанныеПроизводственногоКалендаря = НовыеДанныеПроизводственныхКалендарей();
	Для Каждого КлючИЗначение Из ВидыДней Цикл
		НоваяСтрока = ДанныеПроизводственногоКалендаря.Добавить();
		НоваяСтрока.Дата = КлючИЗначение.Ключ;
		НоваяСтрока.ВидДня = КлючИЗначение.Значение;
		ДатаПереноса = ПереносыДней[НоваяСтрока.Дата];
		Если ДатаПереноса <> Неопределено Тогда
			НоваяСтрока.ДатаПереноса = ДатаПереноса;
		КонецЕсли;
		НоваяСтрока.Год = НомерГода;
		НоваяСтрока.КодПроизводственногоКалендаря = КодКалендаря;
	КонецЦикла;
	
	ДанныеПроизводственногоКалендаря.Сортировать("Дата");
	
	Возврат ДанныеПроизводственногоКалендаря;
	
КонецФункции