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


&НаКлиенте
Процедура КалендарьПриВыводеПериода(Элемент, ОформлениеПериода)
	
	// Защита от вызова до инициализации реквизитов формы
	Если ВидыДней = Неопределено Или ЦветаВидовДней = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Для Каждого СтрокаОформленияПериода Из ОформлениеПериода.Даты Цикл
		ТекущаяДата = НачалоДня(СтрокаОформленияПериода.Дата);
		
		// 1. Установка цвета текста в зависимости от вида дня (Рабочий, Суббота, Воскресенье, Праздник)
		ВидДня = ВидыДней.Получить(ТекущаяДата);
		ЦветОформленияДня = ?(ВидДня <> Неопределено, ЦветаВидовДней.Получить(ВидДня), Неопределено);
		
		Если ЦветОформленияДня = Неопределено Тогда
			ЦветОформленияДня = WebЦвета.Черный;
		КонецЕсли;
		
		СтрокаОформленияПериода.ЦветТекста = ЦветОформленияДня;
		
		// 2. Установка цвета фона по включению дня в рабочий график
		// Явно проверяем равенство Истина, так как Ложь <> Неопределено давало Истина для всех дней
		ДеньВГрафике = ?(ДниГрафика <> Неопределено, ДниГрафика.Получить(ТекущаяДата), Неопределено);
		Если ДеньВГрафике = Истина Тогда
			СтрокаОформленияПериода.ЦветФона = WebЦвета.Роса;
		Иначе
			СтрокаОформленияПериода.ЦветФона = WebЦвета.Белый;
		КонецЕсли;
		
		// 3. Установка цвета фона для нерабочих периодов
		Если НерабочиеДаты <> Неопределено И НерабочиеДаты.Найти(ТекущаяДата) <> Неопределено Тогда
			СтрокаОформленияПериода.ЦветФона = WebЦвета.Фиолетовый;
		КонецЕсли; 
	КонецЦикла; 
	
КонецПроцедуры

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

&НаКлиенте
Процедура ИзменитьВидыДней(ДатыДней, ВидДня)
	
	ВидыДнейСоответствие = Новый Соответствие(ВидыДней);
	
	Для Каждого ВыбраннаяДата Из ДатыДней Цикл
		ВидыДнейСоответствие.Вставить(НачалоДня(ВыбраннаяДата), ВидДня);
	КонецЦикла;
	
	ВидыДней = Новый ФиксированноеСоответствие(ВидыДнейСоответствие);
	
КонецПроцедуры