Уникальность управляемой формы

1. Merkalov 8 16.03.20 03:26 Сейчас в теме
Есть структура (может быть пустой) и есть независимая форма, необходимо открыть эту форму и отобразить в ней данные структуры.
Загвоздка в том, что если форма уже открыта с такой структурой, то при повторном открытии - она должна быть активирована, а не создана новая форма с такой же структурой.

Форма открывается вот так:
параметры = Новый Структура("Ключ", НекаяСтруктура);
ОткрытьФорму("РегистрСведений.НазваниеРегистра.Форма.ФормаОтчета", параметры); 	

"Ключ" - ключевой параметр формы.

Перепробовал кажется уже всё что можно, ставил ключевой параметр, выключал его, ставил "Неопределенно" в поле Владелец, ставил Ложь в поле "Уникальность", ничего не помогает, либо открывается новая форма, либо уже открытая, но со старой структурой (а передается новая структура).

У меня подозрение что ключом уникальности для формы может выступать только УникальныйИдентификатор и Ссылка, но информации об это я нигде не нашел.
По теме из базы знаний
Найденные решения
6. ImHunter 315 16.03.20 07:22 Сейчас в теме
(1) Вы ведь в качестве уникальности используете, скорее всего, разные объекты структур? Пусть и с одинаковыми значениями полей, но для формирования уникальности вы каждый раз используете Новый Структура(). Поэтому и открываются разные формы.
В вашем случае можно тогда в качестве Уникальности передавать значение ЗначениеВСтрокуВнутр(...). Но тут тоже нюансик - этот метод в тонком клиенте не работает, его заранее сформировать на сервере.
Либо можете как-то кешировать структуры уникальности.
Merkalov; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. ImHunter 315 16.03.20 07:22 Сейчас в теме
(1) Вы ведь в качестве уникальности используете, скорее всего, разные объекты структур? Пусть и с одинаковыми значениями полей, но для формирования уникальности вы каждый раз используете Новый Структура(). Поэтому и открываются разные формы.
В вашем случае можно тогда в качестве Уникальности передавать значение ЗначениеВСтрокуВнутр(...). Но тут тоже нюансик - этот метод в тонком клиенте не работает, его заранее сформировать на сервере.
Либо можете как-то кешировать структуры уникальности.
Merkalov; +1 Ответить
7. Merkalov 8 16.03.20 07:24 Сейчас в теме
(6) Больше спасибо, теперь всё встало на свои места, код выполняется на сервере, так что думаю что "ЗначениеВСтрокуВнутр()" подойдет.
9. -AI- 16.03.20 08:21 Сейчас в теме
(7) У структуры параметры не упорядочены, как результат, одинаковая структура по логике может формировать разные строки.

можно сделать так:
в модулеПовтИсп формировать Фиксированную Структуру, параметров простых типов: Неопределено, Null, Булево, Дата, Строка, Число, Ссылка.
(модуль должен вызываться из клиента, что бы работало то что написано далее)

если эту процедуру вызывать из модуля клиента, то в течении 20 минут будет возвращаться одна и таже структура.
(при условии, что хватает памяти на кеш этой структуры)

PS я один раз сделал именно так, т.е. логика 100% рабочая.

но я расширил эту логику - открытая форма сама, с какой-то периодичностью вызывала эту процедуру, и сравнивала полученную Фиксированную структуру с той что у неё есть, и если она разная, то самозакрывалась...
10. Merkalov 8 16.03.20 08:33 Сейчас в теме
(9) Конфа не типовая. Воспользуюсь СпискомЗначений вместо структуры, там проблемы с упорядочиванием быть не должно.
11. -AI- 16.03.20 08:42 Сейчас в теме
(10) ИМХО Тогда уж лучше генерить строку самому, складывая в неё идентификаторы объектов в определённой последовательности
12. dhurricane 16.03.20 08:47 Сейчас в теме
(10) А на сколько много полей в передаваемой структуре? Я быть может предложу банальную вещь, но почему бы не сделать вместо одной структуры несколько ключевых полей для каждого из поля структуры?
13. Merkalov 8 16.03.20 08:50 Сейчас в теме
(12)
туры несколько ключевых полей для каждого из поля структу

В структуре от 0 до 50 ключей :)
14. dhurricane 16.03.20 09:00 Сейчас в теме
(13) Если Вас не затруднит, не могли бы Вы описать задачу, которую решаете, контролируя уникальность открытой формы по 50-ти ключам?
15. Merkalov 8 16.03.20 10:14 Сейчас в теме
(14) Спасибо, но проблема себя исчерпала :)
16. user712426 01.11.21 11:22 Сейчас в теме
(6)только в этом случае не будет работать процедура ПриОткрытии у той формы, что вызывается
2. -AI- 16.03.20 06:45 Сейчас в теме
<Уникальность> (необязательный)
Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма.
Ложь - искать форму с ключом уникальности по умолчанию, Истина - не искать форму вообще, любое другое значение устанавливает ключ уникальности, по которому будет произведен поиск.
Значение по умолчанию: Ложь.
А если просто установить в Истина? если, конечно, окно каждый раз новое..

PS а "НекаяСтруктура" точно каждый раз новая? может просто старая редактируется? ведь проверка идёт не по содержимому этой структуры....
user712426; +1 Ответить
3. Merkalov 8 16.03.20 06:56 Сейчас в теме
(2) Если поставить "Истина" - это просто отключит поиск открытой формы и при любом раскладе будет открываться новая, а необходимо чтобы открывалась новая только в случае если сейчас не открыта форма с такой же структурой.
4. -AI- 16.03.20 07:13 Сейчас в теме
(3)
не открыта форма с такой же структурой.

эта формулировка ОЧЕНЬ смущает...

что вы понимаете под ТАКОЙ же структурой?
Merkalov; +1 Ответить
5. Merkalov 8 16.03.20 07:21 Сейчас в теме
(4)
понимаете под ТА

Я имею ввиду что я по нажатию на кнопку создаю структуру:
НекаяСтруктура = Новый Структура("Свойство1, Свойство2", Значение1, Значение2 );

Затем открывается форма:
параметры = Новый Структура("Ключ", НекаяСтруктура);
ОткрытьФорму("РегистрСведений.НазваниеРегистра.Форма.ФормаОтчета", параметры);

Т.е структура инициализируется по нажатию на кнопку и кажется я стал понимать...в качестве ключа уникальности для формы будет выступать ссылка на структуру..? А структура всегда новая, хоть и с такими же свойствами...
8. -AI- 16.03.20 07:46 Сейчас в теме
(5)
ПерваяСтруктура = Новый Структура("Свойство1, Свойство2", Значение1, Значение2 );
ВтораяСтруктура = Новый Структура("Свойство1, Свойство2", Значение1, Значение2 );

эти структуры уникальны, т.е. НЕ РАВНЫ! (т.к. сравнивается не содержимое, а ссылка на кусок памяти)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот