Совсем недавно на форуме, поэтому попытаюсь описать проблему более подробно.
Есть два поля Группы сервисов и Сервисы. Оба на основе созданных для них словарей.
Датасеты словарей ds_dicMyServiceGroup и ds_dicMyService. В ds_dicMyService есть поле UPID, которое ссылается на поле ID в ds_dicMyServiceGroup.
В запросе sq_dicMyService есть фильтр сравнения по полю UPID.
В скрипте, привязанном к окну при изменении значения поля Группа сервисов по срабатыванию dlDataOnDatasetDataChange делаю следующее:
var groupID = DataField.Value;
var dsMyService = GetSingleItemByCode('ds_dicMyService');
EnableDatasetFilters(dsMyService, false);
ApplyDatasetFilter(dsMyService, 'UPID', groupID, true);
При первом изменении значения в поле Сервисы меняются, в дальнейшем не изменяются.
Подебажил, в датасете содержимое меняется, а в элементе окна остаются значения отфильтрованные в первый раз.
Если что-то невнятно объяснил, просьба указать на это, а не ругать.
Заранее спасибо.
Нравится
"theimp" написал:var dsMyService = GetSingleItemByCode('ds_dicMyService');
здесь вы берете некий экземпляр датасета сервисов, а надо брать именно существующий экземпляр LookupDataset назначенного для поля ServiceID (или как там оно названо) в карточке
[javascript]
var LookupDataset = edtServiceID.DataField.LookupDataset;
[/javascript]
- так например, здесь edtServiceID - название контрола для ServiceID
потом именно его фильтровать
"theimp" написал:а в элементе окна остаются значения отфильтрованные в первый раз
в смысле при открытии справочника? или просто значение в поле?
честно говоря, по другому бы сделал - назначил фильтрацию на открытие именно нужного справочника аналогично
(на событие OnPrepareSelectWindow)
[javascript]
function edtContactOnPrepareSelectWindow(LookupDataControl) {
var Dataset = dlData.Dataset;
var LookupDataset = LookupDataControl.DataField.LookupDataset;
var AccountID = Dataset.Values('CustomerID');
var IsAccountIDFilterEnabled = !IsEmptyGUID(AccountID);
ApplyDatasetFilter(LookupDataset, 'AccountID', AccountID,
IsAccountIDFilterEnabled);
}
[/javascript]
-цитата:smile: фильтруем справочник контактов по значению из поля CustomerID
и потом OnDataChange - если меняем поле groupID то обнулял бы значение поля ServiceID
function edtMyServiceOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
var Dataset = dlData.Dataset;
var LookupDataset = LookupDataControl.DataField.LookupDataset;
var groupID = Dataset.Values('ServiceGroupID');
var IsFilterEnabled = !IsEmptyGUID(groupID);
ApplyDatasetFilter(LookupDataset, 'UPID', groupID,
IsFilterEnabled);
}
то же самое. элементы в выпадающем списке Сервис изменяются только один раз, после этого не обновляются
ну да, что то вроде Dataset('ServiceID') = null;
"theimp" написал:элементы в выпадающем списке Сервис изменяются только один раз, после этого не обновляются
так там у вас список выпадающий:smile:
тогда обязательно
[javascript]
edtMyService.UnprepareDropDownList();
[/javascript]
можно там же на OnDataChange