Постановка задачи
Необходимо разработать сценарий, рассылающий уведомления ответственным за договоры о наступлении контрольной даты. Данные о договорах содержатся в справочнике Договоры. Ответственный за договор хранится в реквизите Ответственный за договор (Работник), а контрольная дата – в реквизите Контрольная дата (Дата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)
© Компания DIRECTUM, 2018 | Сообщество пользователей DIRECTUM |