Есть несколько окон звонка. И есть несколько окон заказа, открытых из разных окон звонка. Как можно програмно найти окно заказа относящееся к текущему окну звонка. Или количество окон заказа, открытых из данного окна звонка. Или, если нельзя, узнать хотя бы, есть ли у данного окна звонка какие-то дочерние окна?
Нравится
Здравствуйте.
Из "дочернего" окна можно узнать, есть ли у него родительское:
Self.Attributes('NotifyObject')
Из "родительского" посчитать кол-во "дочерних" окон в коробке нельзя.
Но ничто Вам не мешает при нажатию на кнопку создания нового заказа записывать в атрибут окна "Звонок" окно "Заказа":
ZakazWindow.Prepare(); ZakazWindow.Show(); Self.Attributes('ChildForms').push(ZakazWindow);
где
Self.Attributes('ChildForms') = [];
Вроде бы получилось.
Используется аттрибут окна заказа PerformedForms
При открытии окна заказа
wndSandBurn = ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues);
присваивается +
wndSandBurn.Attributes('PerformedForms') ='+';
При закрытии окна заказа присваивается -
Self.Attributes('PerformedForms') = '-';
...
wnd_BaseDBEditOnCloseQuery(Window, CanClose);
В окне звонка со своими дочерними окнами можно связаться:
в wnd_CallEditScript
var Skolko = getPermission('wnd_OpportunityOrderEdit','wnd_CallEdit',Self.InstanceID);
if(Skolko > 0)
......
function getPermission(USI, USI2, RecordID) {
var Item;
for (var i = 0; i < WinCache_Windows.length; i++) {
Item = WinCache_Windows[i];
if (Item.USI == USI && Item.Instance.Attributes('NotifyObject').InstanceID == RecordID && Item.Instance.Attributes('PerformedForms') == '+')
return 1;
}
return 0;
}
Несколько модифицировав функцию, можно получать количество дочерних окон или конкретные данные из объекта.
Вопрос в чем: нет ли в таком подходе каких-то "подводных камней". При тестировании все нормально - окно видит свои дочерние окна и правильно реагирует, но мало ли...
Добрый день.
Сложно сказать. Такого функционала как сделали Вы в "коробке" нет, а значит он не тестировался.
Чисто визуально - вроде бы всё ок, проблем быть не должно.