Деталь
фильтр
Скрипты
Разработка

Фильтр на деталь

У меня есть раздел с полем период, в нем деталь в которую я хочу выводить контакты(по определеному условию) и сумму операций за предыдущий период.

Подскажите, пожалуйста, как правильно накладывать фильтр, на деталь?

Нравится

6 комментариев

Здравствуйте!
обновление деталей и, соответственно, накладывание фильтров происходит в функции RefreshDetails() скрипта соответствующего раздела.
"Ветка" для Вашей детали выглядит примерно так:
[javascript]
else
if (pcDetails.ActivePage.Name == pgContactsDetail.Name) {
SetAttribute(wndContactsDetail.Window, 'HideButtonsFrame', true);
RefreshCommonDetail(BaseWorkspace, wndContactsDetail,
ParentItemFieldName, ChildFilterName;
}
[/javascript]
атрибут 'HideButtonsFrame' отвечает за то, чтобы кнопки "добавить" и т.д. были недоступными
pgContactsDetail--название Вашей детали
wndContactsDetail--название контейнера окна Вашей детали

RefreshCommonDetail -- это функция стандартного обновления детали ( как оно именно работает, можете глянуть в скрипте cr_WorkspaceUtils)

Вам же нужно прописать свой рефреш. А именно -- передать в параметры фильтра нужные значения.
"Достучаться" до параметра можно примерно так:
[javascript]
var ContactsDataset = wndContactsDetail.ComponentsByName('dlData').Dataset;
var Parameters = ContactsDataset .SelectQuery.Parameters;
Parameters('FilterName') = FilterValue;
[/javascript]
это нужно совместить с базовым рефрешом детали.
Если что-то непонятно, или будут еще вопросы (потому что и Ваш вопрос не очень конкретный) -- пишите. удачи!

Добрый день!

Или может так :wink:

С уважением,
Белецкий Арсений
Группа компаний Terrasoft

Добрый день Всем!

Ольга, спасибо большое за отличный пост!
Арсений, думаю, наиболее правильный ответ именно тот, что описала Ольга, поскольку нужно в деталь выводить записи, привязанные к записи раздела, т.е. отфильтрованные по ParentItemID.

фильтрует, спасибо всем

Добрый день!
Сделайте по аналогии с

[javascript]
if (pcDetails.ActivePage.Name == pgContactsInAccountDetail.Name) {
SetAttribute(wndContactsInAccountDetail.Window, 'HideButtonsFrame', true);
RefreshCommonDetail(BaseWorkspace, wndContactsInAccountDetail,
'AccountID', 'AccountID');
}
[/javascript]

в Accounts\General\Main Grid\scr_AccountsWorkspace

Если применить фильтрацию датасета детали по дополнительному параметру PeriodID- измените RefreshCommonDetail или создайте свою фикцию, по ее подобию и передавайте этот параметр туда. Т.к. в вашей реализации на последнем вызове обновления этот параметр сбрасывается.

параметр Вы передали, а фильтр включили?
думаю, лучше галочку в Администраторе поставить, чтобы он все время был включенным.
либо включать его здесь, после установки параметра (перед базовым рефрешем), функцией
[javascript]
var Filters = DetailDataset.SelectQuery.Filters;
EnableFilter(Filters, 'FilterName', true)
[/javascript]
Правда, честно говоря, я не очень уверена насчет переменной Filters, то есть, какое у нее значение -- но тут лучше уже поэкспериментировать+посмотреть в коде этой функции, что она делает.

Показать все комментарии