Скрипты
Разработка

Передача сообщения окну

Подскажите, пожалуйста, как можно отправить сообщение открытому окну? Я из карточки контрагента добавляю новый адрес. И при сохранении адреса мне нужно заполнить поле адрес в уже открытом окне.

Нравится

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

[javascript]
function SendNotify(Window, NotifyMessage, NotifyData)
[/javascript]
где
Window - объект окна-получателя
NotifyMessage - код сообщения (см. раздел // Notify Message consts скрипта scr_Consts)
NotifyData - произвольное что-то (обычно строка(т.е. значение), не знаю можно ли объекты и переменные передавать)

Что-то типа того:

Вам нужно передать в аттрибутах окна редактирования адреса (мб сначала в грид, а потом в карточку) ссылку на окно-получатель:
[javascript]
function edtTerritoryOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
SetAttribute(SelectWindow, 'AccountEditWindow', Self)
}
[/javascript]

Потом добавить в карточке редактирования, где Вы меняете нужное вам значение, на btnOkOnClick добавить
[javascript]
var AccountEditWindow = GetAttribute(Self, 'AccountEditWindow');
if (Assigned(AccountEditWindow )) {
SendNotify(AccountEditWindow, MSG_OK, dlData.Dataset(Интересующее_Вас_поле))
}
[/javascript]

И наконец, в wnd_AccountEdit на событие wnd_AccountEditOnNotify добавить:
[javascript]
if ((Message == MSG_OK) && !IsEmptyGUID(Data) &&
(ExtractUSICodeEx(Sender.USI) == 'USI_вашего_окна')) {
dlData.Dataset('Address') = Data;
}
[/javascript]

Дмитрий, большое спасибо. Буду пробовать.

Попробовал использовать данный метод, на строке[javascript]
SendNotify(AccountEditWindow, MSG_OK, dlData.Dataset('ID'))
[/javascript] вылезает ошибка:
Объект не поддерживает это свойство или метод.
В функцию SendNotify даже не заходит. Подскажите, в чем может быть причина?

А скрипт scr_WindowUtils подключен из того скрипта, в котором ошибка?

подключите scr_WindowUtils :lol:

Скрипт подключен, проверил первый делом.

dlData.Dataset.Values('ID')
dlData.Dataset.ValAsGUID('ID')

Спасибо, теперь отрабатывает, но в окно контрагента (AccountEditWindow) сообщение не приходит, поставил там debugger, и ничего не наблюдается. Куда можно посмотреть?

после
[javascript]
var AccountEditWindow = GetAttribute(Self, 'AccountEditWindow');
[/javascript]

и проверьте что там действительно нужное Вам окно. (оно же у Вас при этом открыто?)

также проверьте код в wnd_AccountEditOnNotify

В AccountEditWindow хранится окно "Accounts\General\Main Grid\wnd_AccountEdit".
Код на OnNotify
[javascript]
function wnd_AccountEditOnNotify(ScriptableService, Sender, Message, Data) {
debugger;
if ((Message == MSG_OK) && !IsEmptyGUID(Data) &&
(ExtractUSICodeEx(Sender.USI) == 'wnd_ContactEdit')) {
//dlData.Dataset('Address') = Data;
}
}
[/javascript]
Код на btnOnClick
[javascript]
var AccountEditWindow = GetAttribute(Self, 'AccountEditWindow');
if (Assigned(AccountEditWindow )) {
SendNotify(AccountEditWindow, MSG_OK, ContactEdit.OldAccountID);
}
[/javascript]

а само событие для окна определили? (в сервисе окна, в свойствах корневого объекта)
если да пришлите лучше сервисы - быстрее будет

services.zip
Сервисы прикрепил

я Вас изначально дезинформировал относительно функции SendNotify :confused:
[javascript]
if (Assigned(AccountEditWindow )) {
AccountEditWindow.Notify(Self, MSG_OK, ContactEdit.OldAccountID);
}
[/javascript]

Дмитрий, спасибо большое. Получилось.

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