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