В данной статье, мы рассмотрим 2 варианта отправки документа: по типовому маршруту и адресному (персональному)
Для начала, нам нужна карточка документа, причем совершенно без разницы какая (главное чтобы не бесполезная).
Когда мы ее получили, мы точно знаем, что у нас есть документ, и мы его можем отправить на согласование по Типовому маршруту или адресно по пользователям, кому как удобно.
1. Первым делом мы создаем "действие", и назовем мы его "Согласовать":
2. Теперь наполняем его смыслом:
Route="PodPer" // Наш типовой маршрут, по которому мы хотим отправить задачу
Viz=Tasks.CreateNew() // Создаем новую задачу
Viz.LoadStandardRoute(Route) // выбираем в нашу задачу выбранный маршрут
/* Если нам необходимо менять маршрут в зависимости от вида документа, то надо использовать такую связку:
Kind=Object.Requisites('ISBEDocKind').AsString
if Kind == 'Д000001' or Kind == 'Д000003'
Route="PodPer13"
else
Route="PodPer2"
endif
*/
Vid=Object.Requisites(SYSREQ_EDOC_NAME).DisplayText // Получим название документа
Subj=Format('Согласование %s';ArrayOf(Vid)) // Запишем в переменную Название и все что только душе угодно,
// В моем случае, название документа и так формируется из 3 параметров, так что здесь эти вычисления не нужны.
Viz.Requisites('Subject').Value=Format('%s';ArrayOf(Subj)) // Зададим Тему Задачи
Attachments = Viz.GetAttachments(FALSE) // Получаем список вложений, пустой, как вы поняли
Attachments.Add(Object.Info) // Добавим в список вложения текущий документ
Opisanie = Object.Requisites("Prichina").DisplayText // Запишем в переменную один из реквизитов документа для текста
Viz.ActiveText = "Прошу согласовать документ: " & Vid & CR & "Обоснование: " & Opisanie // Оформим текст внутри Задачи
Viz.Form.Show() // Откроем готовую задачу
Вот по сути и все, кнопка готова, теперь поместим ее на форму Карточки:
Теперь при нажатии на данную кнопку, перед вами сразу откроется задача с вложением:
Примечание: В данном коде стоит учесть несколько проверок на пустые значения если у вас такие могут быть, а так же контроль на само срабатывание этого действия, например проверкой на сохраненный документ или выполненные условия.
И ведь совершенно не сложно
Есть и другой способ отправки задачи или уведомления - "CreateTaskToEmployees()", с которым работать немного интереснее. Данный способ удобен для отправки специфической работы, например для уведомления пользователя, что в его зону ответственности передан очередной документ (или на исполнение отправлен, как угодно). Главное помните, что вы должны взять на себя ту ответственность, с которой ранее справлялся Типовой маршрут, а именно - права на прилагаемый документ.
Для этого нам понадобится информация о том, кому мы хотим отправить задачу, и желательно чтобы он был указан в нашей карточке или в форме выбора (Например: Employee).
try // делаем попытку выдать права
EDoc = Object.info // Получаем документ
User = ReferenceRequisiteValue("РАБ"; Object.Employee; 'Пользователь') // Получаем работника
USERSF = ServiceFactory.GetUserByCode(User) // Из работника - Пользователя
EDoc.AccessRights.Readers.Add(USERSF) // Выдаем права на чтение
EDoc.Save // Сохраняем изменения
except // Если операция не успешна, значит права у пользователя уже были
// тут можно сделать вывод уведомления о неудаче или сообщение об ошибке
endexcept
После этого получатель хотя бы сможет его увидеть.
Далее можно уже создавать задачу:
Theme = "На ознакомление: " & Object.Requisites(SYSREQ_NAME).DisplayText
Text = "Документ: " & Object.Requisites(SYSREQ_NAME).DisplayText & CR & 'Документ на ознакомление во вложении.'
Task = CreateTaskToEmployees(Theme; CArrayElement(ArrayOf(Object.Employee)); Attachments; Text; 1)
// Если хотите открыть задачу или уведомление перед отправкой, дописываем в конце (.Form.Show)
// и все что ниже вообще вставлять не надо!
// Попытаемся стартовать Задачу
try
Task.Start
MessageBox("Совинформбюро";"Уведомление отправлено на исполнителя: " & Object.Requisites("Employee").DisplayText)
except
// Если отправить не удалось, то сообщаем от этом
Task.Cancel
MessageBox("Совинформбюро";"Отправка не удалась! Проверьте данные!")
endexcept
Ну как пример, думаю это сгодиться. Более подробная информация по этому алгоритму, вы можете найти в справке (CreateTaskToEmployees)
По крайней мере, теперь вы знаете, что сделать кнопку на отправку совершенно не сложно, зато насколько она упрощает жизнь простому пользователю! Надеюсь информация была полезной!
Оставлю здесь: похожие примеры в справке:
https://club.directum.ru/webhelp/directum/5.6/ex_zzu.htm
https://club.directum.ru/webhelp/directum/5.6/ex_tipovye_marshruty.htm
Авторизуйтесь, чтобы написать комментарий