|
Как из формы док. открыть форму нового эл.спр. и после записи эл.спр. вернуть ссылку? | ☑ | ||
---|---|---|---|---|
0
Birmingem
08.05.18
✎
19:00
|
Такая задача.
Управляемые формы. В форме документа "Акт приемки" пользователь нажимает кнопочку "Создать новый товар". Открывается форма нового элемента справочника "Товары". Пользователь заполняет реквизиты справочника и нажимает "Записать и закрыть". Теперь, этот записанный элемент справочника нужно подставить в соответствующий реквизит документа "Акт приемки". Делаю так: &НаКлиенте Процедура СоздатьТовар(Команда) ДополнительныеПараметры = Новый Структура; ПослеЗаписиТовара = Новый ОписаниеОповещения("ВыполнитьПослеЗаписиТовара", ЭтотОбъект, ДополнительныеПараметры); ПараметрыНовогоТовара = Новый Структура; ПараметрыНовогоТовара.Вставить("Основание",ПредыдущийТовар); ОткрытьФорму("Справочник.Товары.ФормаОбъекта",ПараметрыНовогоТовара,ЭтаФорма,ЭтаФорма.УникальныйИдентификатор,,,ПослеЗаписиТовара); КонецПроцедуры Теперь вопрос. Как в процедуре ВыполнитьПослеЗаписиТовара() получить ссылку на созданный товар? Или как передать туда ссылку на этот товар? &НаКлиенте Процедура ВыполнитьПослеЗаписиТовара(Результат, ДополнительныеПараметры) Экспорт КонецПроцедуры Весь инет перерыл, так и не нашел подобного примера. |
|||
1
Мимохожий Однако
08.05.18
✎
21:03
|
Зачем это велосипед. При добавлении в табличную часть Номенклатуры, есть стандартная кнопка создания нового элемента.
|
|||
2
Birmingem
10.05.18
✎
14:05
|
(1)После создания и выбора элемента, еще надо кое-какие расчеты произвести.
Так как получить ссылку на только-что интерактивно созданный элемент справочника? |
|||
3
DrShad
10.05.18
✎
14:07
|
через оповещения
|
|||
4
Defender aka LINN
10.05.18
✎
14:24
|
(0) ВыполнитьПослеЗаписиТовара(*Результат*, ДополнительныеПараметры)
|
|||
5
Birmingem
10.05.18
✎
14:24
|
(3)Делал так.
В форме справочника в процедуре ПриЗакрытии(): Оповестить("СоздалиИВыбралиТовар",Объект.Ссылка); А в модуле формы документа: Процедура ОбработкаОповещения(Событие,Параметр,Источник) Если Событие = "СоздалиИВыбралиТовар" Тогда ТекСтрока=Элементы.Товары.ТекущиеДанные; ТекСтрока.Товар=Параметр; Конецесли; КонецПроцедуры Правильно? Но процедура ОбработкаОповещения() не запускается. С оповещениями вообще еще не работал. Может еще где-то чего-то надо прописать? |
|||
6
Birmingem
10.05.18
✎
14:26
|
(4) Результат = Неопределено
|
|||
7
singlych
10.05.18
✎
14:34
|
В ПараметрыНовогоТовара вставляешь "РежимВыбора" Истина, в ОтрытьФорму в параметре Владелец указываешь элемент формы, в который должен прилетать товар. Ссылка сама прилетит, если что-то еще нужно, есть ОбработкаВыбора или там ПриИзменении.
|
|||
8
Defender aka LINN
10.05.18
✎
15:15
|
(6) Ну а кто тебе виноват? Сделай, чтобы была ссылка
|
|||
9
Birmingem
11.05.18
✎
14:45
|
(7)Сделал:
ПараметрыНовогоТовара.Вставить("РежимВыбора",Истина); ОткрытьФорму("Справочник.Товары.ФормаОбъекта",ПараметрыНовогоТовара, Элементы.Товары.ТекущиеДанные.Товар, ЭтаФорма.УникальныйИдентификатор,,,ПослеЗаписиТовара); После этого в текущей строке в реквизите Товар должна появиться ссылка на созданный товар? Не появляется. Проверяю в процедуре ПриЗакрытии() в форме справочника, там ЭтаФорма.ВладелецФормы = Неопределено Что не так? |
|||
10
Birmingem
11.05.18
✎
14:54
|
Если же в ОткрытьФорму() в качестве владельца передаю ЭтаФорма, то в форме товара в ПриЗакрытии() ВладелецФормы определяется как форма вызывающего документа.
Но ссылка на созданный товар не передается в форму владельца. |
|||
11
Cyberhawk
11.05.18
✎
14:55
|
Результат закрытия формы будет в обработке оповещения метода ОткрытьФорму
|
|||
12
Birmingem
11.05.18
✎
14:55
|
(8)Подскажи, как сделать чтобы было "Результат = Ссылка на созданный товар"?
|
|||
13
Birmingem
11.05.18
✎
14:56
|
(11) Так в том то и дело, что Результат=Неопределено
|
|||
14
DrWatson
11.05.18
✎
16:06
|
(9) По справке владельцем формы может быть либо форма, либо элемент формы. У тебя это ссылка - совсем не то что нужно.
С табличной частью есть тонкость - она должна быть в режиме редактирования. Когда пользователь жмет кнопку, то это явно не так. Программно можно зайти в режим редактирования с помощью: Элементы.Товары.ИзменитьСтроку(); (2) должен быть вполне рабочим вариантом, не понимаю почему он тебе не подходит. (12) Если не подходит через элемент формы, а нужно прям обязательно через Результат. То общая идея заключается в том, что в форме справочника нужно делать Закрыть(Объект.Ссылка). Скорее всего, лучше сделать свою кнопку записи, программно записывать и закрывать форму, возвращая указанным образом ссылку. |
|||
15
singlych
11.05.18
✎
16:18
|
(9) Владельцем надо элемент формы передавать, а не данные.
Но если у тебя ТЧ, то я хз как сделать красиво. Почему-то колонка ТЧ не канает в качестве владельца. Но можно передать саму ТЧ ОткрытьФорму("Справочник.Товары.ФормаОбъекта",ПараметрыНовогоТовара, Элементы.Товары, .... А потом в ТоварыОбработкаВыбора пихнуть ВыбранноеЗначение в текущую строку. |
|||
16
DrWatson
11.05.18
✎
16:21
|
(15) Да, нет, канает. Я же говорю только должен быть режим редактирования.
|
|||
17
singlych
11.05.18
✎
16:25
|
(16) Действительно, прикольно.
|
|||
18
Birmingem
11.05.18
✎
17:10
|
(14)Спасибо!
Еще несколько раз прочитал синтаксис метода ОткрытьФорму(). Оказывается, вызываемую форму надо закрывать принудительно-программно, методом Закрыть(), и в параметре этого метода передавать ссылку. Сделал так: Процедура ПослеЗаписи(ПараметрыЗаписи) Если ТипЗнч(ЭтаФорма.ВладелецФормы) = Тип("УправляемаяФорма") Тогда Если ЭтаФорма.ВладелецФормы.ИмяФормы = "Документ.АктПриемки.Форма.ФормаДокумента" Тогда Закрыть(Объект.Ссылка); КонецЕсли; КонецЕсли; КонецПроцедуры И вот тогда в моей процедуре ВыполнитьПослеЗаписиТовара() в параметре Результат появляется ссылка на этот записанный элемент справочника. |
|||
19
Cyberhawk
11.05.18
✎
17:51
|
(13) Так не сам по себе же. Ты его передаешь в параметре метода "Закрыть()"
|
|||
20
Fragster
гуру
11.05.18
✎
17:52
|
В параметрах передать РежимВыбора Истина и владелец - тот элемент управления, куда надо вернуть значение
|
|||
21
Fragster
гуру
11.05.18
✎
17:53
|
а в открываемой форме нового ничего не надо
|
|||
22
Birmingem
11.05.18
✎
18:55
|
(19)Аха... Только я очень нескоро понял, что Закрыть() надо именно писать, а при интерактивном закрытии ничего не передается.
(20)Позже, для интереса, еще попытаюсь этот метод попробовать. С учетом замечаний в (14) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |