|
V8: Заполнение новой формы НаКлиенте | ☑ | ||
---|---|---|---|---|
0
790th
12.06.12
✎
22:20
|
Задача: из формы А создать документ, добавить и заполнить ему первую строку ТЧ, показать эту форму Б пользователю, предоставив возможность менять новый незаписанный документ.
&НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) НоваяФорма = ПолучитьФорму("Документ.Операция.ФормаОбъекта"); РеквизитыДок = Новый СписокЗначений; СоздатьОперацию(РеквизитыДок); НоваяФорма.Объект.ВидУчета = РеквизитыДок[0]; НоваяФорма.Открыть(); КонецПроцедуры &НаСервере Процедура СоздатьОперацию(РеквизитыДок) Экспорт РеквизитыДок.Добавить("ВидУчета",Перечисления.ВидыУчета.Фактический); КонецПроцедуры В этом примере меняю только реквизит документа (и он конечно не меняется) Проблема еще в том что объект не доступен на клиенте, а форму нельзя передать насервер, т.к. мутабельный тип, при этом Процедура ЗначениеВРеквизитФормы работает только НаСервере. Похоже у меня неправильный подход к управляемому приложению, подскажите как это реализовать правильно, как надо ? |
|||
1
790th
13.06.12
✎
10:03
|
ап
|
|||
2
hhhh
13.06.12
✎
10:23
|
мутабельный - это в 8.1 вы наверно прочитали. Всё там можно передать.
|
|||
3
hhhh
13.06.12
✎
10:25
|
(1) у формы есть событие ПриСозданииНаСервере
|
|||
4
Азазелло
13.06.12
✎
11:30
|
В 8.2 подход по работе с формами больше похож на 7.7.
Вызываешь метод ОткрытьФорму, ему во втором параметре передаешь Структуру, которую отрабатываешь либо в ОбработкеЗаполнения документа, либо в ПриСозданииНаСервере |
|||
5
790th
13.06.12
✎
11:45
|
Можно ли в этой структуре описать заполнение строки табличной части документа ?
|
|||
6
790th
13.06.12
✎
11:47
|
(5) понял что можно ) вечером буду пробовать
|
|||
7
790th
13.06.12
✎
22:01
|
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) ПараметрыЗаполнения = Новый Структура("ВидУчета",РеквизитыДок[0]); НоваяФорма = ПолучитьФорму("Документ.Операция.ФормаОбъекта",ПараметрыЗаполнения); НоваяФорма.Открыть(); КонецПроцедуры Форма: &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Сообщить(Параметры.ВидУчета); КонецПроцедуры При условии например, Если РеквизитыДок[0]=4 то все работает великолепно. Но Если РеквизитыДок[0]=Перечисления.ВидыУчета.Фактический тогда ругается: {Отчет.ПланФактныйАнализ.Форма.ФормаОтчета.Форма(17)}: Ошибка при вызове метода контекста (ПолучитьФорму) НоваяФорма = ПолучитьФорму("Документ.Операция.ФормаОбъекта",ПараметрыЗаполнения); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'val': форма: Элемент имя: {http://v8.1c.ru/8.2/mngsrv/ws}val по причине: Ошибка отображения типов: Отсутствует отображение для типа 'ЭлементСпискаЗначений' Можно конечно передать строковое имя элемента, или его код, но это же будет убожество )) Как передать ссылку в параметре на сервер ? через хранилище значений (попробую) ? |
|||
8
790th
13.06.12
✎
22:13
|
Сработало !
Криво конечно, но хоть так... Форма А: &НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; КоллекцияРасшифровки = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); КоллекцияПолей = КоллекцияРасшифровки.Элементы.Получить(Расшифровка).ПолучитьПоля(); Если КоллекцияПолей.Найти("Сумма")<>Неопределено И КоллекцияПолей.Найти("Период")<>Неопределено И КоллекцияПолей.Найти("Субконто")<>Неопределено Тогда РеквизитыДок = Новый СписокЗначений; СоздатьОперацию(КоллекцияПолей[0].Значение,КоллекцияПолей[1].Значение,КоллекцияПолей[2].Значение,РеквизитыДок); ХЗ = Новый ХранилищеЗначения(РеквизитыДок[0]); ПараметрыЗаполнения = Новый Структура("ВидУчета",ХЗ); НоваяФорма = ПолучитьФорму("Документ.Операция.ФормаОбъекта",ПараметрыЗаполнения); НоваяФорма.Открыть(); ИначеЕсли КоллекцияПолей.Найти("Период")<>Неопределено Тогда НоваяФорма = ПолучитьФорму("Отчет.ПланФактныйАнализ.Форма.ФормаФактическихТранзакций"); НоваяФорма.ПериодОтчета = КоллекцияПолей[0].Значение; НоваяФорма.Открыть(); КонецЕсли; КонецПроцедуры Форма Б: &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Сообщить(Параметры.ВидУчета.Получить()); КонецПроцедуры Всем спасибо ! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |