Копировать ссылку на страницу

Постановка задачи

Необходимо разработать сценарий, рассылающий уведомления ответственным за договоры о наступлении контрольной даты. Данные о договорах содержатся в справочнике Договоры. Ответственный за договор хранится в реквизите Ответственный за договор (Работник), а контрольная дата – в реквизите Контрольная дата (Дата3).

Уведомления рассылаются в день контрольной даты. Сценарий нужно запускать каждый день по расписанию.

Текст сценария

 

  // Открыть справочник Договоры с записями, 

  // у которых контрольная дата сегодня.

  Contracts = CreateReference("ДГВ"; ArrayOf("Дата3"; "Работник"))

  AddWhereID = Contracts.AddWhere(Format("

    -- контрольная дата сегодня

    %0:s.%1:s = '%2:s' and

    -- у договора определен ответственный

    %0:s.%3:s is not null and

    -- только действующие

    %0:s.%4:s = 'Д' and 

    -- только утвержденные

    %0:s.%5:s = '+'"; 

    ArrayOf(Contracts.TableName;

      Contracts.Requisites("Дата3").SQLFieldName; Today();

    Contracts.Requisites("Работник").SQLFieldName;

    Contracts.Requisites(SYSREQ_STATE).SQLFieldName;

    Contracts.Requisites(SYSREQ_RECORD_STATUS).SQLFieldName)))

  Contracts.Open

  foreach Contract in Contracts

 

    // Получить Контрольную дату.

    ControlDate = Contract.Дата3

    if not VarIsNull(ControlDate)

 

      // Получить наименование договора.

      ContractName = Contract.SYSREQ_NAME 

      ReferenceRecordInfo = Contract.Info                      

 

      // Получить ответственного.

      CuratorCode = Contract.Работник

      User = GetUserByEmployeeCode(CuratorCode)

      if User <<>> ''

 

        // Сформировать тему уведомления "%s контрольная дата %s"

        TaskSubject = LoadStringFmt

          ("DIR1E1D696D_2200_4D22_A674_BB771F1CC074";

           "CM"; ArrayOf(Today(); ContractName))

 

        // Сформировать список вложений.

        AttachmentList = CreateList()

 

        // Добавить во вложение запись справочника "Договоры"

        AttachmentList.Add(ReferenceRecordInfo.Name; ReferenceRecordInfo)

 

        // Получить главные связанные документы

        // записи справочника "Договоры"

        // и добавить их во вложение.

        BoundMainEDocuments = GetMainFromBoundContractEDocuments(Contract) 

        foreach MainEDocumentInfo in BoundMainEDocuments

          AttachmentList.Add(MainEDocumentInfo.Name; MainEDocumentInfo)

        endforeach                

 

        // Отправить уведомление.

        UserList = CreateList()

        UserList.Add(User.Name; User)

        if TaskSubject <<>> ""

          SendNoticeByUserList(TaskSubject; UserList; AttachmentList)   

        endif

      endif  

    endif

  endforeach  

  Contracts.Close

  Contracts.DelWhere(AddWhereID)

© 2016 Компания DIRECTUM Сообщество пользователей DIRECTUM