У меня есть раздел с полем период, в нем деталь в которую я хочу выводить контакты(по определеному условию) и сумму операций за предыдущий период.
Подскажите, пожалуйста, как правильно накладывать фильтр, на деталь?
Нравится
Здравствуйте!
обновление деталей и, соответственно, накладывание фильтров происходит в функции RefreshDetails() скрипта соответствующего раздела.
"Ветка" для Вашей детали выглядит примерно так:
else if (pcDetails.ActivePage.Name == pgContactsDetail.Name) { SetAttribute(wndContactsDetail.Window, 'HideButtonsFrame', true); RefreshCommonDetail(BaseWorkspace, wndContactsDetail, ParentItemFieldName, ChildFilterName; }
атрибут 'HideButtonsFrame' отвечает за то, чтобы кнопки "добавить" и т.д. были недоступными
pgContactsDetail--название Вашей детали
wndContactsDetail--название контейнера окна Вашей детали
RefreshCommonDetail -- это функция стандартного обновления детали ( как оно именно работает, можете глянуть в скрипте cr_WorkspaceUtils)
Вам же нужно прописать свой рефреш. А именно -- передать в параметры фильтра нужные значения.
"Достучаться" до параметра можно примерно так:
var ContactsDataset = wndContactsDetail.ComponentsByName('dlData').Dataset; var Parameters = ContactsDataset .SelectQuery.Parameters; Parameters('FilterName') = FilterValue;
это нужно совместить с базовым рефрешом детали.
Если что-то непонятно, или будут еще вопросы (потому что и Ваш вопрос не очень конкретный) -- пишите. удачи!
Добрый день Всем!
Ольга, спасибо большое за отличный пост!
Арсений, думаю, наиболее правильный ответ именно тот, что описала Ольга, поскольку нужно в деталь выводить записи, привязанные к записи раздела, т.е. отфильтрованные по ParentItemID.
Добрый день!
Сделайте по аналогии с
if (pcDetails.ActivePage.Name == pgContactsInAccountDetail.Name) { SetAttribute(wndContactsInAccountDetail.Window, 'HideButtonsFrame', true); RefreshCommonDetail(BaseWorkspace, wndContactsInAccountDetail, 'AccountID', 'AccountID'); }
в Accounts\General\Main Grid\scr_AccountsWorkspace
Если применить фильтрацию датасета детали по дополнительному параметру PeriodID- измените RefreshCommonDetail или создайте свою фикцию, по ее подобию и передавайте этот параметр туда. Т.к. в вашей реализации на последнем вызове обновления этот параметр сбрасывается.
параметр Вы передали, а фильтр включили?
думаю, лучше галочку в Администраторе поставить, чтобы он все время был включенным.
либо включать его здесь, после установки параметра (перед базовым рефрешем), функцией
var Filters = DetailDataset.SelectQuery.Filters; EnableFilter(Filters, 'FilterName', true)
Правда, честно говоря, я не очень уверена насчет переменной Filters, то есть, какое у нее значение -- но тут лучше уже поэкспериментировать+посмотреть в коде этой функции, что она делает.