Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Как из формы док. открыть форму нового эл.спр. и после записи эл.спр. вернуть ссылку?

Как из формы док. открыть форму нового эл.спр. и после записи эл.спр. вернуть ссылку?
Я
   Birmingem
 
08.05.18 - 19:00
Такая задача.
Управляемые формы.
В форме документа "Акт приемки" пользователь нажимает кнопочку "Создать новый товар".
Открывается форма нового элемента справочника "Товары". Пользователь заполняет реквизиты справочника и нажимает "Записать и закрыть".
Теперь, этот записанный элемент справочника нужно подставить в соответствующий реквизит документа "Акт приемки".

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

Теперь вопрос. Как в процедуре ВыполнитьПослеЗаписиТовара() получить ссылку на созданный товар?
Или как передать туда ссылку на этот товар?

&НаКлиенте
Процедура ВыполнитьПослеЗаписиТовара(Результат, ДополнительныеПараметры) Экспорт
КонецПроцедуры

Весь инет перерыл, так и не нашел подобного примера.
 
 
   МимохожийОднако
 
1 - 08.05.18 - 21:03
Зачем это велосипед. При добавлении  в табличную часть Номенклатуры, есть стандартная кнопка создания нового элемента.
   Birmingem
 
2 - 10.05.18 - 14:05
(1)После создания и выбора элемента, еще надо кое-какие расчеты произвести.

Так как получить ссылку на только-что интерактивно созданный элемент справочника?
   DrShad
 
3 - 10.05.18 - 14:07
через оповещения
   Defender aka LINN
 
4 - 10.05.18 - 14:24
(0) ВыполнитьПослеЗаписиТовара(*Результат*, ДополнительныеПараметры)
   Birmingem
 
5 - 10.05.18 - 14:24
(3)Делал так.
В форме справочника в процедуре ПриЗакрытии():
Оповестить("СоздалиИВыбралиТовар",Объект.Ссылка);

А в модуле формы документа:
Процедура ОбработкаОповещения(Событие,Параметр,Источник)
    Если Событие = "СоздалиИВыбралиТовар" Тогда
        ТекСтрока=Элементы.Товары.ТекущиеДанные;
        ТекСтрока.Товар=Параметр;
    Конецесли;
КонецПроцедуры

Правильно?
Но процедура ОбработкаОповещения() не запускается.
С оповещениями вообще еще не работал.
Может еще где-то чего-то надо прописать?
   Birmingem
 
6 - 10.05.18 - 14:26
(4) Результат = Неопределено
   singlych
 
7 - 10.05.18 - 14:34
В ПараметрыНовогоТовара вставляешь "РежимВыбора" Истина, в ОтрытьФорму в параметре Владелец указываешь элемент формы, в который должен прилетать товар. Ссылка сама прилетит, если что-то еще нужно, есть ОбработкаВыбора или там ПриИзменении.
   Defender aka LINN
 
8 - 10.05.18 - 15:15
(6) Ну а кто тебе виноват? Сделай, чтобы была ссылка
   Birmingem
 
9 - 11.05.18 - 14:45
(7)Сделал:
ПараметрыНовогоТовара.Вставить("РежимВыбора",Истина);
ОткрытьФорму("Справочник.Товары.ФормаОбъекта",ПараметрыНовогоТовара, Элементы.Товары.ТекущиеДанные.Товар, ЭтаФорма.УникальныйИдентификатор,,,ПослеЗаписиТовара);


После этого в текущей строке в реквизите Товар должна появиться ссылка на созданный товар?
Не появляется.
Проверяю в процедуре ПриЗакрытии() в форме справочника, там ЭтаФорма.ВладелецФормы = Неопределено

Что не так?
   Birmingem
 
10 - 11.05.18 - 14:54
Если же в ОткрытьФорму() в качестве владельца передаю ЭтаФорма, то в форме товара в ПриЗакрытии() ВладелецФормы определяется как форма вызывающего документа.
Но ссылка на созданный товар не передается в форму владельца.
 
 Рекламное место пустует
   Cyberhawk
 
11 - 11.05.18 - 14:55
Результат закрытия формы будет в обработке оповещения метода ОткрытьФорму
   Birmingem
 
12 - 11.05.18 - 14:55
(8)Подскажи, как сделать чтобы было "Результат = Ссылка на созданный товар"?
   Birmingem
 
13 - 11.05.18 - 14:56
(11) Так в том то и дело, что Результат=Неопределено
   DrWatson
 
14 - 11.05.18 - 16:06
(9) По справке владельцем формы может быть либо форма, либо элемент формы. У тебя это ссылка - совсем не то что нужно.

С табличной частью есть тонкость - она должна быть в режиме редактирования. Когда пользователь жмет кнопку, то это явно не так. Программно можно зайти в режим редактирования с помощью:
Элементы.Товары.ИзменитьСтроку();

(2) должен быть вполне рабочим вариантом, не понимаю почему он тебе не подходит.

(12) Если не подходит через элемент формы, а нужно прям обязательно через Результат. То общая идея заключается в том, что в форме справочника нужно делать Закрыть(Объект.Ссылка). Скорее всего, лучше сделать свою кнопку записи, программно записывать и закрывать форму, возвращая указанным образом ссылку.
   singlych
 
15 - 11.05.18 - 16:18
(9) Владельцем надо элемент формы передавать, а не данные.
Но если у тебя ТЧ, то я хз как сделать красиво. Почему-то колонка ТЧ не канает в качестве владельца. Но можно передать саму ТЧ
ОткрытьФорму("Справочник.Товары.ФормаОбъекта",ПараметрыНовогоТовара, Элементы.Товары, ....

А потом в ТоварыОбработкаВыбора пихнуть ВыбранноеЗначение в текущую строку.
   DrWatson
 
16 - 11.05.18 - 16:21
(15) Да, нет, канает. Я же говорю только должен быть режим редактирования.
   singlych
 
17 - 11.05.18 - 16:25
(16) Действительно, прикольно.
   Birmingem
 
18 - 11.05.18 - 17:10
(14)Спасибо!
Еще несколько раз прочитал синтаксис метода ОткрытьФорму().
Оказывается, вызываемую форму надо закрывать принудительно-программно, методом Закрыть(), и в параметре этого метода передавать ссылку.

Сделал так:

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

И вот тогда в моей процедуре ВыполнитьПослеЗаписиТовара() в параметре Результат появляется ссылка на этот записанный элемент справочника.
   Cyberhawk
 
19 - 11.05.18 - 17:51
(13) Так не сам по себе же. Ты его передаешь в параметре метода "Закрыть()"
   Fragster
 
20 - 11.05.18 - 17:52
В параметрах передать РежимВыбора Истина и владелец - тот элемент управления, куда надо вернуть значение
   Fragster
 
21 - 11.05.18 - 17:53
а в открываемой форме нового ничего не надо
   Birmingem
 
22 - 11.05.18 - 18:55
(19)Аха... Только я очень нескоро понял, что Закрыть() надо именно писать, а при интерактивном закрытии ничего не передается.
(20)Позже, для интереса, еще попытаюсь этот метод попробовать. С учетом замечаний в (14)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует