Детали реестра
Скрипты
Разработка

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

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

Нравится

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

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

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

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

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

Сервис HousesGridArea продублировал и изменил в нём обработчики событий:
[javascript]
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);
}

[/javascript]

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

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

Да, закрыт.

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