Возможна ли Рассылка отчетов по электронной почте в автоматическом режиме?
Очень интересно.
Нравится
каких отчетов? word-excel в принципе можно средствами террасофт
Да, возможна. В качестве таймера можно использовать планировщик Terrasoft, планировщик Windows или планировщик БД в зависимости от реализации.
Спасибо за участие. Если можно пример команды для планировщика Windows - сервис отчета - Common\Medinskiy\ReportLogist\fr_ReportComercia.
Именно с FR — не знаю. В общем случае делается специальная карточка, которая при открытии отправляет по почте что надо кому надо и сразу закрывается. А в планировщик Windows добавляется задание вроде:
c:\terrasoft\tsclient.exe /wnd=wnd_MyReportSender -cfg=MyConfiguration -usr=Supervisor -pwd=qwerty
Если задание запущено, то по таймеру открывается это окно и отрабатывает логика.
Если можно подробнее про логику работы окна, которое открывается (wnd_MyReportSender).
Вы напишете её сами. В обработчике OnPrepare окна будет примерно:
function wnd_MyReportSenderOnPrepare(Window) { System.BeginProcessing(); SendReportByEmail();//ToDo System.EndProcessing(); Self.Close(); }
Каким образом можно закрыть Terrasoft после окончания работы окна?
В обработчике OnShow
function wnd_MeReportSenderOnShow(Window){ try { Window.Close(); } catch(e){} }
Наваял функцию для автоматического экспорта отчета
function btnFormAutoOnClick(Control) { //по кнопке сформировать файл формата PDF var ReportCode = 'fr_Reestr_Work'; var FilteredDatasetCode = 'ds_Reestr_Work'; var Report = Services.GetNewItemByUSI(ReportCode); var ReportPreviewer = Services.GetNewItemByUSI('wnd_BaseFastReportPreview'); var ReportPreviewerComponent = ReportPreviewer.Attributes('ReportPreviewer'); var ReportDataset = Services.GetNewItemByUSI(FilteredDatasetCode); SetAttribute(ReportPreviewer, 'Report', Report); // формирование дат для примера var CurrentData = new Date(); var FullYear = CurrentData.getFullYear(); var Month = CurrentData.getMonth(); Month = Month -1; if (Month<0) {Month=11;FullYear=FullYear-1;} var StartDate = new Date(FullYear, Month, 1); var FinishDate = new Date(FullYear, Month , 2); StartDate = StartDate.getVarDate(); FinishDate = FinishDate.getVarDate(); //ApplyDatasetFilter(ReportDataset, 'StartDate', StartDate, true); //ApplyDatasetFilter(ReportDataset, 'FinishDate', FinishDate, true); ReportPreviewer.Build(); var FilterWindow = ReportPreviewer.ComponentsByName('FilterWindow'); FilterWindow = fbcMain; var frpMain = ReportPreviewer.ComponentsByName('frpMain'); frpMain.Report = Report; //********************************************************************** // загрузим сохраненный фильтр var ContactID = Connector.CurrentUser.ID; var ReportID=Report.ID; // var FiltrDataset = Services.GetNewItemByUSI('ds_SaveFiltersReports'); ApplyDatasetFilter(FiltrDataset, 'ContactID', ContactID, true); ApplyDatasetFilter(FiltrDataset, 'ReportID', ReportID, true); FiltrDataset.Open(); var XMLStorage = GetNewXMLStorage(); if (!IsEmptyValue(FiltrDataset.Values("ID"))) { XMLStorage.Text=FiltrDataset.Values("Filtr"); fbcMain.DataFieldsList.Deserialize(XMLStorage.RootNode); } else { return; } fbcMain.DatasetLink.Dataset = ReportDataset; fbcMain.ApplyFilter(); //********************************************************************** frpMain.PrepareReport(); frpMain.IsVisible = false; ReportPreviewerComponent.DatasetByUSI(FilteredDatasetCode) = ReportDataset; frpMain.PreviewReport(); System.BeginProcessing(); //задержка для стабильного формирования PDF файла System.Sleep(100); System.EndProcessing(); // собственно сам экспорт var TempFileName = System.CreateObject('TSObjectLibrary.Value'); var FileNames = System.CreateObject('TSObjectLibrary.StringsList'); TempFileName.Value = "C:\\!!\\Отчет по количественному выполнению рейсов.pdf"; try { frpMain.Export( 2, TempFileName, false); } catch (e){ } }
Но...
Если устанавливаю фильтр
//ApplyDatasetFilter(ReportDataset, 'StartDate', StartDate, true);
//ApplyDatasetFilter(ReportDataset, 'FinishDate', FinishDate, true);
то работает.
А возможно установить для ds_Reestr_Work ранее сохраненный фильтр в ds_SaveFiltersReports (формат фильтра XML)?
"Прищепа Владимир" написал:А возможно установить для ds_Reestr_Work ранее сохраненный фильтр в ds_SaveFiltersReports (формат фильтра XML)?
Владимир, возможно. Как пример реализации обратите внимание на function GetSelectGroupResult(Sender, Message) сервиса wnd_AccountInMassMailGridAreaScript. а именно блок кода:
.... if (GroupDataset.Values('IsFiltered') != 0) { var FilterBuilder = GetAccountInMassMailFilterBilder(); Dataset = GetAccountDataset(); FilterBuilder.FilterDataset = GroupDataset; FilterBuilder.Load(); FilterBuilder.ApplyFilter(); } ....
Где в качестве Dataset нужно указать датасет отчета, GroupDataset - ds_SaveFiltersReports
Добрый день, Наталия. Сервис ds_SaveFiltersReports никакого отношения к отчету не имеет. Из него я получаю фильтр в форме XML. И куда его (текст XML) занести в FiltersBuilder мне не понятно.
Добрый день!
Владимир, фильтр, хранящийся в сервисе ds_SaveFiltersReports, должен иметь отношение к датасету отчета, чтобы он мог к нему применяться.
Нет возможности применить любой XML фильтр к любому датасету (например, нельзя применить фильтр, настроенный в разделе Задачи к разделу Контрагенты, так как наблюдается разная структура таблиц, select query).
Т.е. в сервисе, хранящем фильтры, должны содержаться фильтры преднастроенные для датасета отчета.
XML фильтр сам по себе без FilterBuilder можно использовать только для просмотра, а чтобы применить фильтр нужно использовать построитель фильтров.
"Бондарь Наталия" написал:
XML фильтра сам по себе без FilterBuilder можно использовать только для просмотра, а чтобы применить фильтр нужно использовать построитель фильтров.
И где можно взять этот мифический построитель фильтров?
А также описание его работы с примерами.
"Прищепа Владимир" написал:И где можно взять этот мифический построитель фильтров?
FilterBuilder = System.CreateObject('TSObjectLibrary.FiltersBuilder');
"Прищепа Владимир" написал:А также описание его работы с примерами.
С методами и свойствами Вы можете ознакомиться в SDK, примеры работы можно посмотреть в конфигурации.
Например, скрипт wnd_AccountInMassMailGridAreaScript