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