Найти в Дзене

Автоматическое изменение срока задачи при обработке документа в 1С Документооборот

Есть документ Служебная записка на командировку сотрудника, в этом документе есть реквизит Дата окончания командировки. Упрощённо процесс обработки можно представить так: Заказчик захотел, чтобы срок у задачи Подготовить отчет о командировке ставился бы не относительный, как предполагает типовая функциональность, а абсолютный - 5 дней от указанной в документе Даты окончания командировки. Вот как можно реализовать данную задачу без конфигуратора, но с использованием скрипта в схеме обработки: Пример скрипта: Документ = Параметры.ОбработкаОбъект.Владелец.Ссылка;
//Получить значение дополнительного реквизита документа Дата окончания командировки
ДРДатаОкончания = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("ИдентификаторДляФормул", "ДатаОкончанияКомандировки");
Если УправлениеСвойствами.ПроверитьСвойствоУОбъекта(Документ, ДРДатаОкончания) Тогда
ДатаОкончания = УправлениеСвойствами.ЗначениеСвойства(Документ, ДРДатаОкончания);
КонецЕсли;
Запрос = Новый Запрос

Есть документ Служебная записка на командировку сотрудника, в этом документе есть реквизит Дата окончания командировки. Упрощённо процесс обработки можно представить так:

  1. Согласование записки - 1 день
  2. Ознакомление автора документа с результатом согласования - 1 день
  3. Подготовка отчета о командировке - Дата окончания командировки + 5 дней

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

Вот как можно реализовать данную задачу без конфигуратора, но с использованием скрипта в схеме обработки:

  1. Процесс нужно настроить в виде схемы
  2. В схему добавить скрипт

Пример скрипта:

Документ = Параметры.ОбработкаОбъект.Владелец.Ссылка;

//Получить значение дополнительного реквизита документа Дата окончания командировки
ДРДатаОкончания = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("ИдентификаторДляФормул", "ДатаОкончанияКомандировки");
Если УправлениеСвойствами.ПроверитьСвойствоУОбъекта(Документ, ДРДатаОкончания) Тогда
ДатаОкончания = УправлениеСвойствами.ЗначениеСвойства(Документ, ДРДатаОкончания);
КонецЕсли;

Запрос = Новый Запрос;

// Установка значений параметров
Запрос.УстановитьПараметр("Предмет", Документ);
Запрос.УстановитьПараметр("ПомещеноВИсторию", Ложь);
Запрос.УстановитьПараметр("ВидДействия", Справочники.ВидыДействий.НайтиПоКоду("000000003"));// Отбор вида действия, по задаче которого нужно поменять дату. В моем примере это Подготовить отчет по командировке (Справочники.ВидыДействий)

//Отбираем задачу из справочника Действия исполнения
Запрос.Текст =
"ВЫБРАТЬ
| ДействияИсполнения.Ссылка КАК Ссылка
|ИЗ
| Справочник.ДействияИсполнения КАК ДействияИсполнения
|ГДЕ
| ДействияИсполнения.Предмет = &Предмет
| И ДействияИсполнения.ВидДействия = &ВидДействия
| И ДействияИсполнения.ПомещеноВИсторию = &ПомещеноВИсторию";
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокументОбъект.Участники[0].Срок = ДатаОкончания+5*24*60*60; // Прибавляем нужное количество времени к дате
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.записать();

КонецЦикла;