Внешний вид планировщика день (объект управляемой формы 1С)
Внешний вид планировщика неделя (объект управляемой формы 1С)

Задача простейшая – подсветить каждому пользователю по известным периодам дня при вкладке день и неделя нерабочее время. Рабочее время известно и вычисляется как начало дня (справочник пользователи, дополнительный реквизит) и коэффициент, который варьируется от 0.01 до 1.00, показывающий, какая ставка у пользователя. Например, коэффициент на 1/4 ставки будет 0.25. Если у пользователя начало дня не указано, то он работает по стандартной схеме начала рабочего дня, поэтому получаем данные из константы.

Таким образом, длительность дня рассчитывается так: НачалоРабочегоДня + 8 * 60 *60 * Коэффициент = ВремяОкончанияРабочегоДня.

Все, что видимо до НачалаРабочегоДня требуется подсветить (как в Outlook), так же как и после окончания рабочего дня.

Используем следующий код:

		Планировщик.ИнтервалыФона.Добавить(НачалоДня(НачалоОтображенияВремени), НачалоОтображенияВремени);
		Планировщик.ИнтервалыФона.Добавить(ОкончаниеРабочегоВремени, КонецДня(ОкончаниеРабочегоВремени));
		Планировщик.ИнтервалыФона[0].Цвет = WebЦвета.БледноБирюзовый;
		Планировщик.ИнтервалыФона[1].Цвет = WebЦвета.БледноБирюзовый;

Но есть одно “но” – НачалоОтображенияВремени, ОкончаниеРабочегоВремени представляет собой только часы, то есть формат 01.01.0001 ЧЧ-ММ-СС

Поэтому формировать подсветку надо добавлением к началу дня, окончанию рабочего дня по каждой отображаемой дате в колонке время из переменных.

Очень долго висел вопрос “А где же планировщик хранит отображаемые даты?”

В результате ответ следующий:

	ДатаНачалаОтображения 			= Планировщик.НачалоПериодаОтображения; 
	ДатаОкончанияОтображения 		= Планировщик.КонецПериодаОтображения; 
	РазностьДат = Окр((ДатаОкончанияОтображения-ДатаНачалаОтображения)/3600,0,1); 
	СтруктураВремениПользователя 	= ПолучитьНачалоКонецДняПоПользователю(); 
	Для СчетчикЦикла = 0 По РазностьДат Цикл 
		ДеньПланировщика = НачалоДня(ДатаНачалаОтображения + СчетчикЦикла * 3600); 
		Планировщик.ИнтервалыФона.Добавить(ДеньПланировщика + 
						(СтруктураВремениПользователя.НачалоДня - НачалоДня(СтруктураВремениПользователя.НачалоДня)),
						ДеньПланировщика + (СтруктураВремениПользователя.КонецДня - НачалоДня(СтруктураВремениПользователя.НачалоДня)));
		Планировщик.ИнтервалыФона[СчетчикЦикла].Цвет = WebЦвета.СветлоЗеленый;
	КонецЦикла; 

После выполнения этого кода, получаем результат на форме, где цвет установлен для демонстрации скриншота на сайте (не делайте такой цвет, выглядит ужасно в 1С).

Результат работы кода подсветки планировщика 1С 8.3 управляемые формы