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

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!

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

См. также

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

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

7200 руб.

02.08.2023    4172    15    1    

33

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

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

29400 руб.

29.06.2023    6001    14    5    

24

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

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с установленными именами. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3000 руб.

07.02.2023    6712    73    10    

30

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

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5270    dimanich70    15    

22

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

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

01.03.2024    6863    dimanich70    9    

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

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