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