Имя: Пароль:
1C
1С v8
Управляемые формы. Как передать основной реквизит в другую форму?
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
В общем, получилось. Уж не знаю на сколько красиво или коряво. Если кто знает как решить именно эту задачу (а не сделать по-другому) красивее, подскажите пожалуйста.

Модуль основной формы:

&НаКлиенте
Процедура ПантоныЛица(Команда)
   
   АдресХранилища = ПоместитьДанныеФормыВХранилище();

   ПараметрыФормы = Новый Структура("Адрес,Ключ", АдресХранилища, Объект.Ссылка);

   ЭтаФорма.Модифицированность = ОткрытьФормуМодально("Документ._ЗапросПокупателя.Форма.УправляемаяПодборПантонов", ПараметрыФормы);    
   
   ПолучитьОбъектИзХранилища(АдресХранилища);
   
КонецПроцедуры

&НаСервере
Процедура ПолучитьОбъектИзХранилища(АдресВозврата)
   
   ДокументОбъект = ПолучитьИзВременногоХранилища(АдресВозврата);    
   ЗначениеВДанныеФормы(ДокументОбъект, Объект);    
   
КонецПроцедуры

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


Модуль вспомогательной формы:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   
   ДокументОбъект = ПолучитьИзВременногоХранилища(Параметры.Адрес);
   
   ЗначениеВДанныеФормы(ДокументОбъект, Объект);
   
КонецПроцедуры

&НаСервере
Процедура ПоместитьДанныеФормыВХранилище()
   
   ДокументОбъект = ДанныеФормыВЗначение(Объект, Тип("ДокументОбъект._ЗапросПокупателя"));
   ПоместитьВоВременноеХранилище(ДокументОбъект, Параметры.Адрес);
       
КонецПроцедуры

&НаКлиенте
Процедура ЗакрытьФорму(Команда)
   
   ПоместитьДанныеФормыВХранилище();
   ФлагМодифицированности = ЭтаФорма.Модифицированность;
   ЭтаФорма.Модифицированность = Ложь;
   ЭтаФорма.Закрыть(ФлагМодифицированности);
   
КонецПроцедуры