Проверка закрытия формы

1. German_Tagil 43 12.09.17 15:00 Сейчас в теме
Обычные формы

Если Док.Товары.Количество() > 0 Тогда
	ФормаДок = Док.ПолучитьФорму("ФормаДокумента");
		ФормаДок.Открытьмодально();
	//	ФормаДок.Открыть();
		сообщить("ДОК.Ссылка.Пустая() " + ДОК.Ссылка.Пустая() + док.ЭтоНовый()) ;	
	Иначе
		Предупреждение("Нет позиций для заполнения документа ""Заказ поставщику""");
	КонецЕсли;


проверяю записан или нет документ - если ФормаДок.Открытьмодально(); то все замечательно
а вот если ФормаДок.Открыть(); то проскакивает.
Каким образом можно реализовать проверку без модальности?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
23. spacecraft 14.09.17 14:25 Сейчас в теме +0.4 $m
(22)
Перем ФормаДок;

Процедура ОткрытиеФормыДокумента()
	ФормаДок = Док.ПолучитьФорму("ФормаДокумента", ЭтаФорма);
	ФормаДок.Открыть();
	ПодключитьОбработчикОжидания("ПроверитьЗакрытиеФормы", 5);
КонецПроцедуры

Процедура ПроверитьЗакрытиеФормы() Экспорт
	Если ФормаДок = Неопределено Тогда
		ОтключитьОбработчикОжидания("ПроверитьЗакрытиеФормы");
		Возврат;
	КонецЕсли;
	Если Не ФормаДок.Открыта() Тогда
		Сообщить("Форма: "+ФормаДок.Заголовок+" закрыта");
		ФормаДок = Неопределено;
		ОтключитьОбработчикОжидания("ПроверитьЗакрытиеФормы");
	КонецЕсли;
КонецПроцедуры
Показать
olo_lo4; GeterX; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 12.09.17 15:25 Сейчас в теме
(1)
ФормаДок.ДокументОбъект.ЭтоНовый();
ФормаДок.ДокументОбъект.Ссылка.Пустая();
5. herfis 499 12.09.17 17:41 Сейчас в теме
(1) В ОткрытьФорму() одним из параметров можно указать обработчик оповещения о закрытии (с какого-то там релиза добавили такую возможность).
ЗЫ. А не, так не получится.
3. maks_20 164 12.09.17 16:03 Сейчас в теме
Не совсем понятно, зачем обращаться к форме при проверке документа? можно же проверить сам объект, обратившись к переменной Док.
Mnemonik; sssss_aaaaa_2011; user633533_encantado; +3 Ответить
4. SergeyCV76 12 12.09.17 17:32 Сейчас в теме
Правильно, к форме обращаться не зачем.
Достаточно обратиться к объекту

Не совсем понятно откуда Вы запускаете этот код...
Если из обработки создаете и заполняете документ Док то достаточно
проверить Док.ЭтоНовый()=Истина

Если у Док проверить УникальныйИдентификатор
у не записаного объекта он будет равен
Док.Ссылка.УникальныйИдентификатор() = "00000000-0000-0000-0000-000000000000"


Если из модуля объект Док то тогда

Если ЭтотОбъект.ЭтоНовый() = Истина Тогда
Сообщить("Это новый, не записаный документ...");
КонецЕсли;
6. herfis 499 12.09.17 17:51 Сейчас в теме
О! Не пробовал, но вроде как можно подписаться на событие закрытия открываемой формы через УстановитьДействие().
7. SergeyCV76 12 12.09.17 18:06 Сейчас в теме
Выше не верно написал. Не разобрался в вопросе.

Док.Открыть() не ждет реакции пользователя сохранил он документ или закрыл без сохранения.
Док.Открытьмодально() как раз ждет не не продолжает выполнение кода 1С пока пользователь не закроет Док с сохранением или без.

К примеру Вы создаете 10 документов в обработке.
У вас 1С на экране сразу откроет 10 форм новых документов если использовать Док.Открыть()
И обработка закончит выполнение.

Поэтому без Модального режима Вы не унаете о реакции пользователя.

Не зная полного замысла этой обработки тяжело что то посоветовать
8. alx7304 12.09.17 19:32 Сейчас в теме
Не записанный документ, не имеет сохраненной ссылки в базе данных. Попробуйте
Если ЭтотОбъект.Ссылка.Пустая() Тогда

Документ не записан

КонецЕсли;
9. German_Tagil 43 13.09.17 14:39 Сейчас в теме
документ создается из обработки , именно создается
как проверить правильно был ли он записан или нет, потому что если нет
то надо подчистить хвосты - удалить промежуточные файлы
10. BackinSoda 13.09.17 14:43 Сейчас в теме
(9) Так заполняйте его правильно в обработке, не пользователь же заполняет документ ?
11. German_Tagil 43 13.09.17 14:50 Сейчас в теме
проблема не в этом - все что надо заполняется в обработке
но документ может быть не записан и мне надо отследить этот момент
12. BackinSoda 13.09.17 14:58 Сейчас в теме
(11) По какой причине не может быть записан ?
Сделайте через попытку:
Попытка
Док.Записать();
Исключение
        Сообщить("Что-то пошло не так!");
КонецПопытки
13. German_Tagil 43 13.09.17 15:13 Сейчас в теме
объясняю - я пишу в документ инфу, открываю форму чтобы посмотреть все нормально или нет, добить оставшиеся параметры
но могу записать документ а могу не записать
и мне надо этот момент отследить
в модальном варианте все работает
можно ли сделать проверку при ФормаДок.Открыть(); и каким образом?
14. BackinSoda 13.09.17 15:56 Сейчас в теме
(13) видимо в документе прописать такое, и отлавливать обработкой оповещения где-то в обработке
Процедура ПослеЗаписи()	
	
	Если ВладелецФормы <> Неопределено Тогда
		
		ОповеститьОЗаписиНовогоОбъекта(Ссылка);
		
	КонецЕсли;
		
КонецПроцедуры
Показать
15. herfis 499 14.09.17 09:23 Сейчас в теме
(13) Не пробовал (6)?
Выбор у тебя небольшой. Если в синхронном сценарии ты просто ждешь закрытия формы, то в асинхронном сценарии тебе надо это событие "ловить".
16. spacecraft 14.09.17 09:26 Сейчас в теме
(15)
вроде как можно подписаться на событие закрытия открываемой формы через УстановитьДействие()

если я правильно помню, то процедура выполнения должна быть размещена в самой открываемой форме.
17. herfis 499 14.09.17 09:37 Сейчас в теме
(16) Думаю, ты прав. Обработчик передается просто именем процедуры, т.е. очевидно предполагается контекст формы.
Жаль.
19. Ziggurat 50 14.09.17 10:35 Сейчас в теме
(13) Когда вызывается ФормаДок.Открыть() то отрабатывается код в ПередОткрытием и в ПриОткрытии в открываемой форме, далее отрабатывается Ваш код, написанный после вызова ФормаДок.Открыть() не дожидаясь каких-либо действий с Вашей стороны с открытой формой. Далее, в открытой форме, пользователь может что-то сделать (записать или не записать) и Вы хотите, чтобы в обработке, открывшей немодально форму произошла проверка? Как вариант, можно повесить обработку ожидания, которая будет проверять наличие открытой формы, а по необнаружению выключит себя и запустит нужную процедурку.
20. German_Tagil 43 14.09.17 13:36 Сейчас в теме
(19) попытался я так сдеалать в лоб - в цикле форма.открыта
подвисло все
обработку ожидания, которая будет проверять наличие открытой формы,
каким образом?
21. Ziggurat 50 14.09.17 13:53 Сейчас в теме
(20) Переменную с формой сделать глобальной для модуля, открытость проверять методом .Открыта()
Форма (Form)
Открыта (IsOpen)
Синтаксис:

Открыта()
Возвращаемое значение:

Тип: Булево.
Истина - открыта; Ложь - не открыта.
Описание:

Определяет, открыта ли данная форма.

Доступность:

Толстый клиент.
Пример:

Если Не Форма.Открыта() Тогда
Форма.Открыть();
КонецЕсли;


--------------------------------------------------------------------------------

Методическая информация
18. herfis 499 14.09.17 09:38 Сейчас в теме
Тогда без доработки самой формы вариантов вроде нет.
22. German_Tagil 43 14.09.17 14:09 Сейчас в теме
Если Не Форма.Открыта() Тогда
Форма.Открыть();
КонецЕсли;


смысл - у нас есть уже
Форма.Открыть();

надо отловить чем все дело закончилось
23. spacecraft 14.09.17 14:25 Сейчас в теме +0.4 $m
(22)
Перем ФормаДок;

Процедура ОткрытиеФормыДокумента()
	ФормаДок = Док.ПолучитьФорму("ФормаДокумента", ЭтаФорма);
	ФормаДок.Открыть();
	ПодключитьОбработчикОжидания("ПроверитьЗакрытиеФормы", 5);
КонецПроцедуры

Процедура ПроверитьЗакрытиеФормы() Экспорт
	Если ФормаДок = Неопределено Тогда
		ОтключитьОбработчикОжидания("ПроверитьЗакрытиеФормы");
		Возврат;
	КонецЕсли;
	Если Не ФормаДок.Открыта() Тогда
		Сообщить("Форма: "+ФормаДок.Заголовок+" закрыта");
		ФормаДок = Неопределено;
		ОтключитьОбработчикОжидания("ПроверитьЗакрытиеФормы");
	КонецЕсли;
КонецПроцедуры
Показать
olo_lo4; GeterX; +2 Ответить
24. German_Tagil 43 14.09.17 15:14 Сейчас в теме
Вроде заработало как надо - проверю отпишусь. Спасибо
25. German_Tagil 43 26.09.17 15:12 Сейчас в теме
Хорошо все работает тогда еще один вопрос
если документ записан и вызывается для добавления данных как понять был записан документ
или нет
26. herfis 499 26.09.17 15:30 Сейчас в теме
(25) В обычных формах красивше всего ЭтоНовый()
27. herfis 499 26.09.17 15:32 Сейчас в теме
А если ты про наличие незаписанных изменений, то Модифицированность
28. German_Tagil 43 26.09.17 16:01 Сейчас в теме
ЭтоНовый я уже разобрался
а вот с модифицированностью интересно

если док. Модифицированность тогда
удалить что-то (те документ не записан)
иначе
записан
конецесли;
29. spacecraft 26.09.17 16:19 Сейчас в теме
(28) модифицированность тут мало чем поможет.
Вот так нужно:
Перем ФормаДок, ВерсияДок;


Процедура КоманднаяПанель1Действие1(Кнопка)
	ФормаДок = Док.ПолучитьФорму("ФормаДокумента", ЭтаФорма);
	ВерсияДок = Док.ВерсияДанных;
	ФормаДок.Открыть();
	
	ПодключитьОбработчикОжидания("ПроверитьЗакрытиеФормы", 5);
КонецПроцедуры

Процедура ПроверитьЗакрытиеФормы() Экспорт
	Если ФормаДок = Неопределено Тогда
		ОтключитьОбработчикОжидания("ПроверитьЗакрытиеФормы");
		Возврат;
	КонецЕсли;
	Если Не ФормаДок.Открыта() Тогда
		Сообщить("Форма: "+ФормаДок.Заголовок+" закрыта");
		Если Док.ВерсияДанных = ВерсияДок Тогда
			Сообщить("Документ не изменялся");
		КонецЕсли;
		ФормаДок = Неопределено;
		ОтключитьОбработчикОжидания("ПроверитьЗакрытиеФормы");
	КонецЕсли;
КонецПроцедуры
Показать
30. KillHunter 7 17.07.18 15:05 Сейчас в теме
по поводу модифицированности:
Для сигнализации пользователю о том, что данные, отображаемые формой, были изменены, у формы существует признак модифицированности. При взведении данного признака в заголовке формы отображается символ *. Данный символ сигнализирует пользователю, что данные были изменены, и их необходимо сохранить.
Признак модификации формы взводится системой в следующих случаях:

Изменение объекта, являющимся значением основного реквизита формы. Это изменение может быть произведено интерактивно с помощью элемента управления связанным с реквизитом объекта или программно.
При изменении данных или отработке события элемента управления, у которого взведен флаг "изменяет данные".

Признак модифицированности формы сбрасывается системой при наступлении одного из следующих событий:

Измененный объект, являющийся значением основного реквизита формы, был успешно записан.
При открытии формы после события ПередОткрытием() формы, но перед событием ПриОткрытии().

Флаг модифицированности сбрасывается после события ПередОткрытием() формы, но перед событием ПриОткрытии(), так как при открытии формы нового объекта или уже записанного пользователь ожидает, что состояние данных не являются измененными. Если для нового объекта нужно дополнительная его инициализация перед редактированием в форме, то ее можно произвести в обработчике события формы ПередОткрытием(). В этом случае признак модифицированности не будет взведен у формы, как того и ожидает пользователь. Если же нужно внести исправления в объект при открытии формы, которые должны отразиться на признаке модифицированности, то это следует произвести в обработчике события формы ПриОткрытии().

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

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