![]() |
![]() |
![]() |
|
Управляемые формы. Как передать основной реквизит в другую форму? | ☑ | ||
---|---|---|---|---|
0
СЕсин
07.12.11
✎
13:41
|
Всем привет. Осваиваю управляемые формы. У документа две формы. Из первой нужно открыть вторую (там редактируется скрытая табличная часть). Как это лучше сделать? Через временное хранилище передавать "объект" или как-то через параметры формы? Я понимаю, вопрос элементарный, но я что-то не могу понять как сделать.
|
|||
1
СЕсин
07.12.11
✎
13:42
|
Т.е. проблема в том, что открывается форма, никак не связанная с первой.
|
|||
2
Escander
07.12.11
✎
13:43
|
а может лучше на 1 форме сделать 2 закладки и рулить программно их видимостью?
|
|||
3
Serg_1960
07.12.11
✎
13:49
|
ОткрытьФорму(<ИмяФормы>, <Параметры>...
<Параметры> (необязательный) Тип: Структура. Параметры формы. Ключ структуры - имя параметра, а значение - значение параметра формы. Имя элемента должно совпадать с именем параметра структуры. Источник: синтакс-помощник :) |
|||
4
Serg_1960
07.12.11
✎
14:06
|
Глянь топик 24 в сообщении v8: v8.2 - Передача значений в другую форму ... впрочем и само обсуждение - тоже глянь :)
|
|||
5
СЕсин
07.12.11
✎
14:11
|
(3) Как передавать параметры я знаю. Ты как предлагаешь? Так:
ПараметрыФормы = Новый Структура("Объект", Объект); ОткрытьФормуМодально("Документ._ЗапросПокупателя.Форма.УправляемаяПодборПантонов", ПараметрыФормы); Ну допустим. В открывающейся форме этот параметр будет доступен при создании на сервере через Параметры.ИмяПараметра? Во-первых мне в открывающейся форме нужно завести параметр. С каким типом? ДанныеФормыСтруктура? Этого сделать, как ты понимаешь, нельзя. Да и вообще задача не параметр в форму передать(!), а сделать так, чтобы в подчиненной форме можно было продолжить редактирование текущего открытого документа, а потом закрыть форму и продолжить работу в основной. |
|||
6
СЕсин
07.12.11
✎
14:13
|
Здесь как-то надо в прикладной тип перевести данные формы, передать их в другую форму и там из прикладного типа снова сделать "данные формы структура".
|
|||
7
Serg_1960
07.12.11
✎
14:19
|
Упс, я пас. "Что сделать" и "Как сделать" - это несколько разные вопросы. Я могу сказать как бы я это сделал: если очень хочется табличную часть редактировать в отдельной форме - то я бы использовал внешнюю обработку табличной части. А то, что вы предлагаете... эээ... как бы помягче сказать... не очень :(
|
|||
8
Escander
07.12.11
✎
14:23
|
(6) всё-же почему не 1 форма с группой страницы у которой 2 группы типа страница. Переключая видимость групп типа страница получите совсем разного наполнения формы... или вам обязательно в 2 разных окнах?
|
|||
9
СЕсин
07.12.11
✎
14:26
|
Да ситуация тривиальнее некуда. Вот в обычных формах как было. Можно было присобачить к документу несколько форм, установить им основной реквизит и разместить хоть каждый реквизит на отдельной форме. Потом в какой бы ты форме не работал - ты работаешь с прикладным объектом "документ объект", будь то новый или существующий. Даже программировать ничего не надо, просто формы открывать. Вот надо то же, но на управляемых реализовать.
А не (1) потому, что интерфейс не позволяет этого сделать. И вообще я переделываю то, что было в обычных формах реализовано на управляемые. И не думал, что такие сложности будут. А там сделано именно так. Не хочется пользователям объяснять "извините, я не знаю как сделать, поэтому у вас теперь будет не кнопка, а закладка". Ну не айс короче. |
|||
10
Escander
07.12.11
✎
14:38
|
(9)так делай видимой в 1 момент времени только 1 закладку и типа так и было!
|
|||
11
СЕсин
07.12.11
✎
16:25
|
В общем, получилось. Уж не знаю на сколько красиво или коряво. Если кто знает как решить именно эту задачу (а не сделать по-другому) красивее, подскажите пожалуйста.
Модуль основной формы: &НаКлиенте Процедура ПантоныЛица(Команда) АдресХранилища = ПоместитьДанныеФормыВХранилище(); ПараметрыФормы = Новый Структура("Адрес,Ключ", АдресХранилища, Объект.Ссылка); ЭтаФорма.Модифицированность = ОткрытьФормуМодально("Документ._ЗапросПокупателя.Форма.УправляемаяПодборПантонов", ПараметрыФормы); ПолучитьОбъектИзХранилища(АдресХранилища); КонецПроцедуры &НаСервере Процедура ПолучитьОбъектИзХранилища(АдресВозврата) ДокументОбъект = ПолучитьИзВременногоХранилища(АдресВозврата); ЗначениеВДанныеФормы(ДокументОбъект, Объект); КонецПроцедуры &НаСервере Функция ПоместитьДанныеФормыВХранилище() ДокументОбъект = ДанныеФормыВЗначение(Объект, Тип("ДокументОбъект._ЗапросПокупателя")); Возврат ПоместитьВоВременноеХранилище(ДокументОбъект, УникальныйИдентификатор); КонецФункции Модуль вспомогательной формы: &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ДокументОбъект = ПолучитьИзВременногоХранилища(Параметры.Адрес); ЗначениеВДанныеФормы(ДокументОбъект, Объект); КонецПроцедуры &НаСервере Процедура ПоместитьДанныеФормыВХранилище() ДокументОбъект = ДанныеФормыВЗначение(Объект, Тип("ДокументОбъект._ЗапросПокупателя")); ПоместитьВоВременноеХранилище(ДокументОбъект, Параметры.Адрес); КонецПроцедуры &НаКлиенте Процедура ЗакрытьФорму(Команда) ПоместитьДанныеФормыВХранилище(); ФлагМодифицированности = ЭтаФорма.Модифицированность; ЭтаФорма.Модифицированность = Ложь; ЭтаФорма.Закрыть(ФлагМодифицированности); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |