Записная книжка разработчика. Мастер действий от А до Я

6 0

Сотрудникам потребовался инструмент для оформления исходящих писем. На роль такого вполне подходит мастер действий, предлагающий пошаговый ввод данных и формирование документа по макету. Кроме самых простых  возможностей по оформлению нужно было предусмотреть еще дополнительные параметры(возможности): 

  1. Возможность создания ответного письма с выбором из справочника "Входящие РКК" нужного  входящего документа.
  2. Связывания входящего и исходящего документа.
  3. Вложение при необходимости в задачу на согласование\подписание выбранного входящего документа.
  4. Проставление регистрационных данных входящего документа в случае создания ответного письма в формируемый документ.

В качестве основы и учебного примера создадим копию мастера "Оформление приказа…", удалим из него ненужные этапы и параметры и заполним своими. Тот мастер, который используется в нашей организации, создан без копирования стандартного типового мастера и чуть более сложный по функционалу. А данный специально создан при написании материала как универсальный, который можно еще подвергнуть оптимизации. Основные моменты при разработке:

Параметры мастера

Остановимся на тех параметрах, которые требуют пояснения:

  1. Вид письма – признак, по которому сотрудник выбирает вид документа (письмо исходящее, письмо исходящее(министерство)). В нашем случае это необходимо для разделения писем в дальнейшем по местам регистрации через правила вычисления ролей при отправке документа по типовому маршруту, используемому в мастере. Опцию можно расширить другими видами документов, если возникнет необходимость в этом или вообще убрать. В данном случае это как задел на универсальность.
  2. ОрганизацияКорреспондент – выбор из справочника «Организации».
  3. Исполнитель – выбор из справочника «Работники». По умолчанию заполняется пользователем, от имени которого запускается мастер.
  4. ТМ – Выбор из справочника типовых маршрутов. О нем чуть ниже.

Остальные параметры, которые используются в мастере, можно посмотреть на скриншоте.

Параметры мастера

Этапы мастера

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

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

События мастера

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

Немного нетривиальной задачей стало открытие в мастере справочника для выбора нужной записи. Например, если указать в параметрах мастера справочник "РКК", то по умолчанию будет открываться представление справочника "Главное", в котором будут все документы в журналах "Исходящие", "Внутренние" и "Входящие" за период. А  это не совсем то, что нужно, к тому же время открытия справочника будет большим. Поэтому в мастер добавлено логическое значение "Формируемое письмо является ответным на входящий документ?". Если чек-бокс установлен, то при переходе на следующий этап открывается справочник РКК в нужном представлении в режиме выбора записи, и далее пользователь может проверить данные выбранной записи справочника РКК. В коде  это примерно так: 

If Wizard.Params.ValueByName('ВыборИзСправочника').Value 
 
//Формируем справочник РКК в нужном представлении
  RCC = CreateReference('РКК';; false)
  RCCView = RCC.CreateView("РККВх") 
  RCC.ComponentForm.View.ViewMode = vmSelect  
  RCC.ComponentForm.Show

  RecordID = RCC.ComponentForm.View.SelectedRecordsID(0)
  RKK = References.РКК.GetObjectByID(RecordID)
  
 // Cчитываем  данные нужной записи
 // код обработки и т.д. для краткости код убран
  
 //-----------------------------------------
 // Переход на этап
   Wizard.NextStep = Wizard.Steps.ValueByName('РКК')  
 else
   Wizard.NextStep = Wizard.Steps.ValueByName('Исполнитель по документу')
 endif

Также при обработке нужно учесть права доступа на входящий документ, который выбран, чтобы у пользователей, которым будет отправляться задача, была возможность доступа к документу.  Для примера это можно сделать при обработке записи РКК и назначить права группе пользователей  или при сохранении файла уже конкретным пользователям перед стартом задачи. Например, назначение прав группе "Делопроизводители".

  // Назначение прав доступа на выбранный входящий документ
  //------------------------
  Edoc = EDocuments.GetObjectByID(EdocID)
  Group = ServiceFactory.GetGroupByName('СЕКР')
  EDocAccessRights = Edoc.AccessRights
  ReadersList = EdocAccessRights.Readers
  WritersList = EdocAccessRights.Writers
  ManagersList = EdocAccessRights.Managers
  HaveAccess = 0 // Признак отсутствия прав

  if ReadersList.Find(Group)
    HaveAccess = 1          // Есть права на чтение
  endif

  if WritersList.Find(Group)
    HaveAccess = 2          // Есть права на изменение
  endif

  if ManagersList.Find(Group)
    HaveAccess = 3          // Есть полные права
  endif

// Изменить права
  if HaveAccess < 3
   // Удаление имеющихся прав
    if HaveAccess = 1
      ReadersList.Delete(Group)
    else
      if HaveAccess = 2
        WritersList.Delete(Group)
      endif
    endif

  // Добавить полные права
    ManagersList.Add(Group)
  endif
  Edoc.Save

На всякий случай запишем в реестр ИД входящего документа. Он нам потребуется на этапе создания документа при связывании между собой документов:

  //запись в реестр ИД документа для связывания
  Register = "HKEY_CURRENT_USER\Software\Computer\DIRECTUM\Параметры мастеров действий\"
  EDocID = RegRead(Register & Wizard.Title; "ИДДокумента")
  CurrentEDocID = Params.ValueByName('ДокументВХИД').Value
  
  if CurrentEDocID <<>> EDocID
    RegWrite(Register & Wizard.Title; "ИДДокумента"; CurrentEDocID)     
  endIf 

Можно упомянуть про связывание документов: если это нужно, то пользователь на этапе проверки данных выбранной записи РКК может отметить чек-бокс "Связать входящий и формируемый документ?". В коде это реализовано на этапе сохранения документа: 

// проверка на создание связи между документами   
 if Wizard.Params.ValueByName('СвязьДокументов').Value = TRUE 
//--------------------Связывание документов 
//Чтение из реестра переменной
   Register = "HKEY_CURRENT_USER\Software\Computer\DIRECTUM\Параметры мастеров действий\"
   CurrentEDocID = RegRead(Register & Wizard.Title; "ИДДокумента")
      if Assigned(CurrentEDocID)
           Params.ValueByName('ДокументВХИД').Value = CurrentEDocID 
       endif   
      EDocVx = EDocuments.GetObjectByID(CurrentEDocID)  
      EDocInfoVx = EDocVx.Info
    
       EDocuments.BindTo(EDoc.Info; EdocVx.Info)
  endif
// -------------------------Связывание документов 

А вложение документа в задачу, отправляемую по ТМ, выглядит аналогично при проверке аналогичного условия.

Нюанс, который есть в мастере - при создании документа через мастер  в карточку документа будет добавлен реквизит "Подразделение", вычисляемый по "Подписанту". В нашем случае при работе в организации, это необходимо для правил вычисления полей при прохождении документа по ТМ. 

Типовой маршрут

Мастер отправляет письмо на согласование\подписание по ТМ "Согласование официального письма(исходящее)". Это копия типового маршрута "Согласование официальных документов", в который внесены изменения: 

  1. На блоке "Распечатка документа" исполнителем указана роль "Помощник руководителя", исполнитель по которой вычисляется по правилам вычисления ролей в данной роли
  2. На блоке "Регистрация" исполнителем указана роль "РегистраторВПодразделении", исполнитель вычисляется аналогично по правилам. 
  3. У согласующих убрано требование электронной подписи при согласовании.

Приведу скриншот правила вычисления роли "РегистраторВПодразделении", где используется вид документа, создаваемый мастером. 


 

Макет документа

И самое важное - это макет документа, по которому формируются исходящий документ. Для примера приведу скриншот макета, который используется у нас.


 

А что в итоге?

  1. Исходящие письма(документы) стали единообразными по оформлению, что очень нравится руководителям, которые их подписывают либо в электронном виде либо в бумажном.
  2. Сократилось время, которое тратят сотрудники на подготовку документов и отправляют их на согласование.

Приложение:  Wizards_formalization_mail_outgoing

Пока комментариев нет.

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