В данной статье, мы рассмотрим 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
Авторизуйтесь, чтобы написать комментарий