программирование (управляемые формы): заполнение другого объекта, перед созданием текущего

1. Hawk_sib 30 08.07.17 17:58 Сейчас в теме
Ребят, с управляемыми формами опыт есть, но не большой, подскажите как сделать, пожалуйста, пишу свой документ, если документ новый нужно, что бы перед созданием документа, создавался справочник, который является реквизитом, данного документа. в форме документа, пишу такой код:


&НаСервере
Функция ЭтоНовый()
	Возврат Параметры.Ключ.Пустая();	
КонецФункции



&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Если ЭтоНовый() Тогда
		//Для каждого нового документа создается элемент справочника первичный документ, сразу при создании документа открываю форму
		мПараметры = Новый Структура;
		мПараметры.Вставить("Ключ", Объект.ПервичныйДокумент);
		Объект.ПервичныйДокумент = ОткрытьФорму("Справочник.ПервичныеДокументы.Форма.ФормаЭлемента", , Элементы.ПервичныйДокумент, , ПолучитьОкна()[0], , , РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
		
	КонецЕсли;
КонецПроцедуры
Показать


происходит следующее:
1. перед открытием формы документа открывается форма нового справочника, о чем я сразу не догадался, т.к. форма была спрятана под формой документа
2. после записи справочника, реквизит в форме документа не обновляется, чего я желаю

подскажите, кто знает, как сделать правильно, процедура ПриОткрытии вызывается "при открытии формы, ДО ЕЁ ПОКАЗА", следовательно мыслю, что нужно использовать другую, подскажите
По теме из базы знаний
Найденные решения
11. Hawk_sib 30 09.07.17 04:41 Сейчас в теме
в общем сделал, примерно как рекомендовали в (4)
в форме документа:
&НаСервере
Функция ЭтоНовый()
	Возврат Параметры.Ключ.Пустая();	
КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Если ЭтоНовый() Тогда
		ПодключитьОбработчикОжидания("СоздатьПервичныйДокументДляЭтойПроверки", 0.1, Истина)
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура СоздатьПервичныйДокументДляЭтойПроверки()
	//Для каждого нового документа создается элемент справочника первичный документ, сразу при создании документа открываю форму
	ОткрытьФорму("Справочник.ПервичныеДокументы.Форма.ФормаЭлемента", , ЭтаФорма, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьПолеПервичныйДокументСозданнымСправочником(Справочник)
	Объект.ПервичныйДокумент = Справочник;
КонецПроцедуры
Показать

в форме справочника:
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	Если ТипЗнч(ВладелецФормы) = Тип("УправляемаяФорма") Тогда
		ВладелецФормы.ЗаполнитьПолеПервичныйДокументСозданнымСправочником(Объект.Ссылка);
	КонецЕсли;
КонецПроцедуры

в принципе, работает как я и хотел, всем спасибо за участие
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Dream_kz 129 08.07.17 18:29 Сейчас в теме
(1) ОткрытьФорму ничего не вернет.
Почему просто не вывести реквизит на форму, и проверять его заполнение? А пользователь по кнопке создать уже реквизит заполнит.
3. Hawk_sib 30 08.07.17 18:32 Сейчас в теме
(2) реквизит на форме документа есть, как проверять его заполнение, при открытии, думаю, не пойдет, будет то же самое
4. Dream_kz 129 08.07.17 18:38 Сейчас в теме
(3)
как проверять его заполнение

У реквизита есть свойство, "проверять заполнение".
Есть способ, пройти предложенным путем, но он неправильный:
При открытии подключаем обработчик ожидания, через пару секунд после открытия он запускает создание справочника, владельцем формы создания будет форма документа, в форме справочника после записи можно вызвать экспортную процедуру из формы документа (через владельца формы), либо выполнить метод Оповестить(). Если использовать Оповестить, то в форме документа в событии ОбработкаОповещения ловим создание элемента справочника, и пишем в реквизит. Но повторюсь еще раз, так не делают.
11. Hawk_sib 30 09.07.17 04:41 Сейчас в теме
в общем сделал, примерно как рекомендовали в (4)
в форме документа:
&НаСервере
Функция ЭтоНовый()
	Возврат Параметры.Ключ.Пустая();	
КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Если ЭтоНовый() Тогда
		ПодключитьОбработчикОжидания("СоздатьПервичныйДокументДляЭтойПроверки", 0.1, Истина)
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура СоздатьПервичныйДокументДляЭтойПроверки()
	//Для каждого нового документа создается элемент справочника первичный документ, сразу при создании документа открываю форму
	ОткрытьФорму("Справочник.ПервичныеДокументы.Форма.ФормаЭлемента", , ЭтаФорма, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьПолеПервичныйДокументСозданнымСправочником(Справочник)
	Объект.ПервичныйДокумент = Справочник;
КонецПроцедуры
Показать

в форме справочника:
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	Если ТипЗнч(ВладелецФормы) = Тип("УправляемаяФорма") Тогда
		ВладелецФормы.ЗаполнитьПолеПервичныйДокументСозданнымСправочником(Объект.Ссылка);
	КонецЕсли;
КонецПроцедуры

в принципе, работает как я и хотел, всем спасибо за участие
5. Hawk_sib 30 08.07.17 18:46 Сейчас в теме
логику примерно понял
но есть 2 вопроса:
1. зачем проверять заполнение реквизита в форме документа?
2. почему подход не правильный? как делать правильно?
7. Dream_kz 129 08.07.17 18:54 Сейчас в теме
(5) Ну раз нужно обязательно создавать элемент справочника, то пусть его пользователь сам создаст, и не надо делать костыли, с принудительным вызовом, а если пользователь забудет создать 'элемент справочника, как раз и понадобится это свойство.
8. Hawk_sib 30 08.07.17 19:02 Сейчас в теме
(7) понял, буду пробовать
6. Hawk_sib 30 08.07.17 18:47 Сейчас в теме
"проверять заполнение" я имею в виду устанавливать свойство
9. BigBoss 2 09.07.17 00:05 Сейчас в теме
Для удобства пользователя можешь создать кнопку по которой если он нажмёт то создаст элемент справочника
10. Hawk_sib 30 09.07.17 04:07 Сейчас в теме
(9) проблема в том, что такая кнопка есть, когда нажимаешь выбор на поле ввода, там есть зеленый плюсик, который и создает справочник, вот эту процедуру и хочу сделать более интерактивной, чтобы пользователю не нужно было нажимать кнопки, а только забивать данные
Оставьте свое сообщение

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