Добрый день! Есть ли возможность отфильтровать в окне фильтрации отчета тот набор данных который выводиться при выборе поля из справочника. Например выбираешь контрагентов и выводишь только с адресом "Москва"???
Нравится
Можно добавить в запрос и датасет отчета поле адрес контрагента, и выбирать его в окне фильтрации
Не так то понятно можно. Я хотел фильтровать именно выбор контрагента по определенным полям чтобы окно выбора контрагента уже выводилось отфильтрованным?
Иван, это можно реализовать только используя своё окно фильтрации. В нём Вы сможете накладывать на поля какие угодно фильтры и присваивать им начальные значения при обработке OnPrepare самого окна, или же при обработке OnPrepareSelectWindow Lookup-контролов.
Спасибо понятно! А как создать свое окно фильтрации для отчета. Просто создаешь окно указываешь в нем датасет отчета?
Не совсем. Нужно создать окно, в нём можно использовать как один, так и несколько датасетов, которые Вам нужны для выбора значений. Но они не связаны с датасетами отчёта. Все остальные действия по фильтрации значений и вычислении выполняются в скрипте окна.
Посмотрите реализацию базовых отчётов, которые используют свои окна фильтрации. Например, отчёт "Движение денежных средств" (использует wnd_CashflowReportFilter). Или другие отчёты, которые есть в Вашей конфигурации.
"Лабьяк Олег Игоревич" написал:Посмотрите реализацию базовых отчётов, которые используют свои окна фильтрации. Например, отчёт "Движение денежных средств"
Добрый день!
Я новичок и у меня возникла похожая ситуация. Необходимо в отчете подправить фильтр таким образом, чтобы при выборе значения в фильтре Подразделения в фильтре Ответственный указывались бы только ответственные из выбранного подразделения (или по всем, если подразделение не выбрано).
Можете подробнее рассказать о том, как можно создать свое окно фильтрации для отчета и как его к нему привязать? Или дайте ссылку, где почитать.
Указанного в комментарии отчета для примера не нашла у себя :(
Заранее благодарна!
Если у Вас нет указанного отчета, то Вы можете найти другие примеры из конфигурации. Все отчеты хранятся в подветках Reports каждого корневого узла дерева сервисов. Вам нужны те отчеты, среди сервисов которых присутствует сервис wnd_* окна фильтрации. Посмотрите, например, в инцидентах. Там точно хотя бы два есть.
Окно фильтрации привязывается к отчету в клиентском приложении в разделе "Отчеты" (Инструменты-Отчеты). По кнопке изменения свойств отчета нужно указать созданное окно фильтрации для отчета.
Логика работы нужного Вам окна должна быть таковой: в окне должно быть хотя бы два поля -- для выбора подразделения и для выбора ответственного. Дальше, как и рекомендовал Олег, в обработчике события OnPrepareSelectWindow Lookup-контрола выбора ответственного нужно по выбранному подразделению (edtDepartment.DataField.Value) фильтровать LookupDataset, который приходит в обработчик параметром. Например, так:
ApplyDatasetFilter(LookupDataset, 'DepartmentID', edtDepartment.DataField.Value, true);
Тут edtDepartment - это Lookup-контрол для выбора подразделения из Вашего окна фильтрации.
Поищите по узлам Reports готовые отчеты с окнами фильтрации, чтобы детальнее разобраться с проблемой.
Спасибо за ответ!
Попробовала привязать форму к отчету, получилось, что при вызове отчета окно с фильтрами очень долго грузится, а когда открывается, то оно пустое (то есть не из чего параметры выбирать). Подскажите, может я чего неправильно делаю?
Вот код на открытие формы с фильтрами:
Но я использовала код готовой уже формы, т.к. я новичок и только разбираюсь во всем.
var FilterEngine = new Object(); function wnd_ReportTaskByManagerOnPrepare(Window) { FilterEngine.ReportPreviewer = GetAttribute(Window, 'ReportPreviewer'); FilterEngine.Report = FilterEngine.ReportPreviewer.Report; FilterEngine.dsOpportunities = Services.GetNewItemByUSI('ds_Opportunity'); FilterEngine.OpportunityFilterWindow = wndOpportunityFilter.Window; PrepareReportFilterWindow(FilterEngine.OpportunityFilterWindow, FilterEngine.dsOpportunities, 'ID', 'Title', 'OpportunityFilters'); FilterEngine.dsAccounts = Services.GetNewItemByUSI('ds_Account'); FilterEngine.AccountFilterWindow = wndAccountFilter.Window; PrepareReportFilterWindow(FilterEngine.AccountFilterWindow, FilterEngine.dsAccounts, 'ID', 'Name', 'AccountFilters'); FilterEngine.dsOwners = Services.GetNewItemByUSI('ds_Contact'); FilterEngine.OwnerFilterWindow = wndOwnerFilter.Window; PrepareReportFilterWindow(FilterEngine.OwnerFilterWindow, FilterEngine.dsOwners, 'ID', 'Name', 'OwnerFilters'); FilterEngine.dsTaskType = Services.GetNewItemByUSI('ds_TaskType'); FilterEngine.TypeFilterWindow = wndTypeFilter.Window; PrepareReportFilterWindow(FilterEngine.TypeFilterWindow, FilterEngine.dsTaskType, 'ID', 'Name', 'TypeFilter'); FilterEngine.dsPriority = Services.GetNewItemByUSI('ds_TaskPriority'); FilterEngine.PriorityFilterWindow = wndPriorityFilter.Window; PrepareReportFilterWindow(FilterEngine.PriorityFilterWindow, FilterEngine.dsPriority, 'ID', 'Name', 'PriorityFilters'); FilterEngine.dsStatus = Services.GetNewItemByUSI('ds_TaskStatus'); FilterEngine.StatusFilterWindow = wndStatusFilter.Window; PrepareReportFilterWindow(FilterEngine.StatusFilterWindow, FilterEngine.dsStatus, 'ID', 'Status', 'StatusFilters'); FilterEngine.DateFilterWindow = wndDateFilter.Window; } function wnd_FilterTasksListOnPrepare(Window) { PrepareWindow(Window); }
Вы выбрали довольно сложное окно фильтрации, как для начала. Посмотрите на wnd_ReportOpportunitiesDateFilter -- это простенькое пользовательское окно фильтрации по периоду. Для него и скрипт обработки wnd_ReportOpportunitiesDateFilterScript совсем небольшой. В функции SaveDatePeriod производится считывание значений из окна (на самом деле из датасета mds_DatePeriod, привязанного к окну), дальше производится фильтрация набора данных и передача значений в параметры отчета для отображения их также и там. Если будете использовать его для своих целей или для тестирования, то создайте новое окно, укажите в параметре TemplateWindowUSI значение wnd_ReportOpportunitiesDateFilter, сохраните сервис созданного окна, закройте его, откройте вновь и получите фактически копию. Уже с ним можете работать. Проверьте также, чтобы это окно было указано в свойствах нужного отчета в клиентском приложении Террасофт.
Добрый день, Уважаемые!
Опять у меня проблемка возникла. Решаю, какие компоненты использовать для фильтрации значений. Lookup - не подходит, т.к. необходим множественный выбор (подразделений можно выбрать несколько и по этим нескольким подразделениям необходимо фильтровать параметр ответственный).
Поискала информацию на форуме, так и не поняла, какой компонент в такой ситуации использовать: FiltersBuilderControl или EnumDataControl? Или еще какой можно?
Марина, LookupControl вполне подходит для множественного выбора. В появившемся окне выбора (используется окно wnd_SelectData) Вы можете выбрать несколько значений с помощью клавиш Shift или Ctrl, доступ к которым можно будет получить через атрибут KeyValues окна.