1С мутабельные значения что это

Мутабельный тип

Иногда в технической документации встречается понятие “мутабельный тип”. Например, в описании функции ЗначениеЗаполнено (ValueIsFilled) мы встречаем:
Функция проверяет, отличается ли переданное значение от значения по умолчанию того же типа.
Не работает с мутабельными значениями. При передаче мутабельного значения функция вызывает исключение.

И возникает вопрос, а что такое “мутабельное значение”?

Мутабельный тип (от англ. Mutable – изменчевый) – сложный тип данных (как правило – объекты), которые после своего создания допускают изменение своих свойств.

Ошибка возникает при попытке использования функции ЗначениеЗаполнено() для проверки заполнения объекта агрегатного типа.

К таким объектам относятся программные объекты типа:

  1. СправочникОбъект, СправочникСписок, СправочникВыборка, ДокументОбъект, ДокументСписок, ДокументВыборка и т.п.;
  2. ОбработкаОбъект, ОтчетОбъект и т.п.
  3. ТабличныйДокумент, ТекстовыйДокумент, ДиаграммаГанта и т.п.;

Указанные объекты поддерживают только сравнение со значением Неопределено :

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

СПРАВКА:

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

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

Читайте также:  3 752 Код какой страны

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

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

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

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

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

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

Оцените статью
Добавить комментарий

Adblock detector