Я хочу изменить значение по умолчанию аттрибута IsReadOnly для окна выборки.
Я так понимаю это должно быть доступно в обработчике события OnPrepareSelectWindow LookupDataField, однако не смог разобраться как. все, что смог найти - это указать SelectWindowUSI и настроить LoockupDataset для окна выбора.

Нравится

1 комментарий

Денис, этот атрибут задаётся в свойствах или датасета, или окна. Вот как он проверяется в скрипте scr_SelectData:

	var IsReadOnlyFromDataset = 
		GetAttribute(SelectData.Dataset, IsReadOnlyAttrName);
	var IsReadOnlyFromWindow = GetAttribute(Window, IsReadOnlyAttrName);
	SelectData.IsReadOnly = IsReadOnlyFromDataset || IsReadOnlyFromWindow;

А так он задаётся в обработчике OnPrepareSelectWindow в wnd_CampaignEditScript:

function edtOwnerOnPrepareSelectWindow(LookupDataControl) {
	PrepareLookupDataControl(LookupDataControl, dlData.Dataset);
}

Эта функция в scr_WindowUtils:

function PrepareLookupDataControl(LookupDataControl, Dataset) {
	var DataFieldName = LookupDataControl.DataFieldName;
	var DataField = Dataset.DataFields.ItemsByName(DataFieldName);
	var LookupDataset = DataField.LookupDataset;
	SetAttribute(LookupDataset, 'IsReadOnly', true);
}
Показать все комментарии

Поставил на LookupControl - поле справочника для фильтрации, событие OnPrepareSelectWindow, где при условии if ((edtDepart.Value==undefined)||(edtDepart.Value=="")) { окно справочника фильртации должно вылетать предупреждение и при этом окно для фильтрации не должно открыться, что прописать чтоб окно не открылось, подскажите?

function edtOwnerOnPrepareSelectWindow(LookupControl, SelectWindow) {
var LookupDataset = LookupControl.LookupDatasetLink.Dataset;
if ((edtDepart.Value==undefined)||(edtDepart.Value=="")) {
ShowWarningDialog ("Поле 'Точка продаж' не может быть пустым")
.........//?
}else{
var ChannelIDsArray = edtDepart.Value.split(',');
var DepartmentIDsArray = edtDepart.Value.split(",");
ApplyDatasetIncludeFilter(LookupDataset, 'ContactOwnerDepartmentID',
DepartmentIDsArray, true);
}

Нравится

1 комментарий

Алексей, с окном сделать ничего не получится, так как его открытие происходит средствами ядра.

Возможно, Вам подойдёт следующее решение: во время обработки события OnPrepare Вашего окна редактирования проверять значение поля edtDepart. Если оно не заполнено, сделать поле edtOwner нередактируемым (edtOwner.IsEnabled = false). Подобную проверку делать и при изменении значения в поле edtDepart во время обработки события dlDataOnDatasetDataChange:

function dlDataOnDatasetDataChange(DataField) {
	var FieldName = DataField.Name;
	...
	if (FieldName = 'DepartID') {
		edtOwner.IsEnabled = !IsEmptyValue(edtDepart.Value);
	}
	...
}

После этого в обработчике события OnPrepareSelectWindow контрола edtOwner достаточно будет оставить часть, которая в блоке else:

function edtOwnerOnPrepareSelectWindow(LookupControl, SelectWindow) {
	var LookupDataset = LookupControl.LookupDatasetLink.Dataset;
	var ChannelIDsArray = edtDepart.Value.split(',');
	var DepartmentIDsArray = edtDepart.Value.split(",");
	ApplyDatasetIncludeFilter(LookupDataset, 'ContactOwnerDepartmentID',
		DepartmentIDsArray, true);
}
Показать все комментарии