Детали с нестандартным добавлением

Здравствуйте.
Есть таблица домов, в ней связь по DomkomID -> ID с таблицей tbl_Domkom.
Т.е. на одного домкома может быть несколько домов.
И у домкомов, и у домов есть свои разделы.
В разделе домкомов есть деталь "Дома" (дома выбираются из tbl_Houses по DomkomID). Проблема в том, что при добавлении дома в детали, нужно не добавлять новый дом, а находить существующий и прописывать в нём DomkomID.
Как реализовать подобный функционал?
Спасибо.

Нравится

4 комментария

Здравствуйте Ринат,
Подобную реализацию вы можете посмотреть в разделе [Инциденты], деталь [Связанные инциденты], обратите внимание на кнопку "Добавить связь"
1
Основная идея это вызывать окно выбора фунцией ShowSelectDataWindow и подвязывать уже существующие дома, если вы хотите делать Update поля DomkomID (таблица tbl_Houses) после выбора, можете создать сервис UpdateQuery в который передавать параметры для записи.

Если возникнут дополнительные вопросы, обращайтесь.

Алексей, спасибо, получилось.

Ниже пример решения. Может, кому пригодится.

Сервис HousesGridArea продублировал и изменил в нём обработчики событий:

function btnAddOnClick(Control) {
 
	var Dataset = GetSingleItemByCode('ds_TehCheck' /* датасет для wnd_SelectData */, 'HousesSearchGridArea');
	EnableDatasetFilters(Dataset, false);
 
	var SearchFieldNames = 'HouseAddress;DomkomID';
	var DisplayFieldNames = 'HouseAddress;Comment;DomkomID';
	var SearchFieldName = 'HouseAddress';
	var Tag = 'SelectHouse';
	var KeyFieldName = 'ID';
	var KeyValue = '';
	var SearchValue = '';
	var NotifyObject = Self;
	var IsReadOnly = false;
	ShowSelectDataWindow(Dataset, SearchFieldNames, DisplayFieldNames,
		KeyFieldName, KeyValue, SearchFieldName, SearchValue, NotifyObject,
		Tag, IsReadOnly);
}
 
function wnd_HousesGridAreaOnNotify(ScriptableService, Sender, Message, Data) {
	var SenderCode = ExtractUSICodeEx(Sender.USI);
	if ((Sender.Tag == 'SelectHouse') && (Message == MSG_OK)) {
	    var ParentItemID = Self.Attributes('ParentItemID');
	    var HouseID = Sender.Attributes('KeyValue');
		var Dataset = dlData.Dataset;
 
	    var HouseDomkomUpdateQuery = Services.GetNewItemByUSI('uq_HouseDomkom');
		HouseDomkomUpdateQuery.Parameters.ItemsByName('ID').Value = HouseID;
		HouseDomkomUpdateQuery.Parameters.ItemsByName('DomkomID').Value = ParentItemID;
	    HouseDomkomUpdateQuery.Execute()
 
	    RefreshDataset(Dataset);
		return;
	}
 
	wnd_BaseGridAreaOnNotify(ScriptableService, Sender, Message, Data);
}
 
function btnDeleteOnClick(Control) {
	var Dataset = dlData.Dataset;
	var HouseID = Dataset.Values('ID');
 
	var HouseDomkomDeleteQuery = Services.GetNewItemByUSI('uq_HouseDomkom');
	HouseDomkomDeleteQuery.Parameters.ItemsByName('ID').Value = HouseID;
	HouseDomkomDeleteQuery.Parameters.ItemsByName('DomkomID').Value = '';
	HouseDomkomDeleteQuery.Execute()
 
	RefreshDataset(Dataset);
}

И UpdateQuery в прикреплении (2 параметра, ID дома и ID домкома). При удалении DomkomID становится пустым, при изменении DomkomID берётся из wnd_SelectData.

Я правильно понял что вопрос закрыт ?

Да, закрыт.

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