Технические вопросы
Разработка

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

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

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

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

Нравится

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

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

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

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

Что, то я гдето всеравно упускаю
[javascript]
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);
}
[/javascript]

Вот с самим обработчиком совсем запутался, не могу разобраться с OnNotify и NotifyObject
[javascript]
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();
}
}
[/javascript]

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

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