Есть документ Служебная записка на командировку сотрудника, в этом документе есть реквизит Дата окончания командировки. Упрощённо процесс обработки можно представить так:
- Согласование записки — 1 день
- Ознакомление автора документа с результатом согласования — 1 день
- Подготовка отчета о командировке — Дата окончания командировки + 5 дней
Заказчик захотел, чтобы срок у задачи Подготовить отчет о командировке ставился бы не относительный, как предполагает типовая функциональность, а абсолютный + 5 дней от указанной в документе Даты окончания командировки.
Вот как можно реализовать данную задачу без конфигуратора, но с использованием скрипта в схеме обработки:
- Процесс нужно настроить в виде схемы
- В схему добавить скрипт

Документ = Параметры.ОбработкаОбъект.Владелец.Ссылка;
//Получить значение дополнительного реквизита документа Дата окончания командировки
ДРДатаОкончания = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("ИдентификаторДляФормул", "ДатаОкончанияКомандировки");
Если УправлениеСвойствами.ПроверитьСвойствоУОбъекта(Документ, ДРДатаОкончания) Тогда
ДатаОкончания = УправлениеСвойствами.ЗначениеСвойства(Документ, ДРДатаОкончания);
КонецЕсли;
Запрос = Новый Запрос;
// Установка значений параметров
Запрос.УстановитьПараметр("Предмет", Документ);
Запрос.УстановитьПараметр("ПомещеноВИсторию", Ложь);
Запрос.УстановитьПараметр("ВидДействия", Справочники.ВидыДействий.НайтиПоКоду("000000003"));// Отбор вида действия, по задаче которого нужно поменять дату. В моем примере это Подготовить отчет по командировке (Справочники.ВидыДействий)
//Отбираем задачу из справочника Действия исполнения
Запрос.Текст =
"ВЫБРАТЬ
| ДействияИсполнения.Ссылка КАК Ссылка
|ИЗ
| Справочник.ДействияИсполнения КАК ДействияИсполнения
|ГДЕ
| ДействияИсполнения.Предмет = &Предмет
| И ДействияИсполнения.ВидДействия = &ВидДействия
| И ДействияИсполнения.ПомещеноВИсторию = &ПомещеноВИсторию";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокументОбъект.Участники[0].Срок = ДатаОкончания+5*24*60*60; // Прибавляем нужное количество времени к дате
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.записать();
КонецЦикла;

Добавить комментарий