Объясните, пожалуйста, как работает такой механизм.
Есть деталь Продажи в разделе Контрагенты. Она построена с использованием окна wnd_OpportunitiesGridArea. Когда этот грид отображается в разделе Продажи, то никакой фильтр к записям не применяется. Когда это же окно грида используется в качестве детали в разделе Контрагенты, например, то применяется фильтр на Продажи, в которых данный Контрагент является Клиентом. Никак не могу понять, где этот фильтр настраивается.

Для чего это нужно?
1. Хочется в этой же детали отобразить Продажи, в которых данный Контрагент является не только клиентом, но и Посредником (BrokerID в Продажах).
2. Создать дополнительные представления, которые будут отображаться только если грид используется на детали раздела Контрагенты, содержащих прямые продажи (CustomerID) и косвенные продажи (BrokerID).
Как это реализовать?

Нравится

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

При переходе на деталь [Продажи] раздела [Контрагенты] происходит вызов функции RefreshOpportunityDetail() сервиса scr_AccountsWorkspace, где включается фильтр продаж по контрагенту (фильтр под названием 'CustomerID'). Фильтр 'CustomerID' реализован в сервисе sq_Opportunity.

"Ozzy" написал:1. Хочется в этой же детали отобразить Продажи, в которых данный Контрагент является не только клиентом, но и Посредником (BrokerID в Продажах).

Для того, чтобы на детали [Продажи] раздела [Контрагенты] отображались продажи, в которых контрагент является не только клиентом, но и посредником, необходимо :
1. Создать в sq_Opportunity набор фильтров, например, под названием AccountID, объединенных логическим оператором OR. Создать параметр с таким же названием.
Набор фильтров будет состоять из двух фильтров сравнения:
Первый:
[tbl_Opportunity].[CustomerID] = Parameter :AccountID
Второй:
[tbl_Opportunity].[BrokerID] = Parameter :AccountID
2. В функции RefreshOpportunityDetail() сервиса scr_AccountsWorkspace изменить название включаемого фильтра:

RefreshDetailData(BaseWorkspace.GridDataset, 'ID', 
		AccountsWorkspace.OpportunityDataset, 'AccountID');

"Ozzy" написал:2. Создать дополнительные представления, которые будут отображаться только если грид используется на детали раздела Контрагенты, содержащих прямые продажи (CustomerID) и косвенные продажи (BrokerID).

Управлять видимостью представлений в окне wnd_OpportunitiesGridArea, в зависимости от родительского раздела, можно таким образом: в функции function wnd_BaseGridAreaOnPrepare(Window) сервиса wnd_OpportunitiesGridAreaScript прописать код

var ParentWindow = Self.ParentContainer.ParentWindow.Name; 
if (ParentWindow == 'wnd_AccountsWorkspace'){         
                   dgvName.IsVisible = true;
         }   else {
		 dgvName.IsVisible = false;} 

Наталия, спасибо, все заработало.
Но с представлениями есть небольшая проблемка: при переключении между записями реестра и представлениями детали данные могут отображаться по разному, то есть или фильтр вообще не применяется - отображаются все продажи или записи детали не отображаются вообще, пока не сменишь контрагента и не вернешься обратно.
Где еще в скриптах необходимо прописать обновление/применение фильтров?

PS. Для созданных представлений FilterSetCode заполнил в соответствии с названиями фильтров в sq_Opportunity.

А для события OnActiveViewChanged Вы установили обновление датасета?

Нет, а что туда прописать надо?

Да вроде RefreshDetailData должна решить вопрос. А после перехода на представление и обновление реестра данные выводятся корректно?

Базовый рефреш вызывается и так.

"Гакало Игорь Александрович" написал:А после перехода на представление и обновление реестра данные выводятся корректно?
Нет, данные выводятся некорректно. Отследил монитором и вижу, что условия выборки накладываются как угодно или вообще не накладываются при переходах между записями реестра и переключении представлений.

Кажется мне, что FilterSetCode как-то не совсем так накладывается и необходима "ручная" установка фильтров.

Посмотрите на реализацию детали "Продукты в счете" в разделе "Проекты". Она должна помочь.

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