Добрый день.
Используем в организации terrasoft 3.3.2.145, постепенно переводим наших сотрудников на 2013 офисный пакет и столкнулись с проблемой, что при попытке отправить претензию через Outlook 2013, он (Outlook) вылетает с ошибкой, хотя письмо все же уходит. Проблема не повторяется только в безопасном режиме, но что именно отключается в безопасном режиме и не мешает работе terrasoft пока не пойму.
При закрытии почты, terrasoft выдает такое сообщение:
Класс исключения: EOleException
Сообщение об ошибке: Компьютер удаленного сервера не существует или недоступен
СТЕК ВЫЗОВА
TSScript.TScript.ExecuteMethod (Line 1045, "TSScript.pas") ()
System.@CheckAutoResult ()
TSScriptableService.TScriptableService.ExecuteScriptMethod (Line 466, "..\..\ObjectLibraries\TSObjectLibrary\TSScriptableService.pas") ()
TSWindow.TWindow.ExecuteScriptMethod (Line 2273, "..\..\ObjectLibraries\TSWindowLibrary\TSWindow.pas") ()
TSObjectEventsDispatcher.TObjectEventsDispatcher.AttemptToExecuteScriptMethod (Line 355, "TSObjectEventsDispatcher.pas") ()
TSObjectEventsDispatcher.TObjectEventsDispatcher.Invoke (Line 671, "TSObjectEventsDispatcher.pas") ()
TSConnectionPoints.TConnectionPointDispatcher.Invoke (Line 577, "TSConnectionPoints.pas") ()
Comobj.DispatchInvokeError ()
Comobj.DispatchInvokeError ()
TSWindow.TWindow.DoClose (Line 2196, "..\..\ObjectLibraries\TSWindowLibrary\TSWindow.pas") ()
TSDskWindow.TDskWindow.DoClose (Line 899, "TSDskWindow.pas") ()
TSDskWindow.TInternalWindow.DoClose (Line 536, "TSDskWindow.pas") ()
Controls.TControl.WndProc ()
Controls.TWinControl.WndProc ()
TSDskWindow.TInternalWindow.WndProc (Line 426, "TSDskWindow.pas") ()
Classes.TDataModule.WriteHeight ()
TntControls.TWinControlTrap.Win32Proc (Line 557, "..\TNT\TntControls.pas") ()
Classes.TDataModule.WriteHeight ()
TntControls.TWinControlTrap.DefWin32Proc (Line 609, "..\TNT\TntControls.pas") ()
Classes.TDataModule.WriteHeight ()
Controls.TWinControl.DefaultHandler ()
Forms.TCustomForm.WMSysCommand ()
Controls.TWinControl.WndProc ()
TSDskWindow.TInternalWindow.WndProc (Line 426, "TSDskWindow.pas") ()
Classes.TDataModule.WriteHeight ()
TntControls.TWinControlTrap.Win32Proc (Line 557, "..\TNT\TntControls.pas") ()
Classes.TDataModule.WriteHeight ()
TntControls.TWinControlTrap.DefWin32Proc (Line 609, "..\TNT\TntControls.pas") ()
Classes.TDataModule.WriteHeight ()
Controls.TWinControl.DefaultHandler ()
Controls.TWinControl.WndProc ()
TSDskWindow.TInternalWindow.WndProc (Line 426, "TSDskWindow.pas") ()
Classes.TDataModule.WriteHeight ()
TntControls.TWinControlTrap.Win32Proc (Line 557, "..\TNT\TntControls.pas") ()
Classes.TDataModule.WriteHeight ()
Forms.TApplication.ProcessMessage ()
TSClient.TSClient (Line 131, "d:\Projects\TerrasoftCRM30\TerrasoftCRM\Src\Desktop\TSCRM\TSClient.dpr") ()
АКТИВНЫЕ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ
tvMain (TTSCStringTree)
grdData (TfrmDataGrid)
wnd_AccountClaimsGridArea (TInternalWindow)
pgClaims (TInternalPage)
pcDetails (TInternalPages)
fmClient (TTSCPanel)
wnd_AccountsWorkspaceTInternalFrameSetC7680CC9F1624A9BB84C5CE4BAFEBDC5 (TInternalFrameSet)
wnd_AccountsWorkspace (TInternalWindow)
wnd_Main (TInternalWindow)
Изначально думал, что фаерволл блокирует работу, судя по сообщению "Компьютер удаленного сервера не существует или недоступен", но позже выяснилось, что он тут не при чем.
Через дебаг проверил, что почта вылетает на этом моменте:
function SendMailMessageToResponsibleDeparment(Dataset)
{
var compName = Dataset.ValAsStr('AccountName');
var todayDate = DateToStr(GetLocalDate());
var claimsMaxDate=DateToStr(Dataset.ValAsDateTime('MaxEndingDate'));
var claimsNumber = Dataset.ValAsInt('Number');
var cretedEmployeName = GetContactNameByID(Connector.CurrentUser.ContactID);
EmailDescriptionRichDataControl.DatasetLink.Dataset.Open();
debugger;
var cliemsTest = System.RTFToText(EmailDescriptionRichDataControl.DataField);
if(cliemsTest == '' || cliemsTest == null) cliemsTest = dlData.Dataset.ValAsStr('ProblemDescription');
var bodyMess = FormatStr('текст сообщения',todayDate,compName,claimsNumber,cretedEmployeName,claimsMaxDate,cliemsTest);
var mailAdres = GetDepartmentManagersEmail(Dataset.ValAsGUID('ResponsibleDivision'));
mailAdres.Mail[mailAdres.Mail.length] = "mail address";
debugger;
SendEmail({Address: mailAdres.Mail,
Subject: FormatStr("Тема письма",compName),Body: bodyMess,AutoSend: true,SendImmediately: true,
BodyFormat: 1});
}
А именно при попытке отправки письма:
SendEmail({Address: mailAdres.Mail,
Subject: FormatStr("Тема письма",compName),Body: bodyMess,AutoSend: true,SendImmediately: true,
BodyFormat: 1});
Или же вызове следующей функции:
function GetContactMailForID(ContactID)
{
return GetContactMail(GetContactInfo(ContactID));
}
function GetContactTitle(ContactDataset)
{
debugger;
if(ContactDataset.State == dstInactive)
ContactDataset.Open();
if(ContactDataset.ValIsNull('JobID'))
return '';
var jobID = ContactDataset.ValAsGUID('JobID');
var jobDS = Services.GetNewItemByUSI('Contacts\\Dictionaries\\Job\\ds_Job');
ApplyDatasetFilter(jobDS, 'ID', jobID, true);
jobDS.Open();
var res = jobDS.ValAsStr('Name');
jobDS.Close();
return res;
}
После того, как скрипт отработает, почта закрывается и создается новое сообщение.