Как указать/обратиться к прародительскому (или по шагам наследования) Dataset
var WorkspaceDataset=Self.ParentWindow.ComponentsByName('dlData').Dataset;
var DatasetUSI = GetAttribute(Self, 'DatasetUSI');
//узнали родительский - как узнать прародительский или по уровню вложенности?
//что-то типа такого
var WorkspaceDataset1=Self.ParentWindow.ComponentsByName(DatasetUSI).Dataset;
Нравится
Здравствуйте!
То, как обращаться к датасету родительского окна, зависит от того, как расположены элементы на форме. Например, если у нас есть карточка, а в ней WindowContainer, метод обращения будет один, а если мы с детали открываем окно редактирвоания - другой.
В данном случае оптимальный вопрос - посмотреть отладчиком.
Пример обращения к датасету реестра из окна редактирования карточкаи к датасету детали:
Self.Attributes('NotifyObject').ParentWindow.Attributes('NotifyObject').ParentContainer.ParentWindow.ComponentsByName('wndProductCategoryInOpp').Window.ComponentsByName('dlData').Dataset
Обратите внимание, вариант не оптимален, в данном случае оптимально передавать в атрибуты NotifyObject тот датасет, к которому нужно будет потом обращаться.
В этом случае оптимально обращаться посредством NotifyObject:
Self.Attributes('NotifyObject').ParentContainer.ParentWindow.ComponentsByName('dlData').Dataset
в данном случае Self - окно карточки редактирования детали.
Здравствуйте!
В Вашем случае NotifyObject - это окно, из которого было открыто данное. Например, если Вами открывается окно редактирования детали, то NotifyObject для него будет окно детали.
Если открывается окно выбора из справочника в окне редактирования, то NotifyObject для него будет окно редактирования.
При выполнении этого выражения и террасофт и дебагер кричат, что им объект требуется. Вешал на события btnOKOnClick, btnOKOnExit. На последнем событии и дебагер повешался.
На вский случай проверил на событии dlDataOnDatasetDataChange(DataField) - тоже объект требует.
Правильно написал?
var WorkspaceDataset1=Self.Attributes('NotifyObject').ParentContainer.ParentWindow.ComponentsByName('dlData').Dataset; if (Assigned(WorkspaceDataset1)) { ShowInformationDialog("Родительский датасет "); return null; }
NotifyObject - это какая-то макроподстановочная переменная? Где про неё можно подробней прочесть?
Здравствуйте,
NotifyObject - это объект, которому мы передаем сообщения, как правило, мы обращаемся к нему через функцию SendNotify с scr_WindowUtils, и передаем сообщение, например: Окно выбора совершило все свои действия и окно которое вызвало окно выбора, должно что то пересчитать, для реализации логики реакции на сообщения сделано событие окна OnNotify (пример вы можете посмотреть в scr_AccountsWorkspace событие wnd_AccountsWorkspaceOnNotify) котрое обрабатывает сообщения.
В Вашем случае, если вы напишете Self в обработчике клика на кнопку, то объект Self будет кнопка, попробуйте использовать Control.ParentWindow для доступа к окну в котором находится кнопка (пример http://www.community.terrasoft.ru/forum/topic/1220)