Каталог решений - Как передать на сервер мутабельное значение

Как передать на сервер мутабельное значение

Как передать на сервер мутабельное значение

В наличии

Перевод выполнения кода с клиента на сервер. Метод для ленивых и торопящихся.

Категория:

Описание

Возникла такая задачка — перенести выполнение функции на сервер, но эта функция в исходном варианте сидела в общем модуле, который был серверным и клиентским одновременно. При запуске исходной функции из серверного куска кода все срабатывает как надо, а при запуске из клиенткого приложения — ошибка «Попытка передачи с клиента на сервер мутабельного значения».

СПРАВКА:

Мутабельный тип (англ. 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: Клиент- серверные вызовы: //sale.itcity.ru/public/86838/

 

Допустим, в нашем случае имеется проблема — нужно передать структуру. Структура эта изменяется функцией, в которую передается как параметр, плюс ко всему, 1С считает этот тип мутабельным по определению. И, чтобы уж совсем соответствовать реальной задаче, передаваемая структура, после изменения в функции, приобретает гигантский размер, т.к. в своем составе содержит поле, в которое помещается колоссальный результат запроса.

Решаем эту проблему через помещение  структуры во временное хранилище.

 

Конкретный пример:

Бухгалтерия 2.0, общий модуль учета НДС, нужно добиться того, чтобы книги покупок и продаж учитывали самописные документы, при этом сохранилась возможность относительно нетрудоемкого обновления конфигурации.

Есть функция,  в которую передается СтруктураПараметров.  Попытка передачи на сервер структуры приводит к ошибке передачи мутабельного значения.

Функция ПолучитьЗаписиКнигиПродаж(СписокСчетовФактур, СтруктураПараметров) Экспорт
    
    // Переводим выполнение функции на сервер   // GtG  //  22.04.2015 12:00:46 
    АдресМЗначения=ПоместитьВоВременноеХранилище(Неопределено);
    ПоместитьВоВременноеХранилище(СтруктураПараметров,АдресМЗначения);

    Возврат АС_УЧЕТ_НДС.ПолучитьЗаписиКнигиПродаж_серверная(СписокСчетовФактур,АдресМЗначения);
    
    //---------------<Отключено совсем>---------------------------// GtG // 22.04.2015 14:18:05
    ..... тут идет километр родного 1с-овского кода
 КонецФункции

    
Далее, в чисто серверный модуль (в конкретном случае АС_УЧЕТ_НДС)  копируем исходную процедуру (модифицируем функционал при желании).

 

Функция ПолучитьЗаписиКнигиПокупок_Серверная(СписокСчетовФактур, АдресМутабельногоЗначенияВоВременномХранилище) Экспорт

    СтруктураПараметров = ПолучитьИзВременногоХранилища(АдресМутабельногоЗначенияВоВременномХранилище);
   ...далее идет текст исходной функции
КонецФункции

Если в ходе работы процедуры/функции на сервере передаваемое мутабельное значение должно быть изменено — помещаем его во временное хранилище по тому же адресу АдресМутабельногоЗначенияВоВременномХранилище и после выполнения функции/процедуры в исходном модуле считываем из временного хранилища.

has been added to your cart:
Оформление заказа