Приветствую читателя!
Разрабатывая собственную конфигурацию, может возникнуть необходимость включить функционал согласования документов участниками бизнес процесса. что собственно говоря и произошло со мной при разработке документа "Заявка на предоставление транспорта".
Задача следующая: при создании документа список согласующих должен заполнятся на основании последнего документа о назначении ответственных, в этом случае это документ "Назначение согласующих". Нужна возможность назначить согласующих для любого документа. Решение должно быть простым.
В результате в системе создан документ "Назначение согласующих" в указанном документе есть реквизит "ТипДокумента". При создании формы документа, заполняем Список реквизита, всеми типами документов в конфигурации, с помощью процедуры:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Вставить содержимое обработчика.
а =Метаданные.Документы.Количество();
//Выборка = Документы.атсЗаявкаНаТС.Выбрать();
Для аи =0 по а-1 цикл
Метаданные.Документы.Получить(аи).ПолноеИмя();
Элементы.ТипДокумента.СписокВыбора.Вставить(аи,Метаданные.Документы.Получить(аи).ПолноеИмя(),Метаданные.Документы.Получить(аи).Имя);
КонецЦикла;
КонецПроцедуры
Для списка согласующих предусмотрена табличная часть "Согласующие"
В документе который планируется согласовать в примере это "Заявка на предоставление транспорта" создана табличная часть "Согласование" заполняется процедурой:
&наСервере
Процедура ЗаполнитьСогласование ()
Если Объект.Согласование.Количество()>0 тогда
Иначе
ТипДокумента = Объект.Ссылка.Метаданные().ПолноеИмя();
Период = ТекущаяДата();
Проведен = истина;
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| НазначениеСогласующих.Ссылка КАК Ссылка
|ИЗ
| Документ.НазначениеСогласующих КАК НазначениеСогласующих
|ГДЕ
| НазначениеСогласующих.ТипДокумента ПОДОБНО &ТипДокумента
| И НазначениеСогласующих.Проведен = &Проведен
|
|УПОРЯДОЧИТЬ ПО
| НазначениеСогласующих.Дата УБЫВ";
Запрос.УстановитьПараметр("ТипДокумента", ТипДокумента);
Запрос.УстановитьПараметр("Проведен", Проведен);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
Ссылка = ВыборкаДетальныеЗаписи.Ссылка;
Документ = Ссылка.ПолучитьОбъект();
Для Каждого Согласующий из Документ.Согласующие цикл
стр = Объект.Согласование.Добавить();
стр.Сотрудник = Согласующий.Сотрудник;
КонецЦикла;
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецЕсли
Запросом получаем последний проведенный документ "Назначение согласующих".
После создания документа выполняем рассылку email с навигационной ссылкой на объект конфигурации.
Согласующий получает письмо:
Переходит по ссылке и согласует или не согласует документ.
Пример конфигурации прилагается к данной публикации, включает в себя так же пример рассылки email (Нужно заполнить параметры отправки).
Тестировалось на версии платформы 8.3.14.
Благодарю за прочтение, надеюсь, материал будет вам полезен.