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

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

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

Нравится

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

Здравствуйте!
обновление деталей и, соответственно, накладывание фильтров происходит в функции 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;

это нужно совместить с базовым рефрешом детали.
Если что-то непонятно, или будут еще вопросы (потому что и Ваш вопрос не очень конкретный) -- пишите. удачи!

Добрый день!

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

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

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

Ольга, спасибо большое за отличный пост!
Арсений, думаю, наиболее правильный ответ именно тот, что описала Ольга, поскольку нужно в деталь выводить записи, привязанные к записи раздела, т.е. отфильтрованные по 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, то есть, какое у нее значение -- но тут лучше уже поэкспериментировать+посмотреть в коде этой функции, что она делает.

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