Возникла такая задачка - перенести выполнение функции на сервер, но эта функция в исходном варианте сидела в общем модуле, который был серверным и клиентским одновременно. При запуске исходной функции из серверного куска кода все срабатывает как надо, а при запуске из клиенткого приложения - ошибка "Попытка передачи с клиента на сервер мутабельного значения".
СПРАВКА:
Мутабельный тип (англ. Mutable type) - сложный тип данных в объектно-ориентированном программировании, значения которого (как правило - объекты) после своего создания допускают изменение своих свойств.
1С: Подробнее о типах данных 1С:Предприятие: http://v8.1c.ru/overview/CommonCommTypes.htm
1С: XML-сериализация, механизм (XML Serialization, Mechanism): http://v8.1c.ru/overview/Term_000000318.htm
tanka495: Клиент- серверные вызовы: //infostart.ru/public/86838/
Допустим, в нашем случае имеется проблема - нужно передать структуру. Структура эта изменяется функцией, в которую передается как параметр, плюс ко всему, 1С считает этот тип мутабельным по определению. И, чтобы уж совсем соответствовать реальной задаче, передаваемая структура, после изменения в функции, приобретает гигантский размер, т.к. в своем составе содержит поле, в которое помещается колоссальный результат запроса.
Решаем эту проблему через помещение структуры во временное хранилище.
Конкретный пример:
Бухгалтерия 2.0, общий модуль учета НДС, нужно добиться того, чтобы книги покупок и продаж учитывали самописные документы, при этом сохранилась возможность относительно нетрудоемкого обновления конфигурации.
Есть функция, в которую передается СтруктураПараметров. Попытка передачи на сервер структуры приводит к ошибке передачи мутабельного значения.
Функция ПолучитьЗаписиКнигиПродаж(СписокСчетовФактур, СтруктураПараметров) Экспорт
// Переводим выполнение функции на сервер // GtG // 22.04.2015 12:00:46
АдресМЗначения=ПоместитьВоВременноеХранилище(Неопределено);
ПоместитьВоВременноеХранилище(СтруктураПараметров,АдресМЗначения);
Возврат АС_УЧЕТ_НДС.ПолучитьЗаписиКнигиПродаж_серверная(СписокСчетовФактур,АдресМЗначения);
//---------------<Отключено совсем>---------------------------// GtG // 22.04.2015 14:18:05
..... тут идет километр родного 1с-овского кода
КонецФункции
Далее, в чисто серверный модуль (в конкретном случае АС_УЧЕТ_НДС) копируем исходную процедуру (модифицируем функционал при желании).
Функция ПолучитьЗаписиКнигиПокупок_Серверная(СписокСчетовФактур, АдресМутабельногоЗначенияВоВременномХранилище) Экспорт
СтруктураПараметров = ПолучитьИзВременногоХранилища(АдресМутабельногоЗначенияВоВременномХранилище);
...далее идет текст исходной функции
КонецФункции
Если в ходе работы процедуры/функции на сервере передаваемое мутабельное значение должно быть изменено - помещаем его во временное хранилище по тому же адресу АдресМутабельногоЗначенияВоВременномХранилище и после выполнения функции/процедуры в исходном модуле считываем из временного хранилища.