Здравствуйте!
Если Вам необходимо реализовать возможность отправки E-mail контрагенту через действие "Отправить E-mail", то Вы можете воспользоваться следующим алгоритмом (пример реализации для версии Terrasoft CRM 3.3):
1. В скрипте scr_MailUtils реализовать функцию получения e-mail адреса текущего контрагента:
function GetCurrentAccountEmailAddress(AccountDataset) {
var AccountEMailAddress = '';
var Email = GetEmailCommunicationTypeID();
for (var i = 1; i = 4; i++) {
var CommunicationTypeName = FormatStr('Communication%1TypeID', i);
var CommunicationType = GetFieldValueFromDisabledField(AccountDataset,
CommunicationTypeName);
if (CommunicationType == Email) {
var CommunicationName = FormatStr('Communication%1', i)
AccountEMailAddress = GetFieldValueFromDisabledField(AccountDataset,
CommunicationName);
continue;
}
}
var AccountName = GetFieldValueFromDisabledField(AccountDataset, 'Name');
if (IsEmptyStr(AccountEMailAddress)) {
Dataset = GetAccountCommunicationDataset(Email);
ApplyDatasetFilter(Dataset, 'AccountID',
AccountDataset.Values('ID'), true);
Dataset.Open();
try {
AccountEMailAddress = Dataset.ValAsStr('Number');
} finally {
Dataset.Close();
}
}
if (!IsEmptyStr(AccountEMailAddress)) {
if (!IsEmptyStr(AccountName)) {
AccountEMailAddress = AccountName + '' + AccountEMailAddress + '>';
}
} else {
AccountEMailAddress = '';
}
return AccountEMailAddress;
}
function GetAccountCommunicationDataset(EmailTypeID) {
if (!Assigned(MailUtilsScript.AccountCommunicationDataset)) {
var Dataset = Services.GetNewItemByUSI('ds_AccountCommunication');
MailUtilsScript.AccountCommunicationDataset = Dataset;
ApplyDatasetFilter(Dataset, 'CommunicationTypeID', EmailTypeID, true);
}
return MailUtilsScript.AccountCommunicationDataset;
}
2. Далее в скрипте scr_AccountsWorkspace реализовать функцию отправки сообщения :
function SendMailWithoutTemplate() {
var Dataset = Services.GetNewItemByUSI('ds_Account');
EnableDatasetFilters(Dataset, false);
Dataset.FetchRecordsCount = -1;
var IDs = GetArrayByCollection(BaseWorkspace.Grid.SelectedIDs);
var KeyDataFieldName = Dataset.KeyDataField.Name;
var AccountEMailAddress = '';
for (var i = 0; i IDs.length; i++){
Dataset.Close();
ApplyDatasetFilter(Dataset, 'ID', IDs[i], true);
Dataset.Open();
var SingleAccountEMailAddress = GetCurrentAccountEmailAddress(Dataset);
AccountEMailAddress += IsEmptyValue(SingleAccountEMailAddress) ? '' :
(IsEmptyValue(AccountEMailAddress) ? '' : ';') +
SingleAccountEMailAddress;
}
CreateEmptyMessage(AccountEMailAddress);
Dataset.Close();
}
3. В окне wnd_AccountsWorkspace добавить на закладке невизуальных компонентов одно действие, например, amiSendEmail и на событие OnExecute прописать вызов функции:
SendMailWithoutTemplate();
В результате с помощью действия будет создано письмо с e-mail адресом контрагента, действие в гриде продублируется автоматически.
Полная инструкция со скриншотами прикреплена.
Приятной работы!