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