Добрый день! Решил вынести часть процедур в отдельный модуль и что-то не могу сообразить как параметром передать туда таблицу объекта, который является реквизитом формы и все это на клиенте?
Попытался просто гсм_ОбщегоНазначенияСервер.Функция1(Объект.Товары)
Выдает такую вот ошибку:
Нельзя изменять поле, содержащее объект данных формы
Тоже не понятно. Я же ничего не изменяю, просто передаю.
Но нужно понимать, что будет передана не табличная часть, а ДанныеФормыКоллекция.
Если нужна именно табличная часть,тогда нужно использовать РеквизитФормыВЗначение. А после изменения обратное преобразование ЗначениеВРеквизитФормы.
(1) Ругается потому, что вы передаете объект а не его значение.
Попробуйте в общем модуле прописать функцию так
Функция Функция1(ЗНАЧ Параметр1) Экспорт
Использовать Функцию ДанныеФормыВЗначение(<Объект>, <Тип>) .
Если нужно передать данные отдельного реквизита формы, то для этого есть
РеквизитФормыВЗначение(<ИмяРеквизита>, <Тип>)
Процедура или функция с указанным именем не определена (ДанныеФормыВЗначение)
Прочитал статью. Написано что она может выполняться на сервере без контекста. Хотя в синтаксис помощнике написано что данная процедура доступна на тонком клиенте. Не понятно. С Клиента можно как то сразу передать на сервер без дополнительного вызова серверных методов. А то так смысл теряется в вытаскивании процедур в отдельный модуль, а на их месте надо еще по процедуре создать которая вызовет эту процедуру.
(4) Насколько я понимаю, т.к. "Объект.Товары" - часть контекста формы, то и работать с ним напрямую можно только не выходя из контекста формы.
Если хочешь прямо с клиента его засунуть на сервер и загрузить потом результат обработки одной командой, то единственное что приходит в голову - попробовать извратиться через клиентский общий модуль (работа с которым, по идее, должна проходить без потери контекста формы). Дело осложняется тем, что ТЗ на клиенте нет. Т.е. вырисовывается такая хрень:
1) передавать Объект.Товары в клиентский общий модуль
2) в нем обходом перепаковывать данные оттуда в массив структур, структуру массивов или что тебе удобнее для эмуляции ТЗ
3) передавать эту хрень в общий модуль с вызовом сервера
4) там делать с ней чего надо (можно через временное преобразование в ТЗ)
5) результат возвращать в клиентский общий модуль опять же в эмулированной ТЗ
6) в клиентском общем модуле обходом перезаполнять "Объект.Товары" данными из эмулированной ТЗ
Обычно никто этим не парится и тратится на контекстный серверный вызов в форме, из которого уже делай что хочешь. Пусть это иногда выглядит лишним телодвижением, зато эффективнее и проще с точки зрения обмена данными между клиентом и сервером.