Добрый день,
Есть необходимость привязать к конфигурационной единице не одного пользователя, а нескольких.
Для этого было создано:
- Грид с двумя колонками (Контакт, Контрагент контакта)
- Две кнопки для добавления и удаления пользователей
- Таблица с полями ID-конфигурационной единицы, ID пользователя
А вот с дальнейшими действиями возник полный ступор, пробывал читать подобные темы по гридам и кнопкам, но больше запутался.
Подскажите как по кнопке добавить вызвать справочник контактов для добавления.
Нравится
Вам нужно использовать вызов 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').