И все же в продолжение идеи о подсветке закладок предлагаю альтернативный вариант решения этой задачи. Все равно решение этой задачи востребовано среди пользователей. Согласна, реализация этой задачи абсолютно для всех закладок приведет к большому количеству запросов, отправляемых на сервер.
Но, как показывает практика, для пользователя важны не все, а лишь часть. Поэтому реализация подобного функционала не приведет к большой нагрузке сервера.
Предлагаю рассмотреть пример изменения Caption закладки "Адрес" раздела "Контрагенты" при наличии в ней записей на "Адрес*" (здесь можно придумать какие угодно варианты).
Итак, необходимо выполнить следующие действия:
1. Открываем сервис wnd_AccountsWorkspace, выделяем элемент деталей и переходим в обработчик события OnChangeActivePage.
2. В обработчике прописываем следующий код:
RefreshDetails();
if (pcDetails.ActivePage.Name == pgAddressesDetail.Name) { // вместо pgAddressesDetail нужно вставить название //Вашей закладки
if (!IsDatasetEmpty(wndAddressesDetail.Window.ComponentsByName('dlData').Dataset)) { // вместо wndAddressesDetail нужно вставить название окна //закладки
pgAddressesDetail.Caption = 'Адреса';
} else {
pgAddressesDetail.Caption = 'Адреса*'
}
}
Вышеприведенный код реализует смену Caption закладки при смене активной закладки в менеджере деталей.
3. Затем откройте закладку "Невизуальные", выделите датасет dlAccounts и перейдите в обработчик события OnDatasetAfterPositionChange.
4. Вставьте в обработчик события следующий код:
if (Dataset.Attributes('IsNew') != true) {
RefreshDetails();
}
Dataset.Attributes('IsNew') = false;
var AccountID = Dataset.Values('ID');
var AddressDataset = Services.GetNewItemByUSI('ds_AccountAddress'); // вместо //ds_AccountsAddress нужно указать датасет соответсвующей //закладки
ApplyDatasetFilter(AddressDataset, 'AccountID', AccountID, true);
AddressDataset.Open();
var AddressDatasetIsEmpty = IsDatasetEmpty(AddressDataset);
AddressDataset.Close();
if (!AddressDatasetIsEmpty) {
pgAddressesDetail.Caption = 'Адреса';
} else {
pgAddressesDetail.Caption = 'Адреса*'
}
Вышеприведенный код реализует смену Caption закладки при переходе по записям в основном реестре.
5. Сохраните все внесенные изменения. Перезапустите рабочее приложение Terrasoft CRM и протестируйте работоспособность системы.
По аналогии с этим примером у Вас будет возможность реализовать подобный функционал для необходимого Вам раздела и нужной детали.
Желаю удачи!
С уважением,
Мельникова Екатерина