Передать табличную часть на сервер. Управляемые формы.

1. TODD22 20 21.06.16 10:05 Сейчас в теме
Здравствуйте.

Как можно передать табличную часть с формы объекта на сервер. Процедура выполняется на клиенте. Есть документ. Но он в базу ещё не записан. До записи нужно получить табличную часть документа и отправить её на сервер для последующей обработки с возвращением результата.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. sssss_aaaaa_2011 21.06.16 10:13 Сейчас в теме
(1) TODD22, РеквизитФормыВЗначение()
6. herfis 515 21.06.16 10:19 Сейчас в теме
Тогда смотри (2) - на сервере конвертируешь в полноценную ТЧ, делаешь что надо, а потом обратно конвертируешь в данные формы.
3. spacecraft 21.06.16 10:16 Сейчас в теме
&НаКлиенте
Процедура ПередатьТЧ()
 ПередатьТЧСервер();
КонецПроцедуры


&НаСервере
Процедура ПередатьТЧСервер()
 ОбщийСерверныйМодуль.НужныйСерверныйМетод(ЭтотОбъект);
КонецПроцедуры
Показать
4. herfis 515 21.06.16 10:16 Сейчас в теме
Если мы в контексте этого самого документа, то в ПередЗаписьюНаСервере() в УФ уже доступен непосредственно объект и его полноценная табличная часть. Делай что хош.
ЗЫ. Упс. Был невнимателен.
5. TODD22 20 21.06.16 10:18 Сейчас в теме
Передал как параметр.

Результат = МояФункция(Объект.ТабличнаяЧасть);


не знаю только правильно ли так передавать.
7. herfis 515 21.06.16 10:20 Сейчас в теме
(5) TODD22, Правильно, если твоя функция будет работать именно с ДанныеФормаКоллекция.
8. caponid 21.06.16 10:21 Сейчас в теме
(5) TODD22, можно), только надо помнить что это не таблица значений, а данные формы - и работать с ними соответственно.
9. TODD22 20 21.06.16 10:59 Сейчас в теме
Что то не получается как я написал. Передаю значение в функцию... вроде нормально всё. Но при возвращении значения(значение типа булево). Пишет что "Нельзя изменять поле содержащее объект данных формы. Вроде в явном виде нигде ничего не меняю.... Только на стороне сервера в цикле обхожу табличную часть.
10. asved.ru 37 21.06.16 11:14 Сейчас в теме
Разберитесь, чем отличается &НаСервере и &НаСервереБезКонтекста, а также зачем в описании аргументов функции ставится префикс ЗНАЧ.

Либо используйте контекстный серверный вызов без аргументов, в этом случае содержимое табличной части будет доступно на сервере. Это наиболее тяжелый вариант, поскольку на сервер едет вся форма.
Либо сериализуйте и отправляйте табличную часть на сервер вручную во внеконтекстном вызове, например, в виде массива структур.
Либо (что правильнее всего) используйте платформенные события.

Ошибка "Нельзя изменять поле содержащее объект данных формы" происходит скорее всего из-за того, что Вы используете контекстный вызов, в котором передаете табличную часть по ссылке. Таким образом, у вас на сервер передается одна табличная часть в двух экземплярах, и вот тот экземпляр, который вы передали в качестве аргумента, меняется, а на клиенте после возврата обновлен быть не может.
За такой вызов следует гнать из профессии ссаными тряпками.
Mizhgan42; +1 Ответить
11. TODD22 20 21.06.16 11:21 Сейчас в теме
(10) asved.ru,
Разберитесь, чем отличается &НаСервере и &НаСервереБезКонтекста, а также зачем в описании аргументов функции ставится префикс ЗНАЧ.

Я в курсе чем они отличаются....
За такой вызов следует гнать из профессии ссаными тряпками.

Это ты самоутвердится написал?
user969609; titan84clc; AdmKmpt; user705393_den; ZDmitry83; slayer-ekb; IamGikk; +7 Ответить
17. asved.ru 37 21.06.16 22:44 Сейчас в теме
(11) TODD22,
Я в курсе чем они отличаются...

Судя по описанной ошибке, это не так.

Это ты самоутвердится написал?

Если когда-нибудь Вашей основной задачей станет разбор и коррекция кода, написанного коллегами, Вы еще не так выражаться будете. Причем в матюгальник.
12. mymyka 21.06.16 11:27 Сейчас в теме
не знаю только правильно ли так передавать.

так передавать нельзя, на что корректно указал asved.ru в (10).
Если вы делаете контекстный вызов сервера, табличная часть уже там доступна.
Передать в безконтекстный ДанныеФормыСтруктура нельзя. Ее перед этим необходимо сериализовать, но на клиенте родственная табличной части коллекция ТаблицаЗначений остутствует, следовательно необходимо колхозить массив структур. Или не париться и использоваться готовые события формы, а именно ПередЗаписьюНаСервере(), где без проблем совершается Отказ и откуда можно сообщить пользователю инфу через Новый СообщениеПользователю;
13. TODD22 20 21.06.16 11:55 Сейчас в теме
(12) mymyka, ПередЗаписьюНаСервере к сожалению то же не подходит.
В обработчике "ПередЗаписью" несколько вызовов клиентских процедур, в том числе открытие формы и работа с подключаемым оборудованием.
18. fggf 02.03.21 21:31 Сейчас в теме
(12)А вы пробовали передавать в безконтекстный метод ДанныеФормыКоллекция? Что будет при передаче?
14. herfis 515 21.06.16 12:31 Сейчас в теме
Таки (10) прав и причину хорошо расписал. Так не получится, я ошибся.
Можно на сервере (в контекстном серверном вызове) выгрузить табличную часть в таблицу значений, передать твоей функции параметром, а потом модифицированную таблицу значений загрузить обратно в табличную часть.
15. TODD22 20 21.06.16 12:34 Сейчас в теме
(14) herfis, пока решил тем что из клиентской процедуры вызываю серверную в том же модуле, там готовлю данные для передачи и затем уже вызываю функцию из общего модуля.
16. herfis 515 21.06.16 12:48 Сейчас в теме
(15) TODD22, Ну так я про тоже самое и написал. Только "подготовка данных" заключается в методе Выгрузить().
ЗЫ. Если решается задача глобальной модификации табличной части, то это как раз тот случай, когда использование контекстного серверного вызова полностью оправдано. Альтернативы с "упаковкой" данных клиента для неконтекстного вызова и загрузкой результата на клиенте еще менее оптимальны при большом количестве строк.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот