Есть структура (может быть пустой) и есть независимая форма, необходимо открыть эту форму и отобразить в ней данные структуры.
Загвоздка в том, что если форма уже открыта с такой структурой, то при повторном открытии - она должна быть активирована, а не создана новая форма с такой же структурой.
Форма открывается вот так:
"Ключ" - ключевой параметр формы.
Перепробовал кажется уже всё что можно, ставил ключевой параметр, выключал его, ставил "Неопределенно" в поле Владелец, ставил Ложь в поле "Уникальность", ничего не помогает, либо открывается новая форма, либо уже открытая, но со старой структурой (а передается новая структура).
У меня подозрение что ключом уникальности для формы может выступать только УникальныйИдентификатор и Ссылка, но информации об это я нигде не нашел.
Загвоздка в том, что если форма уже открыта с такой структурой, то при повторном открытии - она должна быть активирована, а не создана новая форма с такой же структурой.
Форма открывается вот так:
параметры = Новый Структура("Ключ", НекаяСтруктура);
ОткрытьФорму("РегистрСведений.НазваниеРегистра.Форма.ФормаОтчета", параметры);
"Ключ" - ключевой параметр формы.
Перепробовал кажется уже всё что можно, ставил ключевой параметр, выключал его, ставил "Неопределенно" в поле Владелец, ставил Ложь в поле "Уникальность", ничего не помогает, либо открывается новая форма, либо уже открытая, но со старой структурой (а передается новая структура).
У меня подозрение что ключом уникальности для формы может выступать только УникальныйИдентификатор и Ссылка, но информации об это я нигде не нашел.
По теме из базы знаний
- Перенумерация документов и справочников с учетом префиксов (учет уникальности кодов) для обычных и управляемых форм
- Под капотом управляемых форм
- Поиск и восстановление битых ссылок (обычная и управляемая форма) 8.2-8.3
- Консоль запросов для управляемых форм 8.3
- Infostart Toolkit — Инструменты разработчика 1С 8.3 для управляемых форм
Найденные решения
(1) Вы ведь в качестве уникальности используете, скорее всего, разные объекты структур? Пусть и с одинаковыми значениями полей, но для формирования уникальности вы каждый раз используете Новый Структура(). Поэтому и открываются разные формы.
В вашем случае можно тогда в качестве Уникальности передавать значение ЗначениеВСтрокуВнутр(...). Но тут тоже нюансик - этот метод в тонком клиенте не работает, его заранее сформировать на сервере.
Либо можете как-то кешировать структуры уникальности.
В вашем случае можно тогда в качестве Уникальности передавать значение ЗначениеВСтрокуВнутр(...). Но тут тоже нюансик - этот метод в тонком клиенте не работает, его заранее сформировать на сервере.
Либо можете как-то кешировать структуры уникальности.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Вы ведь в качестве уникальности используете, скорее всего, разные объекты структур? Пусть и с одинаковыми значениями полей, но для формирования уникальности вы каждый раз используете Новый Структура(). Поэтому и открываются разные формы.
В вашем случае можно тогда в качестве Уникальности передавать значение ЗначениеВСтрокуВнутр(...). Но тут тоже нюансик - этот метод в тонком клиенте не работает, его заранее сформировать на сервере.
Либо можете как-то кешировать структуры уникальности.
В вашем случае можно тогда в качестве Уникальности передавать значение ЗначениеВСтрокуВнутр(...). Но тут тоже нюансик - этот метод в тонком клиенте не работает, его заранее сформировать на сервере.
Либо можете как-то кешировать структуры уникальности.
(7) У структуры параметры не упорядочены, как результат, одинаковая структура по логике может формировать разные строки.
можно сделать так:
в модулеПовтИсп формировать Фиксированную Структуру, параметров простых типов: Неопределено, Null, Булево, Дата, Строка, Число, Ссылка.
(модуль должен вызываться из клиента, что бы работало то что написано далее)
если эту процедуру вызывать из модуля клиента, то в течении 20 минут будет возвращаться одна и таже структура.
(при условии, что хватает памяти на кеш этой структуры)
PS я один раз сделал именно так, т.е. логика 100% рабочая.
но я расширил эту логику - открытая форма сама, с какой-то периодичностью вызывала эту процедуру, и сравнивала полученную Фиксированную структуру с той что у неё есть, и если она разная, то самозакрывалась...
можно сделать так:
в модулеПовтИсп формировать Фиксированную Структуру, параметров простых типов: Неопределено, Null, Булево, Дата, Строка, Число, Ссылка.
(модуль должен вызываться из клиента, что бы работало то что написано далее)
если эту процедуру вызывать из модуля клиента, то в течении 20 минут будет возвращаться одна и таже структура.
(при условии, что хватает памяти на кеш этой структуры)
PS я один раз сделал именно так, т.е. логика 100% рабочая.
но я расширил эту логику - открытая форма сама, с какой-то периодичностью вызывала эту процедуру, и сравнивала полученную Фиксированную структуру с той что у неё есть, и если она разная, то самозакрывалась...
<Уникальность> (необязательный)
Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма.
Ложь - искать форму с ключом уникальности по умолчанию, Истина - не искать форму вообще, любое другое значение устанавливает ключ уникальности, по которому будет произведен поиск.
Значение по умолчанию: Ложь.
А если просто установить в Истина? если, конечно, окно каждый раз новое..
Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма.
Ложь - искать форму с ключом уникальности по умолчанию, Истина - не искать форму вообще, любое другое значение устанавливает ключ уникальности, по которому будет произведен поиск.
Значение по умолчанию: Ложь.
PS а "НекаяСтруктура" точно каждый раз новая? может просто старая редактируется? ведь проверка идёт не по содержимому этой структуры....
(4)
Я имею ввиду что я по нажатию на кнопку создаю структуру:
НекаяСтруктура = Новый Структура("Свойство1, Свойство2", Значение1, Значение2 );
Затем открывается форма:
параметры = Новый Структура("Ключ", НекаяСтруктура);
ОткрытьФорму("РегистрСведений.НазваниеРегистра.Форма.ФормаОтчета", параметры);
Т.е структура инициализируется по нажатию на кнопку и кажется я стал понимать...в качестве ключа уникальности для формы будет выступать ссылка на структуру..? А структура всегда новая, хоть и с такими же свойствами...
понимаете под ТА
Я имею ввиду что я по нажатию на кнопку создаю структуру:
НекаяСтруктура = Новый Структура("Свойство1, Свойство2", Значение1, Значение2 );
Затем открывается форма:
параметры = Новый Структура("Ключ", НекаяСтруктура);
ОткрытьФорму("РегистрСведений.НазваниеРегистра.Форма.ФормаОтчета", параметры);
Т.е структура инициализируется по нажатию на кнопку и кажется я стал понимать...в качестве ключа уникальности для формы будет выступать ссылка на структуру..? А структура всегда новая, хоть и с такими же свойствами...
(5)
ПерваяСтруктура = Новый Структура("Свойство1, Свойство2", Значение1, Значение2 );
ВтораяСтруктура = Новый Структура("Свойство1, Свойство2", Значение1, Значение2 );
эти структуры уникальны, т.е. НЕ РАВНЫ! (т.к. сравнивается не содержимое, а ссылка на кусок памяти)
ПерваяСтруктура = Новый Структура("Свойство1, Свойство2", Значение1, Значение2 );
ВтораяСтруктура = Новый Структура("Свойство1, Свойство2", Значение1, Значение2 );
эти структуры уникальны, т.е. НЕ РАВНЫ! (т.к. сравнивается не содержимое, а ссылка на кусок памяти)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот