Автоматическое заполнение фильтра документ системного окна фильтрации
Здравствуйте.
Есть такой вопрос: При создании отчета fast report используется стандартное окно фильтрации, в котором отображаются фильтры Старт. Дата, Кон.Дата, Документ, Тип Документа. Тип Документа выставлен по умолчанию в fr_ReportSheduleOfWork.
Требуется автоматически подставлять в фильтр Документ текущий документ из грида. Делать отчет по выделенным записям нельзя, т.к. необходимо выбирать даты, а так окно фильтрации не появляется.
Вопрос в том, можно ли сделать это без собственного окна фильтрации?
Заранее благодарен.
Нравится
Здравствуйте, Иван Александрович.
Для того, чтобы реализовать возможность автоматически подставлять в фильтр "Документ" базового окна фильтрации отчета FastReport текущий документ из реестра записей, необходимо внести следующие дополнения в базовые скрипты:
1. Скрипт scr_ReportUtils. В функцию function ReportMenuItemExecute(ActionMenuItem, GridDataset, DataGrid, WorkspaceName) добавить строки кода (выделено жирным):
function ReportMenuItemExecute(ActionMenuItem, GridDataset, DataGrid, WorkspaceName) {
...................
} else {
var Report = Services.GetNewItemByUSI(ReportCode);
var FilterFormCode = Dataset.ValAsStr('FilterFormCode');
if (FilterFormCode) {
var FilterForm = Services.GetNewItemByUSI(FilterFormCode);
SetAttribute(FilterForm, 'ReportDatasetUSI',
FilteredDatasetCode);
SetAttribute(FilterForm, 'SelectedIDs', SelectedIDs);
}
//For Document//
var SelectedName = GetDatasetFieldValueByID(GridDataset.USI, SelectedIDs[0], 'Title');
SetAttribute(Report, 'SelectedID', SelectedIDs[0]);
SetAttribute(Report, 'SelectedName', SelectedName);
//For Document//
ShowReport(Report, FilterForm);
}
break;
}
} finally {
Dataset.Close();
}
}
2. Скрипт wnd_ReportFiltersScript. В конец функции function LoadFilters(Window), как отображено ниже, добавить код, реализующий установку значения фильтра в окне фильтрации:
function LoadFilters(Window) {
................
XMLStorage.LoadFromText(FiltersXML, ForceEncoding);
fbcMain.DataFieldsList.Deserialize(XMLStorage.RootNode);
}
//For Document//
var ReportCode = System.ExtractUSICode(ReportFilters.FastReport.USI);
if (ReportCode == 'fr_ReportName') {
var FieldName = GetAttribute(ReportFilters.FastReport, 'SelectedName');
var FieldID = GetAttribute(ReportFilters.FastReport, 'SelectedID');
fbcMain.DataFieldsList.Items(0).DisplayValue = FieldName;
fbcMain.DataFieldsList.Items(0).Value = FieldID;
fbcMain.DataFieldsList.Items(0).DisplayFieldValues.Clear();
fbcMain.DataFieldsList.Items(0).DisplayFieldValues.Add(FieldName);
fbcMain.DataFieldsList.Items(0).Values.Clear();
fbcMain.DataFieldsList.Items(0).Values.Add(FieldID);
fbcMain.DataFieldsList.Items(0).ValueNotSet = false;
}
//For Document//
}
Где в fbcMain.DataFieldsList.Items(0) содержится первый по порядку элемент в форме фильтрации, в fbcMain.DataFieldsList.Items(1) - второй и т.д