Полезные мелочи при работе с карточками ч.3 (Отправляем документ задачей)

8 1

В данной статье, мы рассмотрим 2 варианта отправки документа: по типовому маршруту и адресному (персональному) 

Вариант 1. Отправка документа по Типовому Маршруту

Для начала, нам нужна карточка документа, причем совершенно без разницы какая (главное чтобы не бесполезная). 

Когда мы ее получили, мы точно знаем, что у нас есть документ, и мы его можем отправить на согласование по Типовому маршруту или адресно по пользователям, кому как удобно. 

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()                                           // Откроем готовую задачу

Вот по сути и все, кнопка готова, теперь поместим ее на форму Карточки:

Теперь при нажатии на данную кнопку, перед вами сразу откроется задача с вложением:

Примечание: В данном коде стоит учесть несколько проверок на пустые значения если у вас такие могут быть, а так же контроль на само срабатывание этого действия, например проверкой на сохраненный документ или выполненные условия.

И ведь совершенно не сложно 

Вариант 2. Отправка документа задачей или уведомлением конкретному лицу

Есть и другой способ отправки задачи или уведомления - "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

 

Авторизуйтесь, чтобы написать комментарий