программное закрытие окон
Terrasoft 2.8

Программное закрытие окон

Доброго времени суток.
Стоит такая задача. На определенном этапе бизнес-процесса открывается 2 окна (карточки редактирования): счет и задача "Подтвердить счет". У пользователя два варианта: либо изменить дату начала/завершения задачи и сохранить задачу, либо подтвердить счет, при этом задача "Подтвердить счет" становится выполненной.
Вопрос такой. У задачи статус "Выполнена", но при этом остается висеть окно задачи с неактуальными данными. Хочу его автоматически закрывать. Возможно ли это?

Нравится

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

Добрый день, Петр.
Метод, закрывающий окно: Close()
Если нужно обратиться в объекту окна, и вызвать его метод Close(), сделайте так:
[code]
Window.Close();
[/code]

"Фильковский Павел" написал:

Добрый день, Петр.

Метод, закрывающий окно: Close()

Если нужно обратиться в объекту окна, и вызвать его метод Close(), сделайте так:

  Window.Close();

Спасибо за ответ, Павел. Но в том то и проблема, что ссылки на объект окна у меня нет. Существует ли какая-нибудь возможность, например получить форму редактирования задачи зная ID задачи (если есть открытая форма, то получить ее) или список всех открытых окон экземпляра Террасофт Клиент (я бы их перебрал и по содержимому Attributes нужное окно нашел)?
Или все-таки придется городить огород с сохранением ссылок на все окна в какой-то коллекции?

Может проще не выводить два окна редактирования? а обойтись диалоговым окном с возможностью либо выбрать что делать дальше (задача или счет). Либо собственное окно с возможностью закрыть задачу либо подтвердить счет, пользователю же необязательно видеть всю карточку и счета, и задачи?

Добрый день, коллеги!

Но если же Вы все-таки желаете использовать связь между одельными окнами, посмотрите примеры использования:

[code]
NotifyObject.Notify(Window, MSG_OK, null);
[/code]

и

[code]
FindEditWindow(USI, SearchFieldName, SearchValue);
FindWindow(USI, RecordID);
[/code]

"Александр Кудряшов" написал:Может проще не выводить два окна редактирования? а обойтись диалоговым окном с возможностью либо выбрать что делать дальше (задача или счет).

Сейчас уже не проще. Бизнес-процесс спроектирован так, что каждый его этап сопровождается выводом формы редактирования задачи, связанной с этим этапом (это фундаментальное требование). Плюс, для этапов, связанных с оформлением доментов, еще выводится форма редактирования этого документа. Ваше предложение предполагает переделывание кучи БП, а в данном случае я хотел обойтись малой кровью.

"Фильковский Павел" написал: NotifyObject.Notify(Window, MSG_OK, null);

Этот вариант не подойдет, поскольку ссылки на Window у меня нет, я не знаю как мне получить нужное окно.
"Фильковский Павел" написал: FindEditWindow(USI, SearchFieldName, SearchValue);
FindWindow(USI, RecordID);

А вот за это спасибо. У меня была мысль руками в

WinCache_Windows

поковыряться. Не подскажете, можно ли об этом механизме почитать поподробнее?
Ну и судя по этому куску кода из функции ShowEditWindowEx сервиса scr_WindowUtils[javascript]
if ((!Services.AlwaysGetLastItemVersion) &&
(IsUndefined(UseCache) || UseCache)) {
// здесь пропущены проверки
var EditWindow = WinCache_Get(EditWindowUSI, RecordID);
if (!Assigned(EditWindow)) {
return;
}
} else {
var EditWindow = Services.GetNewItemByUSI(EditWindowUSI);
}
[/javascript] с выключенным кэшированием сервисов я таким образом окна получать не смогу?

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

С выключенным кэшированием можно будет обращаться к открытым окнам, пока они в ОЗУ.
После закрытия - уже нет.

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