Уничтожить окно.

Как при закрытии прибить окно? Или как сбросить фильтр, который был установлен в гриде, и который не нужен при открытии другой записи реестра?

Нравится

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

первый скриншот - нормальная фильтрация...
второй - значение фильтра сохранилось при повторном открытии окна, но грид на него не реагирует...

Как Вы вызываете окно? Все указывает на то, что окно кешируется и вновь отображает значение фильтра, хоть и не применяет его. Если через GetSingleItemByCode, то замените получение окна на System.GetNewItemByUSI('wnd_*') - так оно будет заново создаваться, а не получаться из кеша.

Окно создается по нажатию на кнопки Добавить/Изменить окна-потомка wnd_BaseGridArea. Т.е. получается, что в конце концов вызывается именно GetNewItemByUSI из scr_WindowUtils.

а функция WinCache_Get из скрипта scr_WindowUtils - это не она ли кэширует окно? и кэширует она получается по-умолчанию, ибо ShowEditWindowEx принимает параметр UseCache, который из scr_BaseGridAreaUtilsне передается и в этом случае окно кэшируется. Как передать этот параметр? Или только редактировать scr_BaseGridAreaUtils?

Именно об этом я и говорил. По умолчанию окна кешируются. Вы правильно нашли, где именно они берутся из кеша.
Обходной вариант - создать собственное окно выбора, унаследованное от wnd_SelectData и при его создании использовать Services.GetNewItemByUSI.
Данный подход реализован, в частности, и в базовом функционале. Например, раздел [Запросы] вызывает собственное окно выбора wnd_SelectReportTable, это происходит по нажатию на кнопку "Добавить", а точнее - в функции scr_QueryUtils.ShowTableSelectWindow()

неееет, только не это, создавать по-новой уже работающие окна желания совсем нет...

В таком случае нужно аккуратно изменить базовый вызов. Например, так:
В функцию ShowEditWindowEx передавать еще один параметр, в котором будет false. Но передавать придется из scr_BaseGridAreaUtils.AddGridAreaData(), поэтому напрямую писать false не стоит. Предлагаю передавать в качестве еще одного параметра значение BaseGridArea.WindowUseCache, которое на данный момент не определено. Заполнять же его из своего скрипта на обработчике кнопки "Добавить" BaseGridArea.WindowUseCache = false (доступ к BaseGridArea будет, так как Ваше окно унаследовано). Таким образом с одной кнопки "Добавить" вызов в результате произойдет без использования кеша, а в остальных случаях будет использовано неопределенное значение, которое и так имеет параметр UseCache в функции ShowEditWindowEx.

спасибо, Виталий, что-то подобное я уже сделал...

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