|   |   | 
| 
 | Как из формы док. открыть форму нового эл.спр. и после записи эл.спр. вернуть ссылку? | ☑ | ||
|---|---|---|---|---|
| 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) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |