Загрузка данных
Чтобы отследить, откуда берутся данные и сработала ли загрузка из регистра или дефолтного макета, можно добавить вывод сообщений в ключевые точки `ПрочитатьДанныеПроизводственногоКалендаря`.
### Куда добавить комментарии и отладку
```bsl
&НаСервере
Процедура ПрочитатьДанныеПроизводственногоКалендаря(ПроизводственныйКалендарь, НомерГода)
// 1. Получаем данные из регистра сведений
ТЗДанные = Справочники.ГрафикРаботы.ДанныеПроизводственногоКалендаря(ПроизводственныйКалендарь, НомерГода);
// Очередь проверки: сколько строк реально прочиталось из регистра
Сообщить(СтрШаблон("[ОТЛАДКА] Из регистра прочитано строк: %1", ТЗДанные.Количество()));
// 2. Если в регистре пусто — переходим на заполнение по умолчанию
Если ТЗДанные.Количество() = 0 И ЗначениеЗаполнено(Объект.ПроизводственныйКалендарь) Тогда
Сообщить("[ОТЛАДКА] Регистр пуст! Вызывается заполнение по умолчанию из макета/функции.");
ТЗДанные = Справочники.ГрафикРаботы.РезультатЗаполненияПроизводственногоКалендаряПоУмолчанию(
Объект.ПроизводственныйКалендарь, НомерГода, Объект.ПроизводственныйКалендарь
);
Сообщить(СтрШаблон("[ОТЛАДКА] Из макета по умолчанию сформировано строк: %1", ТЗДанные.Количество()));
КонецЕсли;
ПреобразоватьДанныеПроизводственногоКалендаря(ТЗДанные);
КонецПроцедуры
```
```bsl
&НаСервере
Процедура ПреобразоватьДанныеПроизводственногоКалендаря(ДанныеПроизводственногоКалендаря)
ВидыДнейСоответствие = Новый Соответствие;
ПереносыДнейСоответствие = Новый Соответствие;
Для Каждого СтрокаТаблицы Из ДанныеПроизводственногоКалендаря Цикл
ВидыДнейСоответствие.Вставить(СтрокаТаблицы.Дата, СтрокаТаблицы.ВидДня);
Если ЗначениеЗаполнено(СтрокаТаблицы.ДатаПереноса) Тогда
ПереносыДнейСоответствие.Вставить(СтрокаТаблицы.Дата, СтрокаТаблицы.ДатаПереноса);
КонецЕсли;
КонецЦикла;
// Проверяем, сколько уникальных дат попало в массив до генерации отсутствующих дней
Сообщить(СтрШаблон("[ОТЛАДКА] В соответствие видов дней загружено исходных дат: %1", ВидыДнейСоответствие.Количество()));
// Дополнение отсутствующих дней года
ДатаДня = Дата(НомерТекущегоГода, 1, 1);
ДатаОкончания = Дата(НомерТекущегоГода, 12, 31);
СчетчикДописанныхДней = 0;
Пока ДатаДня <= ДатаОкончания Цикл
Если ВидыДнейСоответствие[ДатаДня] = Неопределено Тогда
НомерДня = ДеньНедели(ДатаДня);
Если НомерДня <= 5 Тогда
ВидДняПоУмолчанию = Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий;
ИначеЕсли НомерДня = 6 Тогда
ВидДняПоУмолчанию = Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота;
Иначе
ВидДняПоУмолчанию = Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье;
КонецЕсли;
ВидыДнейСоответствие.Вставить(ДатаДня, ВидДняПоУмолчанию);
СчетчикДописанныхДней = СчетчикДописанныхДней + 1;
КонецЕсли;
ДатаДня = ДатаДня + 86400;
КонецЦикла;
Сообщить(СтрШаблон("[ОТЛАДКА] Автоматически дозаполнено пропущенных дней: %1", СчетчикДописанныхДней));
Сообщить(СтрШаблон("[ОТЛАДКА] Итого дней в соответствии: %1", ВидыДнейСоответствие.Количество()));
ВидыДней = Новый ФиксированноеСоответствие(ВидыДнейСоответствие);
ПереносыДней = Новый ФиксированноеСоответствие(ПереносыДнейСоответствие);
КонецПроцедуры
```
### Что будет видно в окне сообщений:
* Если из регистра прочитано больше 0 строк, значит записи были в базе.
* Если прочитано 0 строк и выводится сообщение про макет — регистр был пуст.
* По значению `Автоматически дозаполнено пропущенных дней` будет видно, сколько именно дней пришлось рассчитывать вручную на лету.