Как задаётся атрибут детализирующего окна с перекрестной таблицей что бы при нажатие Добавить окно редактирования знало на какую запись надо ссылаться? В каждом реестре есть детализация, связанная с перекрестными таблицами. Например: инцидент и его задачи. Окно которое отображает задачи инцидента при вызове "Добавить ссылку на задачу" передает текущий id инцидента в окно выбора задачи. У меня окно детализации отображается в другом месте и при нажатие добавить->ok говорит, что поле инцидент обязательно.

Решение: заполнить ParentItemID и ParentItemFieldName у окна с перекрестной таблицей перед нажатием добавить или воспользоваться RefreshCommonDetail, если стандартный реестр.

Нравится

4 комментария

Здравствуйте, Михаил.

В странице раздела при смене выделенной записи происходит RefreshDetails и, как правило, в нем RefreshCommonDetail.
RefreshCommonDetail передает название и значение основной колонки в WindowContainer детали, в атрибуты окна реестра.
Если окно реестра детали наследовано от wnd_BaseGridArea, то при инициализации в методе ReadParentAttributes будут вычитаны название и значение выделенной в разделе записи и записаны в глобальный объект окна реестра.
В wnd_BaseGridArea при нажатии на Добавить копируются атрибуты и передаются в окно карточки.
В окне карточки при нажатии на ОК, если окно унаследовано от wnd_BaseDBEdit, будет установлено значение выделенной в разделе записи в колонку датасета по названию из атрибутов.

В общем, суть в том, что достаточно указать корректное название колонки родителя в датасете детали при использовании RefreshCommonDetail.

Здравствуйте.

"Maxim Gritsenko" написал:

В wnd_BaseGridArea при нажатии на Добавить копируются атрибуты и передаются в окно карточки.
В окне карточки при нажатии на ОК, если окно унаследовано от wnd_BaseDBEdit, будет установлено значение выделенной в разделе записи в колонку датасета по названию из атрибутов.


Вот я и хотел узнать какие атрибуты оно туда передает. Дефолтных их там 13, один из которых был ParentItemID. То что есть RefreshCommonDetail, которое знает о этих атрибутах я понимаю. Не работает у меня RefreshCommonDetail (пишет отсутствует объект):
SetDatasetAttributesForCall(Window.ComponentsByName('dlData').Dataset);
-не нашло или 'dlData'.

Передаются ParentItemID и ParentItemFieldName.

"Maxim Gritsenko" написал:

Передаются ParentItemID и ParentItemFieldName.


Огромное спасибо, то что нужно, теперь работает без костылей.

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