Очень интересно.
Нравится
каких отчетов? word-excel в принципе можно средствами террасофт
Да, возможна. В качестве таймера можно использовать планировщик Terrasoft, планировщик Windows или планировщик БД в зависимости от реализации.
Спасибо за участие. Если можно пример команды для планировщика Windows - сервис отчета - Common\Medinskiy\ReportLogist\fr_ReportComercia.
Именно с FR — не знаю. В общем случае делается специальная карточка, которая при открытии отправляет по почте что надо кому надо и сразу закрывается. А в планировщик Windows добавляется задание вроде:
[code]
c:\terrasoft\tsclient.exe /wnd=wnd_MyReportSender -cfg=MyConfiguration -usr=Supervisor -pwd=qwerty
[/code]
Если задание запущено, то по таймеру открывается это окно и отрабатывает логика.
Если можно подробнее про логику работы окна, которое открывается (wnd_MyReportSender).
Вы напишете её сами. В обработчике OnPrepare окна будет примерно:
[javascript]
function wnd_MyReportSenderOnPrepare(Window) {
System.BeginProcessing();
SendReportByEmail();//ToDo
System.EndProcessing();
Self.Close();
}
[/javascript]
Каким образом можно закрыть Terrasoft после окончания работы окна?
В обработчике OnShow
[javascript]
function wnd_MeReportSenderOnShow(Window){
try {
Window.Close();
}
catch(e){}
}
[/javascript]
Наваял функцию для автоматического экспорта отчета
[javascript]
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){
}
}
[/javascript]
Но...
Если устанавливаю фильтр
//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. а именно блок кода:
[javascript]
....
if (GroupDataset.Values('IsFiltered') != 0) {
var FilterBuilder = GetAccountInMassMailFilterBilder();
Dataset = GetAccountDataset();
FilterBuilder.FilterDataset = GroupDataset;
FilterBuilder.Load();
FilterBuilder.ApplyFilter();
}
....
[/javascript]
Где в качестве Dataset нужно указать датасет отчета, GroupDataset - ds_SaveFiltersReports
Добрый день, Наталия. Сервис ds_SaveFiltersReports никакого отношения к отчету не имеет. Из него я получаю фильтр в форме XML. И куда его (текст XML) занести в FiltersBuilder мне не понятно.
Добрый день!
Владимир, фильтр, хранящийся в сервисе ds_SaveFiltersReports, должен иметь отношение к датасету отчета, чтобы он мог к нему применяться.
Нет возможности применить любой XML фильтр к любому датасету (например, нельзя применить фильтр, настроенный в разделе Задачи к разделу Контрагенты, так как наблюдается разная структура таблиц, select query).
Т.е. в сервисе, хранящем фильтры, должны содержаться фильтры преднастроенные для датасета отчета.
XML фильтр сам по себе без FilterBuilder можно использовать только для просмотра, а чтобы применить фильтр нужно использовать построитель фильтров.
"Бондарь Наталия" написал:
XML фильтра сам по себе без FilterBuilder можно использовать только для просмотра, а чтобы применить фильтр нужно использовать построитель фильтров.
И где можно взять этот мифический построитель фильтров?
А также описание его работы с примерами.
"Прищепа Владимир" написал:И где можно взять этот мифический построитель фильтров?
[javascript]
FilterBuilder = System.CreateObject('TSObjectLibrary.FiltersBuilder');
[/javascript]
"Прищепа Владимир" написал:А также описание его работы с примерами.
С методами и свойствами Вы можете ознакомиться в SDK, примеры работы можно посмотреть в конфигурации.
Например, скрипт wnd_AccountInMassMailGridAreaScript