Подскажите, пожалуйста, как можно отправить сообщение открытому окну? Я из карточки контрагента добавляю новый адрес. И при сохранении адреса мне нужно заполнить поле адрес в уже открытом окне.
Нравится
function SendNotify(Window, NotifyMessage, NotifyData)
где
Window - объект окна-получателя
NotifyMessage - код сообщения (см. раздел // Notify Message consts скрипта scr_Consts)
NotifyData - произвольное что-то (обычно строка(т.е. значение), не знаю можно ли объекты и переменные передавать)
Что-то типа того:
Вам нужно передать в аттрибутах окна редактирования адреса (мб сначала в грид, а потом в карточку) ссылку на окно-получатель:
function edtTerritoryOnPrepareSelectWindow(LookupDataControl, SelectWindow) { SetAttribute(SelectWindow, 'AccountEditWindow', Self) }
Потом добавить в карточке редактирования, где Вы меняете нужное вам значение, на btnOkOnClick добавить
var AccountEditWindow = GetAttribute(Self, 'AccountEditWindow'); if (Assigned(AccountEditWindow )) { SendNotify(AccountEditWindow, MSG_OK, dlData.Dataset(Интересующее_Вас_поле)) }
И наконец, в wnd_AccountEdit на событие wnd_AccountEditOnNotify добавить:
if ((Message == MSG_OK) && !IsEmptyGUID(Data) && (ExtractUSICodeEx(Sender.USI) == 'USI_вашего_окна')) { dlData.Dataset('Address') = Data; }
Попробовал использовать данный метод, на строке
SendNotify(AccountEditWindow, MSG_OK, dlData.Dataset('ID'))
вылезает ошибка:
Объект не поддерживает это свойство или метод.
В функцию SendNotify даже не заходит. Подскажите, в чем может быть причина?
А скрипт scr_WindowUtils подключен из того скрипта, в котором ошибка?
dlData.Dataset.Values('ID')
dlData.Dataset.ValAsGUID('ID')
Спасибо, теперь отрабатывает, но в окно контрагента (AccountEditWindow) сообщение не приходит, поставил там debugger, и ничего не наблюдается. Куда можно посмотреть?
после
var AccountEditWindow = GetAttribute(Self, 'AccountEditWindow');
и проверьте что там действительно нужное Вам окно. (оно же у Вас при этом открыто?)
также проверьте код в wnd_AccountEditOnNotify
В AccountEditWindow хранится окно "Accounts\General\Main Grid\wnd_AccountEdit".
Код на OnNotify
function wnd_AccountEditOnNotify(ScriptableService, Sender, Message, Data) { debugger; if ((Message == MSG_OK) && !IsEmptyGUID(Data) && (ExtractUSICodeEx(Sender.USI) == 'wnd_ContactEdit')) { //dlData.Dataset('Address') = Data; } }
Код на btnOnClick
var AccountEditWindow = GetAttribute(Self, 'AccountEditWindow'); if (Assigned(AccountEditWindow )) { SendNotify(AccountEditWindow, MSG_OK, ContactEdit.OldAccountID); }
а само событие для окна определили? (в сервисе окна, в свойствах корневого объекта)
если да пришлите лучше сервисы - быстрее будет
я Вас изначально дезинформировал относительно функции SendNotify :confused:
if (Assigned(AccountEditWindow )) { AccountEditWindow.Notify(Self, MSG_OK, ContactEdit.OldAccountID); }