|
После записи объекта элементы формы ведут себя, как будто объект не записан | ☑ | ||
---|---|---|---|---|
0
alexa19
30.05.16
✎
07:24
|
Добрый день!
Вопрос связан с управляемыми формами. Форме элемента справочника добавлен реквизит с типом Динамический список у которого основная таблица Регистр сведений. Динамический список перенесен на форму, т. е. на форме появилась таблица, привязанная к динамическому списку. При этом при перетаскивании динамического списка на форму вместе с таблицей появилась командная панель с кнопкой Создать. При нажатии на эту кнопку открывается форма записи регистра сведений, т. е. из формы элемента справочника можно добавить запись в регистр. Все работает замечательно. Попытался обыграть такую ситуацию в форме записи регистра: при попытке добавить запись в регистр для не записанного элемент справочника выдавать вопрос: "Элемент не записан. Записать?" И если ответ "Да" то записываем элемент справочника и потом продолжаем вводить запись регистра. Опять все сработало хорошо. Хочу заметить, что элемент справочника был записан программно, но форма элемента еще ни разу не закрывалась. Следующие действия: еще раз нажимаю на кнопку Создать, чтобы ввести следующую запись в регистр сведений. И опять появляется вопрос "Элемент не записан. Записать?" Хотя элемент уже записан в базу. Помогите разобраться что я упускаю! Вот код формы записи регистра: &НаКлиенте Процедура ОбработкаОтвета(Результат, ВладелецОбъект) Экспорт Если Результат = КодВозвратаДиалога.Нет Тогда ЭтаФорма.Закрыть(); Иначе ЗаписатьОбъект(ВладелецОбъект); Запись.Контакт = ВладелецОбъект.Ссылка; ВладелецФормы.Родитель.Родитель.Модифицированность = Ложь; КонецЕсли; КонецПроцедуры // ОбработкаОтвета() &НаСервере Процедура ЗаписатьОбъект(Объект) ОбъектБазы = ДанныеФормыВЗначение(Объект, Тип("СправочникОбъект.КонтактныеЛица")); ОбъектБазы.Записать(); ЗначениеВДанныеФормы(ОбъектБазы,Объект); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) ВладелецОбъект = ВладелецФормы.Родитель.Родитель.Объект; Если ТипЗнч(ВладелецОбъект.Ссылка) = Тип("СправочникСсылка.КонтактныеЛица") Тогда Если ВладелецОбъект.Ссылка.Пустая() Тогда Оповещение = Новый ОписаниеОповещения("ОбработкаОтвета", ЭтотОбъект, ВладелецОбъект); ПоказатьВопрос(Оповещение, "Элемент не записан. Записать?", РежимДиалогаВопрос.ДаНет); Иначе Запись.КонтактноеЛицо = ВладелецОбъект.Ссылка; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
1
rifat
30.05.16
✎
07:51
|
в отладчике посмотрите какие значения принимает ВладелецОбъект.Ссылка?
|
|||
2
alexa19
30.05.16
✎
08:17
|
(1) (1)При первом добавлении записи и повторном - Неопределенно. Хотя на момент записи самого элемента (т. е. после отработки процедуры ЗаписатьОбъект) ВладелецОбъект.Ссылка имеет правильное значение
|
|||
3
alexa19
30.05.16
✎
08:18
|
(1) А вот если форму элемента справочника закрыть и открыть, то ВладелецОбъект.Ссылка всегда имеет правильную ссылку
|
|||
4
Mort
30.05.16
✎
10:11
|
Решение через заднее место
|
|||
5
write
30.05.16
✎
10:28
|
Нужно использовать ОбработкаОповещения() в справочнике, в регистре Оповестить(), после оповещения, форму справочника Прочитать().
Посмотрите в типовые, в них сначала просят записать элемент, а затем работают с регистрами сведений. |
|||
6
Mort
30.05.16
✎
10:38
|
(5) - Шедевр, однозначно!
Но я видел решение гораздо круче. В форме контрагента было поле ДС регистра паспортных данных и поле ввода реквизита "Основные данные". При записи регистра в этом контрагенте изменялся реквизит "Основные данные". А на форме контрагента при изменении поля ДС вызывалось "Перечитать". |
|||
7
alexa19
30.05.16
✎
11:01
|
(5) Благодарю!
|
|||
8
alexa19
30.05.16
✎
16:17
|
(5) Write, сделал как вы сказали, все получилось. Но этот прием почему-то не работает с обновлением динамического списка (КонтактныеДанные). Можете подсказать в чем проблема?
Форма регистра записи: Процедура ПослеЗаписи(ПараметрыЗаписи) Оповестить("КонтактноеЛицо_Обновить"); КонецПроцедуры // ПослеЗаписи() Форма элемента справочника: &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "КонтактноеЛицо_Записать" Тогда ЗаписатьОбъект(); //записали объект в базу ЭтотОбъект.Прочитать(); ИначеЕсли ИмяСобытия = "КонтактноеЛицо_Обновить" Тогда УстановитьОтборКонтактныхДанных(); //устанавливаю отбор записей по ссылке текущего элемента справочника Элементы.КонтактныеДанные.Обновить(); КонецЕсли; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |