Сотрудникам потребовался инструмент для оформления исходящих писем. На роль такого вполне подходит мастер действий, предлагающий пошаговый ввод данных и формирование документа по макету. Кроме самых простых возможностей по оформлению нужно было предусмотреть еще дополнительные параметры(возможности):
В качестве основы и учебного примера создадим копию мастера "Оформление приказа…", удалим из него ненужные этапы и параметры и заполним своими. Тот мастер, который используется в нашей организации, создан без копирования стандартного типового мастера и чуть более сложный по функционалу. А данный специально создан при написании материала как универсальный, который можно еще подвергнуть оптимизации. Основные моменты при разработке:
Остановимся на тех параметрах, которые требуют пояснения:
Остальные параметры, которые используются в мастере, можно посмотреть на скриншоте.
При создании этапов сложностей обычно не возникает. Принцип визуального размещения элементов и связывания их с нужными параметрами не требует пояснения. Так как используем копию мастера, то из него убираем ненужные этапы, оставляем то, что потребуется и добавляем свои и настраиваем отображение. Пример настройки этапов на анимированном скриншоте.
В типовой мастер добавлено 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
// -------------------------Связывание документов
А вложение документа в задачу, отправляемую по ТМ, выглядит аналогично при проверке аналогичного условия.
Нюанс, который есть в мастере - при создании документа через мастер в карточку документа будет добавлен реквизит "Подразделение", вычисляемый по "Подписанту". В нашем случае при работе в организации, это необходимо для правил вычисления полей при прохождении документа по ТМ.
Мастер отправляет письмо на согласование\подписание по ТМ "Согласование официального письма(исходящее)". Это копия типового маршрута "Согласование официальных документов", в который внесены изменения:
Приведу скриншот правила вычисления роли "РегистраторВПодразделении", где используется вид документа, создаваемый мастером.
И самое важное - это макет документа, по которому формируются исходящий документ. Для примера приведу скриншот макета, который используется у нас.
Приложение: Wizards_formalization_mail_outgoing
Авторизуйтесь, чтобы написать комментарий