Проверить открыта форма или нет

1. squall84 25.03.20 10:00 Сейчас в теме
Нужно при проведении документа, создать другой на основании.
Пишу в обработке проведения:
Если НЕ Отказ Тогда
		Если СодержимоеДМ Тогда
			ДокументДМ=Документы.ДвижениеДрагоценныхМатериалов.СоздатьДокумент();
			ДокументДМ.ДокументОснование=ЭтотОбъект.Ссылка;
			ДокументДМ.Заполнить(ЭтотОбъект.Ссылка);
			ФормаДМ = ДокументДМ.ПолучитьФорму("ФормаДокумента",ЭтотОбъект.ПолучитьФорму("ФормаДокумента"), "Уникальность");
                          Если НЕ ФормаДМ.Открыта() Тогда 			
                          ФормаДМ.Открыть();
                          КонецЕсли;			
		КонецЕсли;
	КонецЕсли;
Показать

ФормаДМ.Открыта() - всегда ложь, независимо от того, что я устанавливаю ПолучитьФорму. Судя по отладчику, ключ уникальности записывается в форму, и владелец записывается, но получается, что всегда форма закрыта.

Пробовал в процедуре ПередОткрытие дать отказ:
Если ЭтаФорма.КлючУникальности="Уникальность" И ЭтаФорма.Открыта() Тогда
		Отказ=Истина;
	КонецЕсли;

Тоже самое. Ключ уникальности в форме есть, владелец есть. Но ЭтаФорма.Открыта() все-равно ложь.

Не пойму, что не так?
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
4. QuickMix 25.03.20 10:09 Сейчас в теме
Откуда ФормаДМ.Открыта() будет равно Истина, когда вы только получаете форму, но не открываете. После выполнения ПолучитьФорму(), она будет находиться в оперативной памяти, но открыта не будет.
5. squall84 25.03.20 10:14 Сейчас в теме
(4)
(3)В чем суть - Когда я провожу документ, открывается форма документа созданного на основании. Если я еще раз нажму проведение, то снова откроется форма документа созданного на основании. И так до бесконечности.

А мне нужно, если форма уже открыта, то новую не открывать. Получается так я не могу сделать?
6. user623969_dusa 25.03.20 10:21 Сейчас в теме
(5) это делается через ключ уникальности
https://its.1c.ru/db/metod8dev/content/2451/hdoc
7. squall84 25.03.20 10:30 Сейчас в теме
(6) В этом и проблема. Я указываю ключ уникальности:
ДокументДМ.ПолучитьФорму("ФормаДокумента",ЭтотОбъект.ПолучитьФорму("ФормаДокумента"), "Уникальность");

Но, ФормаДМ.Открыта() - ложь.
Хотя через отладчик я вижу, что ФормаДМ.КлючУникальности = "Уникальность", как я и указывал.
8. user623969_dusa 25.03.20 10:47 Сейчас в теме
(7) иди кофе попей отдохни, тебе уже говорили про ФормаДМ
ты ее получаешь но не открываешь поэтому она не открыта
ключ уникальности у нее Уникальность - потому что ты в методе получить форму указывыаешь этот ключ
11. squall84 25.03.20 12:03 Сейчас в теме
(8) Все верно. Получаю, но не открываю. После получения - открываю, с ключом уникальности.
Но при следующем проведении, все равно откроется новая форма. Хотя предыдущая форма уже открыта.

Т.е. ключ уникальности ничего не решает в этом случае. Действительно, сначала нужно записать документ, а после этого уже пользоваться ключом уникальности.
14. user623969_dusa 25.03.20 12:33 Сейчас в теме
(11) по ссылке там написано ключ уникальности можно менять
при открытии у всех форм ставить известный ключ уникальности хоть ту же "Уникальность"
теоретически теперь ты если форма открыта получишь ее
9. danjer74 3 25.03.20 10:57 Сейчас в теме
(5)Ставьте в параметрах для открываемой формы БлокироватоОкноВладельца. Или весь интерфейс. Тогда второй раз нажать не сможете физически :)
2. squall84 25.03.20 10:05 Сейчас в теме
3. burgomister 59 25.03.20 10:07 Сейчас в теме
Сначала надо записать документ, а потом проверять открыта форма или нет.
10. YanTsys 12 25.03.20 11:39 Сейчас в теме
ФормаДМ = ДокументДМ.ПолучитьФорму("ФормаДокумента",ЭтотОбъект.ПолучитьФорму("ФормаДокумента"), "Уникальность");


То есть в ДокументДМ.ПолучитьФорму в качестве владельца во втором параметре вы передаете еще не открытую форму ЭтотОбъект.ПолучитьФорму("ФормаДокумента")
Это вообще законно? :)

Кроме того проведение насколько я в курсе автоматически выполняется в транзакции, не думаю что для многопользовательской системы было бы хорошей мыслью затягивать транзакцию на время пока пользователи поработают с формами и будет собрана какая-то информация с клиентов... Поэтому 1с расположила обработку проведения в общем модуле документа, а значит выполняется она на сервере...
Пишу в обработке проведения
...ДокументДМ.ПолучитьФорму

Исходя из вышеизложенного возникает вопрос, а не троллинг ли вообще вся эта тема...
12. squall84 25.03.20 12:17 Сейчас в теме
(10) Владелец формы указан, поскольку я вообще проверял повлияет он на что-то или нет. Так я ни одного параметра не передаю.

На счет обработки проведения - согласен.
Перенес в после записи.
Но в любом случае проблемы это не решает.
13. burgomister 59 25.03.20 12:28 Сейчас в теме
Уже в двух местах написали, что надо сначала записать документ.
15. squall84 25.03.20 13:10 Сейчас в теме
(13) Это я уже понял. Видимо нужно пытаться получить открытые окна и проверять по заголовку.
Оставьте свое сообщение

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