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

04.03.21

Задачи пользователя - Адаптация типовых решений

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

 


    

    //Зададим параметры интервалов
    Интервалы = Новый Массив;
    Интервалы.Добавить(Новый Структура("ВремяНачала, ВремяКонца, ПериодПовтораВТечениеДня", Дата(1,1,1,5,0,0), Дата(1,1,1,13,0,0), 300));
    Интервалы.Добавить(Новый Структура("ВремяНачала, ВремяКонца, ПериодПовтораВТечениеДня", Дата(1,1,1,13,45,0), Дата(1,1,1,5,0,0), 300));

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

    // заполним свойства регзадания
    НовоеЗадание.Наименование = "Мое регзадание";
    НовоеЗадание.Использование = Истина;

    Парам = Новый Массив;
    //  Парам.Добавить(<параметр>); добавляем параметры если нужно

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

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

    Расписание.ДетальныеРасписанияДня = ДетальныеРасписанияДня; //присваиваем детальные расписания дня
    НовоеЗадание.Расписание = Расписание; // присваиваем расписание нашему регзаданию
                
    НовоеЗадание.Записать(); //записываем задание


 

Enjoy!

регзадания расписание ДетальныеРасписанияДня

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4454    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2958    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1304    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    1998    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2078    21    progmaster    7    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Cmapnep 18 05.03.21 08:25 Сейчас в теме
Описанная проблема с высокой долей вероятности является багом, который стоит зарегистрировать
2. user1502278 229 05.03.21 17:08 Сейчас в теме
(1) Да разработчики в курсе, просто это, видимо, настолько неприоритетная задача, что даже за 10+ лет до нее очередь не дошла.
Obertone; Cmapnep; +2 Ответить
3. Yashazz 4709 08.03.21 18:18 Сейчас в теме
Да. Есть такое. Лет 8 назад мне бы эта публикация сильно пригодилось, а так пришлось методом тыка самому. Автору спасибо в любом случае.
Obertone; user1502278; +2 Ответить
4. shoy 19 23.09.21 17:06 Сейчас в теме
А мне то как раз пригодилась!
Автору большой плюс.

Не пришлось возиться с проблемой.
Dmitri93; Obertone; user1502278; +3 Ответить
5. Obertone 74 19.01.22 13:02 Сейчас в теме
Очень помогла статья с редактированием расписания регламентного задания, благодарю!
6. kser87 2438 16.11.22 17:49 Сейчас в теме
Статья помогла, спасибо. Как обычно, все просто у 1С. Но есть нюанс
7. apic 13 04.08.23 07:48 Сейчас в теме
Несколько интервалов в конфигураторе вроде же нельзя создать? Или я ошибаюсь? Такое только програмно возможно?
Оставьте свое сообщение