Имя: Пароль:
1C
 
Открытие формы созданного документа
0 cmax-info
 
23.11.09
18:21
В обработке создаю документ после некоторого ряда действий и заполняю его. Хочу открыть его форму, но не записывая перед этим! Как это сделать.

&НаКлиенте
Процедура СписокОбъектовВыбор(Элемент, Область, СтандартнаяОбработка)
   ОформитьЗаявку(Область.Расшифровка);
КонецПроцедуры

&НаСервере
Процедура ОформитьЗаявку(Объект)
   
   НовыйДок = Документы.Заявка.СоздатьДокумент();
   НовыйДок.Заполнить(Объект);
   
КонецПроцедуры
1 программистище
 
23.11.09
18:33
передать объект(данные формы или объект через временное хранилище) в форму и в форме создать обработку заполнения (например данные в реквизит)
а после уже открывать
2 cmax-info
 
23.11.09
18:46
(1) - Добавил реквизит на форме: Заявка (тип ДокументОбъект.Заявка)

Делаю так:
&НаКлиенте
Процедура СписокОбъектовВыбор(Элемент, Область, СтандартнаяОбработка)
   НоваяЗаявка = ОформитьЗаявку(Область.Расшифровка);
...
КонецПроцедуры

&НаСервере
Процедура ОформитьЗаявку(Объект)
   
   НовыйДок = Документы.Заявка.СоздатьДокумент();
   НовыйДок.Заполнить(Объект);
   Возврат НовыйДок;

КонецПроцедуры

Ошибка:

Ошибка при вызове метода контекста (ОформитьЗаявку)
   НоваяЗаявка = ОформитьЗаявку(Область.Расшифровка);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
...
3 detec
 
23.11.09
18:57
Тоже пытался под 8.2 открывать форму незаписанного нового объекта. У меня ничего не получилось. По большому счёту, это противоречит идеологии 8.2.

Хотя примерно тот же код в 8.1 работал на ура.
4 программистище
 
23.11.09
19:02
(1)не не так понял
в своей процедуре где создаешь пишешь
поместить во временное хранилище
именно созданный незаписанный объеект
ссылку на него пихаешь в параметр процедуры получить форму
в отрываемой форме делаешь процедурув которой получаешь параметр
и пихаешь егов реквизит формы объект
и открываешь форму
5 программистище
 
23.11.09
19:08
Там где создаю объект:
&НаКлиенте
Процедура СформироватьОтчетККМ(Команда)
   Открывать = Ложь;
   ОтчетыККМСформироватьОтчетККМ(Открывать);
   Для Каждого ЭлементСписка Из ОтчетККМДокументСписок Цикл
       Если Открывать Тогда
           ПолучитьФорму("Документ.ОтчетККМ.Форма.ФормаДокументаУпр", Новый Структура("ОткрываетсяИзОтчетыПоЦФОПоДням, Объект", Истина, ЭлементСписка.Значение), ЭтаФорма, Истина).Открыть();
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры

&НаСервере
Процедура ОтчетыККМСформироватьОтчетККМ(Открывать)
   СписокККМ = ПолучитьСписокЗначенийККМПоЦФО(Объект.ЦФО);
   Для каждого эл Из СписокККМ Цикл
       новОтчетККМ = Документы.ОтчетККМ.СоздатьДокумент();
       новОтчетККМ.Дата = Объект.Дата;
       новОтчетККМ.ККМ = эл.Значение;

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

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

вот типа такого!
6 программистище
 
23.11.09
19:25
хотя можно и не через параметр а через реквизит формы:

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


где ЭлементСписка.Значение = адрес во временном хранилище на объект который еще не сохранен
далее смотри выше
7 программистище
 
23.11.09
19:29
хотя (6) не будет работать в ПриСозданииНаСервере а в при открытии
8 ramir
 
23.11.09
20:22
Форма = Документы.Заявка.ПолучитьФормуНовогоДокумента();

... //заполняем форму

Форма.ОткрытьМодально();
Если Форма.Объект.Ссылка <> Документы.Заявка.ПустаяСсылка() Тогда
    Заявка = Форма.Объект.Ссылка;
КонецЕсли;
9 GROOVY
 
модератор
23.11.09
20:33
Используйте ОбработкуЗаполнения для приема параметров и "ОткрытьФорму" для передачи.
10 cmax-info
 
23.11.09
23:57
спасибо всем за помощь!
11 cmax-info
 
24.11.09
12:43
(8) - так не получится.
Форма = Документы.Заявка.ПолучитьФормуНовогоДокумента();
Документы.Заявка - недоступно на клиенте, а
Форма - на серевере.
12 cmax-info
 
24.11.09
12:46
(9) - не понял как это использовать.
13 ramir
 
24.11.09
13:13
Тебе по-любому нужно использовать толстый клиент, Документы в нем доступно.
14 cmax-info
 
24.11.09
13:16
(4)-(7) СПАСИБО ОГРОМНОЕ!!
Позволю себе подвести итог.

Еденственно вариант, который у меня заработал:

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

КонецПроцедуры

&НаСервере
Функция ОформитьЗаявку(Объект)
   
   НовыйДок = Документы.Заявка.СоздатьДокумент();
   НовыйДок.Заполнить(Объект);

   Адрес = ПоместитьВоВременноеХранилище(НовыйДок, Новый УникальныйИдентификатор);
                 
   Возврат Адрес;
   
КонецФункции

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

КонецПроцедуры