Здравствуйте.

Как передать данные между серверными процедурами формы? Скажем, по Кнопке1 вызывается одна серверная процедура, формирует какие-то данные, а потом по Кнопке2 мы хотим получить эти данные. Нет ничего проще, правда? - сохранили данные в каких-то реквизитах формы и все ок.

Пусть чуть сложней - данные несериализуемые при передаче с клиента на сервер и обратно. Да тоже фигня, скажете, кое-что можно завернуть в структуру и положить в ВХ.

Если и это не катит, то на помощь возвращаемые значения общих модулей.

И это тоже фигня - короткое время жизни + возможное исполнение в другом рабочем процессе с другим возвращаемым значением. В общем случае не работает.

Есть нетривиальное решение, позволяющее сохранять в промежутке между серверными вызовами формы значения, которые с клиента на сервер и обратно никак передать нельзя,

например, объект основного объекта формы. Один конкретный объект со всеми свойствами, а не его копию через РеквизитФормыВЗначение
Возможно, я изобретаю велосипед и все это давно известно. Если так, то напишите о возможном решении. Если нет, то продолжу чуть дальше.
---
попробуйте выгрузить СправочникОбъект в json или в xml. Можно выгрузить.
Сериализация это более расширенное понятие.
---
Если нет, то продолжу чуть дальше.Ну, рассказывай про своё сильно частное решение.

Когда будешь утверждать, что оно универсальное - не забудь, пожалуйста, про кластерную архитектуру 1С, когда следующий серверный вызов приходит на физически другой сервер. Ну и про то, что объект, он еще состоянием обладает - блокировками, выделенным номером/кодом и т.п..
---
Это не так. Серверный экземпляр формы хранится в рамках одного рабочего процесса. Мигрировать его платформа не умеет.
---
Мигрировать его платформа не умеет. Что такое "мигрировать форму", если речь идет о серверных вызовах?

Ты, в рамках своего "универсального решения" хочешь запретить неконтекстные серверные вызовы, что-ли? Причем не только из модуля формы, а например, вызов общего модуля с флагом "вызов сервера" из клиенского общего модуля, который сам вызвается из формы?
---
Вызов серверной процедуры формы всегда происходит в том же рабочем процессе, в котором была создана форма. Не может быть форма в одном рабочем процессе, а код серверной процедуры выполняться в другом - в другом нет контекста формы. А передавать автоматически в подобном случае контекст из одного процесса в другой платформа не умеет. Во всяком случае по моим наблюдениям.
---
Не может быть форма в одном рабочем процессе, а код серверной процедуры выполняться в другом - в другом нет контекста формы.Про вызов серверного модуля из клиентского-то расскажи. Какой там контекст какой формы.
---
Мы точно об одном и том же говорим? У меня ощущение, что нет. Я говорю, что при выполнении команды формы на клиенте код серверной процедуры формы, вызываемой из клиентской, всегда выполняется в том же рабочем процессе, в котором была создана форма. Если серверная процедура формы вызывает какие-то общие серверные модули, то она туда передает контекст формы в качестве параметра.
---
Если серверная процедура формы вызывает какие-то общие серверные модули, то она туда передает контекст формы в качестве параметраБраво.
---
Я, собственно, про то, что сама платформа автоматом не может передать контекст формы из одного рабочего процесса (в котором создана форма) в другой - если вдруг сервер решил, что в "родном" процессе серверная процедура формы не может быть вызвана.
Ты, видимо, про что-то другое.
---
Тут нет никакой проблемы. Создаете реквизит формы(если форма объекта и нужно хранить данные в объекте, то реквизит объекта). По первой кнопке заполняете этот реквизит, по второй кнопке получаете данные из реквизита.
---
объект основного объекта формы Прикладной объект сериализуется. Можно еще пример?
---
Сериализуются данные формы. Сам объект, полученный через РеквизитФормыВЗначение("Объект"), где Объект, например, элемент справочника - не сериализуется.
---
где Объект, например, элемент справочника - не сериализуется. Ну вот же (из справки к ДокументОбъект).
---
Ну вот жеИ значения экспортных переменных тоже восстанавливаются, ага-ага.
---
Конечно нет, об этом и речь. Данные объекта и сам объект как некоторая область памяти в рабочем процессе сервера - это разные вещи. Сам объект не сериализуется. В этом нетрудно убедиться, создав реквизит формы произвольного типа и выполнить Реквизит = РеквизитФормыВЗначение("Объект"). Будет ошибка в духе "отсутствует отображение бла-бла-бла или как-то так". Но тем не менее именно сам объект можно хранить в форме и получать в разных серверных процедурах. Включая его экспортные переменные (которые тоже могут быть несериализуемыми)
---
Мне кажется, вы путаете возможность сериализации и миграции клиент-сервер. ТаблицаЗначений тоже не сериализуется, по-вашему?
---
))
Это ровно одно и то же. Передача данных с клиента на сервер и обратно происходит путем сериализации.
ТЗ конечно сериализуется, странный вопрос.
---
попробуйте вернуть ТЗ на клиент.
То что зеленый это цвет, не означает, что цвет это зеленый.
---
Объект типа ТаблицаЗначений не может существовать на клиенте. К чему говорить об очевидных вещах
---
Объект типа ТаблицаЗначений не может существовать на клиенте. К чему говорить об очевидных вещах
Сравните свои высказывания:

(12) Сам объект не сериализуется. В этом нетрудно убедиться, создав реквизит формы произвольного типа и выполнить Реквизит = РеквизитФормыВЗначение("Объект").

Путаете понятия.
Объект (СправочникОбъект) не может существовать на клиенте, но сериализуется.
---
СправочникОбъект не сериализуется. Сериализуются данные формы, содержащие реквизиты объекта. СП тут просто врет или просто путает понятия. Объект в памяти сервера со всеми реквизитами и экспортными переменными не может сериализоваться в рамках текущих реализаций платформы..
---
попробуйте выгрузить СправочникОбъект в json или в xml. Можно выгрузить.
Сериализация это более расширенное понятие.
---
Ок. Давай я в экспортную переменную объекта справочника засуну COM-соединение. Что будет в джейсоне? )) Там даже самой переменной не будет
---
разве для COMОбъект в СП указано, что он может сериализоваться?
---
Тут дело не в COM. А в том, что сериализуются в данном случае реквизиты объекта. Не сам объект целиком. Экспортные переменные мимо. Неважно, сериализуемые они или нет
---
Я говорю про то, что есть механизм, позволяющий создать в одной серверной процедуре формы, например, СправочникОбъект, присвоить, к примеру, его экспортируемой переменной значение типа COM-соединенение и вернуть управление на клиент. Потом в другой серверной процедуре получить значение типа СправочникОбъект со всеми установленными ранее экспортными переменными (почти любого типа, тип ФормаКлиентскогоПриложения не поддерживается, например). Стандартно это никак не сделать
---
Это существенная разница. В случае РеквизитФормыВЗначение("Объект") мы работаем с разными экземплярами объекта. В моем решении экземпляр один
---
Но тем не менее именно сам объект можно хранить в форме и получать в разных серверных процедурах.
И это используется в некоторых типовых. В ERP точно это есть.
---
Конкретный экземпляр объекта, с его экспортными переменными и пр.? Любопытно. Ткни носом в код ERP, плиз, если будет возможность.
Просто, быть может, речь о разных вещах. РекизитФормыВЗначение("Объект") каждый раз - это разные объекты (КО).
---
с его экспортными переменными
В 2 этапа делается:
Когда закончил работу с объектом, то
1) Функцией формируешь структуру с нужными ключами - именами переменных и заполняешь их нужными значениями - теми переменными объекта, которые надо сохранить между вызовами.
Помещаешь структуру во временное хранилище. Адрес структуры хранится в реквизитах формы.
2) СправочникОбъект или ДокументОбъект преобразуешь в реквизит формы - ЗначениеВРеквизитФормы()
Когда надо снова взаимодействовать с объектом:
1) Реквизит формы преобразуем в значение - РеквизитФормыВЗначение()
2) Заполняем экспортные переменные объекта, которые мы сохранили во временном хранилище.

Если надо заполнять/сохранять не экспортные переменные, то нужно предусмотреть у объекта в модуле функции для их получения/установки.

Такое например, в БГУ2 используется.
---
Речь о функциональности платформы, а мне тут про функциональность прикладного решения.
Понятно, что (почти) все нужное из любого объекта можно тем или иным способом передать.
---
Я описал способ, как можно сохранить доп. данные объекта между серверными вызовами.
Вам шашечки или ехать?
---
вот для примера
---
О господи. Реально по стрелочке это ДанныеФормыСтруктураСКоллекцией
---
Или ДанныеФормыСтруктура
---
да, это ДанныеФормыСтруктура, которая через сериализацию может обмениваться со СправочникОбъект. Кстати, вот наглядный пример, что СправочникОбъект поддерживает сериализацию.
---
Сериализуются данные формыНе так.

Сериализуются значения реквизитов объектов. Полученный результат может быть записан в данные формы, хмл, джсон и прочие фастинфосеты. Внутренее состояние объекта не сериализуется.
---
забыл про самый очевидный метод
ты работаешь в базе данных
если тебе надо сохранить данные - сохрани в БД
---
Думаю. просто нужно признать, что решения, которое удовлетворит автора, платформа 1С дать не может.
Я с подобной задачей столкнулся только когда очень хотелось сохранить временную таблицу между вызовами.
Можно помечтать на тему служебного сеанса фонового задания, которое будет постоянно висеть в системе и как-то перехватывать сообщения из родительского сеанса. Тогда в теории будет единое серверное пространство выполнения, позволяющее что-то "по-честному" хранить между серверными вызовами.
---
в теории будет единое серверное пространство выполненияНе будет.

У тебя просто один объект будет очень долго жить в одной переменной. Чтобы достучатся к нему из других сеансов (а фоновое задание - это отдельный сеанс) нужна будет сериализация. И начинай все сначала.
---
А зачем его тащить в другие сеансы? В этой парадигме с объектом работаем только в одном сеансе. Извне получаем только указания и параметры, что с ним делать. Повторюсь, это на уровне фантазии.
---
Да, тут ты прав. Можно сделать программную обвязку и таскать через границу сеанса только сериализуемые типы. А сам объект будет тихо тухнуть в одном из сеансов.
---
Предлагаю описание рабочего решения всего за 50к. )) Если есть сомнения в рабочести решения, то пусть кто-нибудь с инфостарта выступит арбитром. Я не продаю нерабочее гавно, если что
---
пусть кто-нибудь с инфостарта выступит арбитромИз поколения ЕГЭ, без понимания базовых вещей?
---
Мда. Зашел на инфостарт, думая, что здесь тусят реальные профессионалы. Разочарован - стойкое ощущение, что здесь поколение ЕГЭ, без понимания базовых вещей. Больше не буду.
---
думая, чтоБоженьки, мы не увидим очередного Гениального Нетривиального Универсального Решения. Как теперь жить?
---
Не увидите, но купить можете