Вход | Регистрация



Передать структуру с сервера на клиент

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

Пример:

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

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

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

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

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

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

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

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

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

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

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

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

//Далее серверная процедура 

ПолучитьТабличнуюЧасть();

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


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

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

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


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


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

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

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


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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует