Каталог решений - Регламентные задания: коротко и ясно о детальных расписаниях

Регламентные задания: коротко и ясно о детальных расписаниях

Регламентные задания: коротко и ясно о детальных расписаниях

В наличии

Как программно создать регламентное задание и добавить детальные расписания для него.

Категория:

Описание

Столкнувшись с проблемой, аналогичной https://forum.infostart.ru/forum9/topic144288/, и не найдя решения на просторах инета, одни вопросы на эту тему, решил восполнить этот пробел. 

Итак, для работы с расписаниями регламентного задания в 1С используется объект РасписаниеРегламентногоЗадания.

Для интерактивного редактирования расписания предусмотрен диалог ДиалогРасписанияРегламентногоЗадания, который позволяет задать какое угодно расписание:

	Диалог = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); // создаем диалог
	Если Диалог.ОткрытьМодально() Тогда // открываем, настраиваем
		Расписание = Диалог.Расписание; //получаем расписание и дальше делаем с ним что угодно
	КонецЕсли;

Но что делать если мы хотим задавать расписание полностью программно? У объекта РасписаниеРегламентногоЗадания есть свойство ДетальныеРасписанияДня типа Массив объектов типа (сюрприз!) РасписаниеРегламентногоЗадания. Казалось бы, добавляем в это свойство необходимые интервалы и дело в шляпе. Но вот тут как раз и кроется подвох. Обычно, когда пытаются программно заполнить детальные расписания делают что-то наподобие такого:
 

    // пример как не надо:

    Расписание =  Новый РасписаниеРегламентногоЗадания; // создаем расписание
    ЗаполнитьЗначенияСвойств(Расписание, <ДеталиРасписания>);//заполняем свойства

    Расписание.ДетальныеРасписанияДня = Новый Массив; // задаем новый массив детальных расписаний, иногда это опускают 
            
    РасписаниеДт = Новый РасписаниеРегламентногоЗадания; //создаем интервал 
    ЗаполнитьЗначенияСвойств(РасписаниеДт, <ДеталиИнтервала1>);//заполняем свойства
    Расписание.ДетальныеРасписанияДня.Добавить(РасписаниеДт); // добавляем интервал в детальное расписание

    РасписаниеДт = Новый РасписаниеРегламентногоЗадания; //создаем еще один интервал 
    ЗаполнитьЗначенияСвойств(РасписаниеДт, <ДеталиИнтервала2>);//заполняем свойства
    Расписание.ДетальныеРасписанияДня.Добавить(РасписаниеДт); // добавляем второй интервал в детальное расписание

На первый взгляд все логично, все правильно — запускаем, проверяем, но… не работает! Детальные расписания не создаются.
Как обычно, дьявол кроется в деталях, для того чтобы корректно задать детальное расписание, необходимо создать отдельный массив, заполнить его, и только потом присвоить свойству ДетальныеРасписанияДня расписания:
 

    //пример как надо:
    Расписание =  Новый РасписаниеРегламентногоЗадания; // создаем расписание 

    МоеДетальноеРасписание = Новый Массив; // ключевой момент, если сделать Расписание.ДетальныеРасписанияДня = Новый Массив(), и добавлять интервалы туда - то кина не будет
            
    РасписаниеДт = Новый РасписаниеРегламентногоЗадания; //создаем первый интервал
    ЗаполнитьЗначенияСвойств(РасписаниеДт, <ДеталиИнтервала1>);//заполняем свойства
    МоеДетальноеРасписание.Добавить(РасписаниеДт); // добавляем в массив
                
    РасписаниеДт = Новый РасписаниеРегламентногоЗадания; //создаем второй интервал
    ЗаполнитьЗначенияСвойств(РасписаниеДт, <ДеталиИнтервала2>);//заполняем свойства
    МоеДетальноеРасписание.Добавить(РасписаниеДт); // добавляем в массив
                
    Расписание.ДетальныеРасписанияДня = МоеДетальноеРасписание; //присваиваем детальные расписания дня 

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

Кроме того, при задании свойств детального расписания следует помнить, что:

Расписание может содержать только значения следующих свойств: ВремяНачала, ВремяКонца, ВремяЗавершения, ИнтервалЗавершения, ПериодПовтораВТечениеДня, ПаузаПовтора. Если задано свойство ДетальныеРасписанияДня, то основное расписание не должно содержать вышеперечисленные свойства.

 Ну и напоследок под катом полный пример создания регзадания с детальным расписанием и параметрами:

 

has been added to your cart:
Оформление заказа