В работе активно используем шаблоны писем из раздела "Контакты". Возникла необходимость вставлять в подпись письма контактные данные и должность пользователя системы, который отправляет письмо. Как оказалось, эти данные в шаблоне письма не доступны. Советы, которые я видел на форуме, сводятся к подтягиванию нужных данных в запрос шаблона, что в моем случае не возможно, так как нужны данные как раз о текущем пользователе, а не авторе либо ответственном. Мои изыскания привели меня к следующему решению.
Суть заключается в создании дополнительного системного пользовательского запроса, который по ID текущего пользователя будет подтягивать все необходимые данные и добавлять в шаблон письма. В результате макросы шаблона письма без “запроса” теперь у меня выглядят так.
Чтобы это заработало, мне пришлось:
1. Создать пользовательский запрос на основе таблицы “Контакты” с необходимыми полями и узнать его ID. ID я узнал через MS SQL Server Management Studio .
2. Добавить в "Системные настройки" параметр «CurrentUserDetailQuery» и присвоить ему значение ID
3. Доработать функцию GetMacrosParserByUserQuery в модуле scr_MacrosUtils
var Parser = new Object();
Parser.Macroses = new Array();
Parser.Variables = GetNewDictionary();
LoadSysVariables(Parser.Variables);
//Дополнительная информация о пользователе
var CurrentUserDetailQuery=System.GetSystemSettingValue('CurrentUserDetailQuery', 0);
var ContactDetailQuery = CreateUserQueryObject(CurrentUserDetailQuery)
LoadVariablesFromUserQuery(Parser.Variables, ContactDetailQuery, Connector.CurrentUser.ContactID);
//Дополнительная информация о пользователе
if (UserQuery) {
LoadVariablesFromUserQuery(Parser.Variables, UserQuery, RecordID);
}
return Parser;
}
и функцию GetMacrosesInfo в модуле scr_MSOutlookLibrary
var Info = new Object();
Info.SysMacrosList = new Array();
Info.SysMacrosList.push(["Текущая дата", '#' + "Текущая дата" + '#']);
Info.SysMacrosList.push(["Текущий пользователь", '#' + "Текущий пользователь" + '#']);
Info.SysMacrosList.push(["Текущий контакт", '#' + "Текущий контакт" + '#']);
Info.SysMacrosList.push(["Цитировать", '#' + "Цитировать" + '#']);
//Дополнительная информация о пользователе
var CurrentUserDetailQuery=System.GetSystemSettingValue('CurrentUserDetailQuery', 0);
var UserQuery = CreateUserQueryObject(CurrentUserDetailQuery);
if (UserQuery.Error) {
return;
}
var Column;
for (var Key in UserQuery.Columns) {
Column = UserQuery.Columns[Key];
Info.SysMacrosList.push([Column.Caption, '#' + Column.Caption + '#']);
}
//Дополнительная информация о пользователе
Info.QueryMacrosList = new Array();
try {
if (IsEmptyGUID(TemplateID)) {
return;
}
var Dataset = GetSingleItemByCode('ds_MailTemplate');
ApplyDatasetIDFilter(Dataset, TemplateID, true);
Dataset.Open();
try {
if (IsDatasetEmpty(Dataset)) {
return;
}
var QueryID = Dataset.Values('QueryID');
if (IsEmptyGUID(QueryID)) {
return;
}
Obj.QueryID = QueryID;
var UserQuery = CreateUserQueryObject(QueryID);
if (UserQuery.Error) {
return;
}
var Column;
for (var Key in UserQuery.Columns) {
Column = UserQuery.Columns[Key];
Info.QueryMacrosList.push([Column.Caption, '#' + Column.Caption + '#']);
}
} finally {
Dataset.Close();
ApplyDatasetIDFilter(Dataset, null, false);
}
} finally {
return Info;
}
}
Версия программы 3.4.