Обновление формы элемента справочника

1. alexie.j 23.08.17 11:46 Сейчас в теме
Добрый день.
Помогите, пожалуйста понять что не правильно.
Есть форма, которая открывает другую. Во второй вводятся данные, сохраняются, но при закрытии второй формы в первой изменения не отражаются. А если я закрою и заново открою элемент, то данные будут записаны.
Хотелось бы сразу чтобы они обновлялись.

Я попробовала несколько способов, но так и не пришла к решению. В последней из попыток использовала:

Во второй форме:
&НаКлиенте
Процедура ПриЗакрытии()
	Оповестить("ОбновитьФормуЭлемента");
КонецПроцедуры


А в первой:
&НаКлиенте 
Процедура ОбработкаОповещения(ИмяСобытия,Параметр, Источник)

	Если ИмяСобытия= "ОбновитьФормуЭлемента"
		Тогда
			ЭтаФорма.ОбновитьОтображениеДанных(Объект.ПолеHTMLДоступы);      
        КонецЕсли;

КонецПроцедуры  
Показать

Обновление не происходит. Что я делаю не так?
+
По теме из базы знаний
Найденные решения
25. alexie.j 23.08.17 18:20 Сейчас в теме
(24)
(22) Спасибо большое за помощь!
В моём случае правда пришлось сделать иначе.
У меня есть процедура
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
---------
КонецПроцедуры


Сделала так
 &НаКлиенте 
Процедура ОбработкаОповещения(ИмяСобытия,Параметр, Источник)

	Если ИмяСобытия= "ОбновитьФормуЭлемента" Тогда
		
		ПриСозданииНаСервере(ложь, истина);	
		
    КонецЕсли;

КонецПроцедуры   
Показать


Не знаю насколько это правильно с точки зрения программирования, но работает)
DAL; +1
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. DAL 23.08.17 11:55 Сейчас в теме
(1)
Следует понимать, что у каждой формы свой экземпляр объекта.
После закрытия второй формы в первую очередь нужно перечитать данные объекта первой формы.
+
7. DAL 23.08.17 12:01 Сейчас в теме
(1)

Попробуйте так:

&НаКлиенте 
Процедура ОбработкаОповещения(ИмяСобытия,Параметр, Источник)

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

КонецПроцедуры  
Показать
alexie.j; +1
8. alexie.j 23.08.17 12:05 Сейчас в теме
(7) пробовала, так же всё..
Ещё вот так думала

Если ИмяСобытия= "ОбновитьФормуЭлемента"
		Тогда
			//ЭтаФорма.ОбновитьОтображениеДанных(Объект.ПолеHTMLДоступы);
		ЭтотОбъект.Прочитать();
		ЭтаФорма.Обновить();
		ЭтаФорма.ОбновлениеОтображенияДанных();
        КонецЕсли; 
+
10. DAL 23.08.17 12:12 Сейчас в теме
(8) Метод "Прочитать" автоматом обновляет форму.

Кстати попробуйте ЭтаФорма.Прочитать();
alexie.j; +1
26. Xershi 1484 23.08.17 18:28 Сейчас в теме
(1) связь форм можно реализовать через параметры формы. Если вы программно меняете данные объекта формы, то нужно его перечитать потом!
+
2. Boneman 298 23.08.17 11:53 Сейчас в теме
отладчик поставь, перед
ЭтаФорма.ОбновитьОтображениеДанных(Объект.ПолеHTMLДоступы);

оно сюда вообще не попадает, или попадает, но обновление не срабатывает ?
alexie.j; +1
3. alexie.j 23.08.17 11:54 Сейчас в теме
(2) Вообще не попадает
+
5. DAL 23.08.17 11:58 Сейчас в теме
Форма 1 - Объект 1 данные сформированы.

Открывается форма 2, Объект 2. изменяется реквизит МойHTMLДокумент. Сохраняется, закрывается.

Форма 1. Объект все еще 1 (не обновленный). Даем команду "Форма.ОбновитьОтображение". Данные для обновления берутся из Объект1, который все еще не обновлен.
+
6. alexie.j 23.08.17 12:01 Сейчас в теме
(5) Значит я в начале во втором элементе должна прочитать данные?
+
9. EVKash 14 23.08.17 12:08 Сейчас в теме
ЭтаФорма.Прочитать();
+
11. alexie.j 23.08.17 12:13 Сейчас в теме
(9)
(7) К сожалению, нет..Мне кажется я очень близка к правильному варианту, но что то упускаю.
У меня отладчик не попадает в процедуру обработки. Может её нужно вызвать где-то?
Я просто на форме элемента написала
+
12. DAL 23.08.17 12:16 Сейчас в теме
(11) А у формы в событии "Обработка оповещения" эта процедура подключена?
EVKash; +1
13. alexie.j 23.08.17 12:17 Сейчас в теме
16. Boneman 298 23.08.17 12:23 Сейчас в теме
(13)
вот так подключена ?
Прикрепленные файлы:
+
18. alexie.j 23.08.17 12:25 Сейчас в теме
(16) да,да)
Прикрепленные файлы:
+
21. DAL 23.08.17 12:30 Сейчас в теме
(18)

У формы элемента справочника однозначно есть сущность "ЭтотОбъект" и "ЭтаФорма".
У этих сущностей однозначно есть метод "Прочитать".
Этот метод однозначно перечитывает данные и обновляет форму.

Где-то что-то не так написано.
+
14. alexie.j 23.08.17 12:20 Сейчас в теме
(12) Отладчик уже попадает!

при вычислении ЭтаФорма.Прочитать(); пишет, что поле объекта не обнаружено
+
15. DAL 23.08.17 12:23 Сейчас в теме
(14)
Так. Давайте по порядку.

Есть (например) элемент справочника.

У него две формы - форма 1 и форма 2.
Форма 2 вызывается из формы 1. Так?
+
19. alexie.j 23.08.17 12:28 Сейчас в теме
(15) Давайте, расскажу
У меня есть элемент справочника оборудование. Например компьютер.
Открываю его и хочу редактировать данные. Нажимаю на кнопку, открывается вторая форма где можно редактировать эти данные. Ввожу там какие-то записи, а потом сохранив закрываю.
И в первой форме должны показаться эти новые данные. Их нет. Закрываю этот элемент, открываю опять, данные есть) И вот это не очень нужное действие с открытием и закрытием я бы хотела исключить, чтобы пользователю было удобнее.
+
22. Boneman 298 23.08.17 12:30 Сейчас в теме
(19)
Нажимаю на кнопку, открывается вторая форма где можно редактировать эти данные. Ввожу там какие-то записи, а потом сохранив закрываю.
И в первой форме должны показаться эти новые данные

тебе надо во второй форме, ввести данные, и параметром в обработке оповещения передать их в первую форму.
Там, этот новый текст (или что у тебя там), должен вставится в твое поле..
а сохранится в базу он должен когда, ты нажмешь ОК уже в первой форме, твоего справочника обороудование

примерно так
&НаКлиенте
Процедура ПриЗакрытии()
    Оповестить("ОбновитьФормуЭлемента", ПолеСДанными);
КонецПроцедуры


на первой
&НаКлиенте 
Процедура ОбработкаОповещения(ИмяСобытия,Параметр, Источник)

    Если ИмяСобытия= "ОбновитьФормуЭлемента"
        Тогда
            Объект.ПолеHTMLДоступы = парамер;  
alexie.j; +1
23. DAL 23.08.17 12:32 Сейчас в теме
(22)
оповещения

(20)

С точки зрения технологии соглашусь с 22.

Смысл дважды редактировать один объект?


Во второй форме вводятся данные и передаются в первую форму. И там уже записываются.

Но с точки зрения текущей проблемы - все должно работать.
+
17. Boneman 298 23.08.17 12:24 Сейчас в теме
(14)
ЭтаФорма.Прочитать();

так эта форма, или ЭтотОбъект ?
+
20. alexie.j 23.08.17 12:29 Сейчас в теме
(17) я и Объект пробовала, а именно Объект.ПолеHTMLДоступы
И форму...
+
24. DAL 23.08.17 12:39 Сейчас в теме
В первой форме.


Форма2 = ПолучитьФорму("ПутьКФорме",,ЭтаФорма);
КопироватьДанныеФормы(Объект,Форма2.Объект);
Форма2.Открыть();

Во второй форме

При Закрытии

КопироватьДанныеФормы(Объект, ЭтаФорма.Владелец.Объект);
Оповестить("Я все сделала!");

В первой форме

Обработка оповещения
Если ИмяСобытия = "Я все сделала!" тогда ЭтаФорма.Прочитать(); КонецЕсли;
alexie.j; +1
25. alexie.j 23.08.17 18:20 Сейчас в теме
(24)
(22) Спасибо большое за помощь!
В моём случае правда пришлось сделать иначе.
У меня есть процедура
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
---------
КонецПроцедуры


Сделала так
 &НаКлиенте 
Процедура ОбработкаОповещения(ИмяСобытия,Параметр, Источник)

	Если ИмяСобытия= "ОбновитьФормуЭлемента" Тогда
		
		ПриСозданииНаСервере(ложь, истина);	
		
    КонецЕсли;

КонецПроцедуры   
Показать


Не знаю насколько это правильно с точки зрения программирования, но работает)
DAL; +1
27. DAL 23.08.17 19:53 Сейчас в теме
(25) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+
28. Kinestetik 23 24.08.17 16:48 Сейчас в теме
(25) С точки зрения программирования это плохой стиль - явно вызывать обработчики событий. Если это сработало, значит, нужно посмотреть, какой код из "ПриСозданииНаСервере" обновляет данные формы. И вынести этот код в отдельный метод, например, ОбновитьДанныеФормы() или как-то так назвать. И вызывать этот метод в "ПриСозданииНаСервере" и в обработке оповещения
+
Внимание! Тема сдана в архив

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