Грид в карточке конфигурационной единицы

Добрый день,
Есть необходимость привязать к конфигурационной единице не одного пользователя, а нескольких.
Для этого было создано:

  1. Грид с двумя колонками (Контакт, Контрагент контакта)
  2. Две кнопки для добавления и удаления пользователей
  3. Таблица с полями ID-конфигурационной единицы, ID пользователя

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

Нравится

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

Вам нужно использовать вызов ShowEditWindowEx или ShowSelectData, а затем получать выбранные значения. Посмотрите глобальным поиском по конфигурации (Alt-Shift-S) по названию функций, в конфигурации множество примеров.

Для вызова окна с контактами добавил функцию AddData, окно теперь появляется, осталось только разобраться как добавить выбранные контакты в таблицу и отобразить их в гриде

После нажатия на OK в окне выбора Вы попадаете в функцию OnNotify того объекта, который был передан в атрибуте 'NotifyObject'. Там Вы должны считать значения атрибута 'KeyValues'. Это и будет(ут) выбранное(ые) значение(я).

Что, то я гдето всеравно упускаю

function btnActionAddOnClick(Control) {
	AddItemUsers();
}
 
function AddItemUsers() {
 var Dataset = GetSingleItemByCode('ds_Contact', 'AddUsersForItem');
 var SearchFieldNames = 'Name';
 var DisplayFieldNames = 'Name';
 var KeyFieldName = 'ID';
 var KeyValue = '';
 var SearchFieldName = 'Name';
 var SearchValue = '';
 var NotifyObject = Self;
 var Tag = 'SelectUsersItemWindow';
 var IsReadOnly = true;
 ShowSelectDataWindow(Dataset, SearchFieldNames, DisplayFieldNames,
 KeyFieldName, KeyValue, SearchFieldName, SearchValue, NotifyObject, 
Tag, IsReadOnly);
 }

Вот с самим обработчиком совсем запутался, не могу разобраться с OnNotify и NotifyObject

function wnd_ConfigurationItemUsersOnNotify(ScriptableService, Sender, Message, Data) {
var SenderDataset = Sender.Attributes('Dataset');
 var SenderDatasetUSI = ExtractUSICodeEx(SenderDataset.USI);
 if (Message == MSG_OK && SenderDatasetUSI == 'ds_Contact') {
 		var ContactID = SenderDataset('ID');
 var GridWindow = wnd_ConfigurationItemUsers.Window;
 var ChildDatalink =GridWindow.ComponentsByName('dlConfigUsers');
 var ChildDataset = ChildDatalink.Dataset;
 ChildDataset.Append();
 ChildDataset.Values('ID') = Connector.GenGUID();
 ChildDataset.Values('ItemID') = ItemID;
 ChildDataset.Values('UserID') = UserID;
 ChildDataset.Post();
 }
}

NotifyObject - это объект, который Вы передаете в функцию ShowSelectDataWindow, которая отображает окно выбора контакта. Ему придет сообщение после нажатия на ОК в окне выбора контакта. Так как Вы передаете Self, то сообщение придет текущему окну. Это сообщение обрабатывается в обработчике OnNotify. Обработчик OnNotify текущего окна - это у Вас скорее всего wnd_ConfigurationItemUsersOnNotify. В этом обработчике Вы и должны обрабатывать тот контакт, которого выбрали в окне перед этим. ID этого контакта можно получить, обратившись к атрибуту KeyValue вот таким образом: Sender.Attributes('KeyValue').

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