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 Сейчас в теме
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 1 25.03.20 10:57 Сейчас в теме
(5)Ставьте в параметрах для открываемой формы БлокироватоОкноВладельца. Или весь интерфейс. Тогда второй раз нажать не сможете физически :)
2. squall84 25.03.20 10:05 Сейчас в теме
3. burgomister 9 25.03.20 10:07 Сейчас в теме
Сначала надо записать документ, а потом проверять открыта форма или нет.
10. YanTsys 12 25.03.20 11:39 Сейчас в теме
ФормаДМ = ДокументДМ.ПолучитьФорму("ФормаДокумента",ЭтотОбъект.ПолучитьФорму("ФормаДокумента"), "Уникальность");


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

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

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

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

Вакансии

Product Owner (Менеджер по продукту 1С)
Москва
зарплата от 100 000 руб. до 170 000 руб.
Полный день

Тим лид по разработке 1С (Team Lead 1С)
Москва
зарплата от 100 000 руб. до 200 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Новосибирск
зарплата от 30 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день