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

9 2

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

 

Вчера я получил такое вот письмо:

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

Params = Sender.WorkFlowParams
  ObserversL = Sender.Observers
  TempFolder = GetTempFolder()
  MessError = "" 
  AttachmentsListStr = ""
  Email = ""
  Shapka = "Добрый день!" 
  Theme = Sender.Subject
  Body = CR & "Запущен новый приказ: " & Theme & CR
  Podwal = "Данное сообщение сформировано автоматически, просьба не отвечать на него."
  
  foreach User in ObserversL
      try
        Email = AddSubString(НайтиРеквизитПоФИО(User.FullName;"Email"); Email; ';')
      except
        MessError = MessError & "Среди наблюдателей есть Работники без e-mail: " & User.FullName & CR
      endexcept
  endforeach
  Params.ValueByName("Примечание").Value = MessError
  
  Attachments = Sender.GetAttachments(True)
  foreach Attachment in Attachments 
    EDocInfo = Attachment.ObjectInfo     
    if EDocInfo.ComponentType = ctEDocument
        EDoc = EDocInfo.Document 
        VersionNum = GetNumVersionEDoc(EDoc; EDOC_VERSION_ACTIVE_STAGE_CODE)
        if VersionNum = -1
          VersionNum = GetNumVersionEDoc(EDoc; EDOC_VERSION_DESIGN_STAGE_CODE)
          if VersionNum = -1
            VersionNum = GetNumVersionEDoc(EDoc; EDOC_VERSION_OBSOLETE_STAGE_CODE)
          endif
        endif
        EDocumentVersion = EDoc.Versions.ValueByName(VersionNum)
        FileName = GetFullEDocumentVersionFileName(EDocumentVersion; TempFolder) 
        EDoc.Export(VersionNum; FileName; FALSE)
        AttachmentsListStr = AddSubString(FileName; AttachmentsListStr; ';')
    endif
  endforeach

  if Assigned(AttachmentsListStr)
      ПЧТОтправитьПисьмо(Email;;;Theme; Shapka & CR & Body & CR & Podwal;;AttachmentsListStr;)
  else
      ПЧТОтправитьПисьмо(Email;;;Theme; Shapka & CR & Body & CR & Podwal;;;)
  endif

Описание функции "НайтиРеквизитПоФИО(User.FullName;"Email")":

FIO = ФИО                  // Параметр первый
  Reference =  References.РАБ.GetComponent
  AddWhere = Reference.AddWhere(Format("%0:s.%1:s = '%2:s'";  ArrayOf(Reference.TableName; Reference.Requisites('Дополнение').FieldName; FIO)))
  Reference.Open
if Вариант == "Email"      // Параметр второй
    Email = ''
      if Reference.RecordCount > 0
          Email = Reference.Requisites('Email').AsString
      endif          
    Reference.Close
    Reference.DelWhere(AddWhere)
    Reference = nil
    Result = Email
  endif  

Совсем несложно, но для оперативной работы - весьма полезно. 

9
Авторизуйтесь, чтобы оценить материал.
3
Сергей Меньших

Опять сомнительная функция НайтиРеквизитПоФИО. Как с полным совпадением ФИО у разных людей она справляться будет? У нас в организации всего около тысячи сотрудников и то имеется не одно такое совпадение.

Тарас Асачёв

Уточнение конечно стоит сделать, но у нас полных тезок пока нет, так что я и не заморачивался над этим. 

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