Имя: Пароль:
1C
 
Передать структуру с сервера на клиент
,
0 Pro1001C
 
09.04.18
16:57
Хочу сделать обработку, которая будет заполнять данными документ и открывать форму нового не записанного документа. Для этого планирую использовать конструкцию с ОткрытьФорму

Пример:

ПараметрыФормы= Новый Структура;
ПараметрыФормы.Вставить("Дата",ТекущаяДата());

ОткрытьФорму("Документ.МойДокумент.ФормаОбъекта", ПараметрыФормы);

Соответственно в модуле документа "МойДокумент" есть процедура ОбработкаЗаполнения которая подхватит дальнейшую обработку и заполнение документа.

Вопрос собственно в том, как подготовить структуру ПараметрыФормы. Вернее я ее подготовил, но как ее теперь с сервера передать на клиент?
Или как то по другому нужно действовать в поставленной задаче?
1 Pro1001C
 
09.04.18
17:01
Т.е. мне в структуру нужно запихать разные данные с разных мест. Это реквизиты документа и табличные части для нового документа
2 _Дайвер_
 
09.04.18
17:03
3 Pro1001C
 
09.04.18
17:07
(2) это понятно, конструкция заполнения формы нового документа и меня есть. Я не знаю как структуру, собранную на сервере, передать на клиент, чтобы воспользоваться

ОткрытьФорму("Документ.МойДокумент.ФормаОбъекта", ПараметрыФормы);

У меня нет возможности на клиенте собрать структуру ПараметрыФормы
4 dezss
 
09.04.18
17:09
(3)
&НаСервереБезКонтекста
Функция МояФункция(МоиПараметры)
    ВозвращаемаяСтруктура = Новый Структура;
    ......
    Возврат ВозвращаемаяСтруктура;
КонецФункции
5 _Дайвер_
 
09.04.18
17:12
(3) В твоем случае можно использовать хранилище
6 _Дайвер_
 
09.04.18
17:15
(0) В месте откуда получаешь Структуру
АдресХранилища = ПоместитьВоВременноеХранилище(ТвояСтруктура);

А между в параметрах формы передаешь адрес хранилища

В месте где она тебе нужна:
ТвояСтруктура = ПолучитьИзВременногоХранилища(АдресХранилища);
7 Pro1001C
 
09.04.18
17:16
(4) так попробовал, выдает

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
8 Pro1001C
 
09.04.18
17:17
(6) на сервере помещаю в хранилище, а на клиенте вызываю из хранилища?
9 _Дайвер_
 
09.04.18
17:18
(7) Потому что мутабельные значения передаются, делай как я написал, и все будет чики пуки (8) да
10 _Дайвер_
 
09.04.18
17:18
(8) Только на клиенте она не вызовется, на сервере получай
11 Cyberhawk
 
09.04.18
17:19
Покажи код с ошибкой, пади реквизиты формы передаешь туда-сюда
12 Rovan
 
гуру
09.04.18
17:20
тФорма = ПолучитьФорму("Документ.МойДокумент.ФормаОбъекта"); тФорма.ЗаполнитьПоСтруктуре(ПараметрыФормы);
тФорма.Открыть();
13 _Дайвер_
 
09.04.18
17:21
(8) ПриСозданииНаСервере новой твоей не записанной формы документа (11) Там мутабельные значения, это нормально что он ошибку ловит, он же структуру передает
14 _Дайвер_
 
09.04.18
17:22
(11) Всмысле ссылочные данные
15 Cyberhawk
 
09.04.18
17:26
(14) Ссылки не являются мутабельными и отлично гуляют туда-сюда.
А (12) - завязывай уже быдлокодить )
16 dezss
 
09.04.18
17:28
(7) э...а что ж ты пихаешь в эту структуру?
пихай простые значения, никаких мутабельных, ТЗ и прочего, что живет только на сервере....
17 _Дайвер_
 
09.04.18
17:31
(15) Я имел ввиду структура его имеет ссылки на мутабельные значения
18 Pro1001C
 
09.04.18
18:14
Что-то не выходит у меня каменный цветок.
Я в структуру хочу запихать результат запроса для формирования табличной части документа.

Попробовал так:

&НаКлиенте
ПараметрыФормы = Новый Структура;
        ПараметрыФормы.Вставить("Дата", ТекущаяДата());

        Объект.АдресХранилища=ПоместитьВоВременноеХранилище(ПараметрыФормы);

//Далее серверная процедура
ПолучитьТабличнуюЧасть();

ПараметрыФормы=ПолучитьИзВременногоХранилища(Объект.АдресХранилища);
        ОткрытьФорму("Документ.МойДокумент.ФормаОбъекта", ПараметрыФормы);


&НаСервере
Процедура ПолучитьТабличнуюЧасть()

ПараметрыФормы=ПолучитьИзВременногоХранилища(Объект.АдресХранилища);

ПараметрыФормы.Вставить("Товары",Результат.Выгрузить());
        Объект.АдресХранилища=ПоместитьВоВременноеХранилище(ПараметрыФормы);


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


Видно проблема в табличной части. Но у меня вся фишка в табличной части, по ней идет заполнение в новом документе
19 Pro1001C
 
09.04.18
18:17
похоже все банально спустилось к передачи ТЗ с сервера на клиент
20 lodger
 
09.04.18
18:20
(19) у вас архитектура процесса неправильно построена.
21 Pro1001C
 
09.04.18
18:23
(20) возможно. Мне всего то нужно отработать следующую конструкцию:

ПараметрыФормы= Новый Структура;
ПараметрыФормы.Вставить("Дата",ТекущаяДата());
//тут в структуру запихать разные реквизиты и табличные части для заполнения документа МойДокумент
ОткрытьФорму("Документ.МойДокумент.ФормаОбъекта", ПараметрыФормы);


Но чтобы в структуру запихать, нужно на сервер идти и получать все необходимые данные для этой структуры. Как только в структуру все запихал и отправил, то все нормально, создается форма нового документа с нужным заполнением.
22 Tateossian
 
09.04.18
18:24
Разложи в структуру со структурами из примитивов.
23 Cyberhawk
 
10.04.18
08:31
(17) А, "ссылки" на объекты в памяти что ли? Такие "высокие" разговоры в кругу 1Сников не приживаются ) На самом деле хз что у него там в этой структуре, смотреть надо. Может и без мутабельных обойтись можно.
24 Cyberhawk
 
10.04.18
08:32
Зачем результат запроса помещать, когда можно текст запроса и его параметры передать и уже выполнить где надо?
25 Cyberhawk
 
10.04.18
08:37
Модуль формы или модуль объекта открываемого документа изменять нельзя, видимо?
26 Cyberhawk
 
10.04.18
08:40
Ну тогда можно извратиться через ПолучитьФорму на клиенте, затем получение объекта этой формы на клиенте как ДФС, передача этого объекта на сервер, там ДФС преобразуешь в ДокументОбъект, заполняешь его ТЧ, потом обратно ЗначениевДанныеФормы, возвращаешь на клиент ДФС, затем КопироватьДанныеФормы на клиенте в объект полученной ранее формы. Затем открываешь форму. Профит.
27 Evgenchik
 
10.04.18
08:48
На клиенте не нужно получать из хранилища.
Ушел на сервер, собрал все данные, положил в хранилище, получил адрес хранилища. Адрес передал на клиент. Адрес передал в обработку заполнения.
В обработке заполнения на сервере уже получаешь из хранилища и далее заполняешь.