Приветствую! Такая задача:
необходимо при нажатии на печать из той или иной формы выводить данный не по дефолту, как все данные разбиты по колонкам, а например, есть данные повторяющиеся и чтобы они не повторялись в отдельной колонке 100 раз, надо вывести их в шапку печатной формы.
Для этого нужно внести изменения в печатную форму. Перейдите в дизайнер отчета и над MasterData добавьте GroupHeader. В него добавьте поле, по которому вам нужна группировка - в данном случае это поле 'Комментарий'.
Ругается, потому что нужно выбрать не только название датасета, но и поля, по которому нужно группировать (см. файл во вложении).
Чтобы выбрать название поля нужно связать датасет FastReport с датасетом в конфигурации Terrasoft.
Если вам удалось выбрать значение поля, тогда датасет FastReport связан с датасетом конфигурации.
На GroupHeader добавьте Memo, в котором также укажите датасет и название поля (см. прикрепленный файл).
Если Вам нужно вызывать отчет из конфигурации Terrasoft, то на обработчик OnClick кнопки вызываете приблизительно такой код (где ReportID - это уникальный идентификатор вашего отчета FastReport, ID записи в разделе 'Отчеты'):
var ReportDataset = GetSingleItemByCode('ds_Report', 'SingleReport');
var Columns = ReportDataset.SelectQuery.Items(0).Columns;
DisableAllColumns(Columns);
var FieldNames = new Array('Code', 'FilteredDatasetCode', 'FilterFormCode');
EnableColumnsByArray(Columns, true, FieldNames);
ApplyDatasetIDFilter(ReportDataset, ReportID, true);
ReportDataset.Open();
if (IsDatasetEmpty(ReportDataset)) {
return;
}
var ReportUSICode = ReportDataset.Values('Code');
var FilteredDatasetCode = ReportDataset.Values('FilteredDatasetCode');
var FilterFormCode = ReportDataset.Values('FilterFormCode');
var Report = Services.GetNewItemByUSI(ReportUSICode);
if (FilterFormCode) {
var FilterForm = Services.GetNewItemByUSI(FilterFormCode);
}
ShowReport(Report, FilterForm);
Просто, если я нажимаю принт, то открывается родительская форма(1 пост мой), и если я нажимаю "Дизайн" то я начинаю изменять родительскую форму, которая является для всех одной при нажатии на кнопку принт.
а где посмотреть Report ID, в админке это можно посмотреть?
(где ReportID - это уникальный идентификатор вашего отчета FastReport, ID записи в разделе 'Отчеты') - не могу найти...
Спасибо, это самое простое для меня)
а куда этот ID в вашем коде вставлять?
то есть я сейчас сделал следующее:
в нужном окне добавил кнопку OK и при нажатии на нее хочу вывести данные из окна в нужный fr_
в скрипте к данному окну пишу ваш экземпляр:
function btnOKOnClick(Control){
var ReportDataset = GetSingleItemByCode('ds_VisesInDetailPD', 'fr_FastReport');
var Columns = ReportDataset.SelectQuery.Items(0).Columns;
DisableAllColumns(Columns);
var FieldNames =new Array('Code', 'FilteredDatasetCode', 'FilterFormCode');
EnableColumnsByArray(Columns, true, FieldNames);
ApplyDatasetIDFilter(ReportDataset, ReportID, true);
ReportDataset.Open();if(IsDatasetEmpty(ReportDataset)){return;}
var ReportUSICode = ReportDataset.Values('Code');
var FilteredDatasetCode = ReportDataset.Values('FilteredDatasetCode');
var FilterFormCode = ReportDataset.Values('FilterFormCode');
var Report = Services.GetNewItemByUSI(ReportUSICode);if(FilterFormCode){
var FilterForm = Services.GetNewItemByUSI(FilterFormCode);}
ShowReport(Report, FilterForm);}
бросил фаст репорт, пытаюсь выгрузить данные из окна в excel, как выгрузить именно данные из определенного окна?
делаю так:
function btnOKOnClick(Control){
var StartRow =4;
var sq = Services.GetNewItemByUSI('sq_VisesInDetailPD');//var sq = Services.GetNewItemByUSI('wnd_VisesInDetailPDGridArea');
var ds = sq.Open();
var Excel =new ActiveXObject('Excel.Application');
var Excel_wb = Excel.Workbooks.Add();while(Excel_wb.Sheets.Count>1){
Excel.Sheets(1).Delete();}
var Sheet = Excel.Sheets(1);
Sheet.Name='Лист согласования';
Sheet.Cells(StartRow,2).Value='Роль';
Sheet.Cells(StartRow,3).Value='Сотрудник';
Sheet.Cells(StartRow,4).Value='Дата';
Sheet.Cells(StartRow,5).Value='Виза';
Sheet.Cells(StartRow,6).Value='Комментарий';
Sheet.Cells(StartRow,7).Value='123';
Sheet.Cells.VerticalAlignment= xlCenter;
Sheet.Cells.HorizontalAlignment= xlCenter;
Sheet.Cells.Font.Size=10;
Sheet.Columns(1).HorizontalAlignment= xlLeft
Sheet.Cells(StartRow,1).ColumnWidth=47.5;
Sheet.Cells(StartRow,2).ColumnWidth=17;
Sheet.Cells(StartRow,3).ColumnWidth=17;
Sheet.Cells(StartRow,4).ColumnWidth=17;
Sheet.Cells(StartRow,5).ColumnWidth=17;
Sheet.Cells(StartRow,6).ColumnWidth=17;
Sheet.Cells(StartRow,7).ColumnWidth=17;
Sheet.Cells(StartRow,1).RowHeight=38.25;
Sheet.Range(Sheet.Cells(StartRow,1),Sheet.Cells(StartRow,7)).Font.Bold=true;
Sheet.Range(Sheet.Cells(StartRow,1),Sheet.Cells(StartRow,7)).WrapText=true;
Sheet.Range(Sheet.Cells(StartRow,2),Sheet.Cells(StartRow,7)).Interior.Color=13949932;
var Line = StartRow+1;
Sheet.Cells(Line,2).Font.Bold=true;
Sheet.Cells(Line,2).HorizontalAlignment= xlCenter;
Sheet.Cells(Line,2).Interior.Color=13949932;
Sheet.Cells(Line,1).Value= ds('RoleName');-- тут он мне выгружает данные из sq а не из wnd.. как выгрузить из wnd?
Sheet.Cells(Line,2).Value='';
Sheet.Cells(Line,4).Value='';
Sheet.Cells(Line,5).Value='';
ds.Close();
Excel.Visible=true;}
Здравствуйте!
По вашему последнему вопросу по Fast Report. Ошибка возникает потому, что в ваш скрипт нужно подключить скрипт, в котором реализована одна из используемых функций в вашем обработчике. Предполагаю, что это функция ShowReport(Report, FilterForm) она реализована scr_ReportUtils. Попробуйте подключить его в ваш скрипт.
С примером реализации выгрузки данных в Excel можете ознакомиться по этой ссылке.
Алла, о мой Бог, выручайте:)
ну никак не хочет отображать данные именно того окна, где кнопку сделал, фастрепорт открывается, но выводит мне все данные из этого раздела, а не именно из этого окна.
Проверьте, чтобы в FastReport использовался нужный вам датасет с корректной фильтрацией.
Более подробно, что-то порекоммендовать смогу, когда увижу вашу реализацию.
при нажатии на это:
открывается сразу fr_FastReport1 с десятками страниц данных, а должно быть только по 3 строкам соответственно, которые отображаются в окне над кнопкой.
вот по всей видимости неправильный fr_:
Проблема, как я и писала выше, заключается в том, что в отчете Fast Report вы используете датасет без фильтрации.
Если вам нужно в отчет выводить фильтуемые данные, тогда вместо функции ShowReport используйте ShowSelectedRecordsReport(ReportCode, FilteredDatasetCode, GridDatasetIDs), где
FilteredDatasetCode - это название вашего датасета ('ds_VisesInDetailPD')
GridDatasetIDs - это массив ID записей, которые должны отображаться в отчете.
Вместе всего вышеописанного кода нужно написать:
ShowSelectedRecordsReport('fr_FastReport1', 'ds_VisesInDetailPD', ['60E6526D-89EA-463C-869C-9016A20A767D']);
вы просто фея кодинга%)
Спасибище!
последний вопрос, сейчас открывает только 1 строчку данных, что отоброжается в окне , а не все, что есть в окне.
Надо цикл написать на проход колличества записей?
можно пример, если не трудно!
или как-то по другому?