Как сменить стандартное окно поиска по справочнику на его реестр?

Коллеги, для контрола Lookup используется стандартное окно выбора записей (с поиском) из справочника. Как можно его заменить на окно реестра без написания кода (ShowWindow и т.п.)? Разумеется, чтобы с этого окна можно было делать выбор записи.

Нравится

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

У Lookup есть свойство SelectWindow.
Совсем без написания кода не получится, так как нужно будет дописать фрагмент, кода окно возвращает выбранное значение Lookup.
Что вас не устраивает в текущем выборе значения?

Изменить окно выбора достаточно просто: укажите код окна нужного реестра в свойстве SelectWindowUSI контрола. Конкретно для этого действия ничего дополнительно программировать не нужно. Зато придётся изменять скрипт окна, так как теперь оно будет использоваться в двух (а то и трёх) режимах: в качестве окна реестра раздела, для выбора элемента в контроле и, возможно, в деталях других разделов. Следовательно, при инициализации ему необходимо передавать некоторый признак, в каком качестве оно будет использоваться. Не говоря уже о том, что при закрытии окна реестра выделенные записи необходимо сохранять в атрибуты и передавать окну редактирования через механизм нотификации (в базовом окне выбора записей из справочника всё это реализовано).

Спасибо за информацию. Проблема в том, что в справочнике есть колонка, где тип данных перечисление. Хотелось бы сразу группировать записи по этой колонке, в частности показывать только определенные (как в случае с FilterSetCode). По умолчанию поиск выполняется только по названиям.

Может, я не совсем правильно понимаю, но мне кажется, что в этом случае достаточно в обработчике события OnPrepareSelectWindow включать фильтр по колонке. Подобно тому, как реализован, например, выбор ответственного в карточке задачи:

function edtOwnerOnPrepareSelectWindow(LookupDataControl) {
	PrepareLookupDataControl(LookupDataControl, dlData.Dataset);
	var OwnerGroupID = GetAttribute(Self, 'OwnerGroupID');
	var LookupDataset = LookupDataControl.DataField.LookupDataset;
	var IsOwnerGroupIDFilterEnabled = !IsEmptyGUID(OwnerGroupID);
	ApplyDatasetFilter(LookupDataset, 'GroupID', OwnerGroupID,
		IsOwnerGroupIDFilterEnabled);
}

Коллеги, спасибо! Реализовал через сохраненный фильтр:

LookupDataControl.DataField.LookupDataset.SelectQuery.Items(0).Filters.ItemsByCode('Filter').IsEnabled = true;
Показать все комментарии