Что такое мутабельное значение 1с
Иногда в технической документации встречается понятие «мутабельный тип». Например, в описании функции ЗначениеЗаполнено (ValueIsFilled) мы встречаем:
Функция проверяет, отличается ли переданное значение от значения по умолчанию того же типа.
Не работает с мутабельными значениями. При передаче мутабельного значения функция вызывает исключение.
И возникает вопрос, а что такое «мутабельное значение»?
Мутабельный тип (от англ. Mutable — изменчивый) — сложный тип данных (как правило — объекты), который после своего создания допускает изменение своих свойств.
- Число
- Строка
- Дата
- Булево
- Ссылки (СправочникСсылка.Товары)
- Цвет
- Объект (СправочникОбъект.Товары)
- СписокЗначений
- Форма
Мутабельный тип
Мутабельный тип (англ. Mutable type ) — сложный тип данных в объектно-ориентированном программировании, значения которого (как правило — объекты) после своего создания допускают изменение своих свойств.
Примеры
Встроенный язык программирования 1С:Предприятие
- Неизменяемые типы:
- Число
- Строка
- Дата
- Булево
- Ссылки (СправочникСсылка.Товары)
- Цвет
- Объект (СправочникОбъект.Товары)
- СписокЗначений
- Форма
C#
- Неизменяемые типы:
- String
- StringBuilder
См. также
- Дополнить статью (статья слишком короткая либо содержит лишь словарное определение).
- Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное.
- Проставить интервики в рамках проекта Интервики.
Пожалуйста, воспользуйтесь подсказкой и установите ссылки в соответствии с принятыми рекомендациями.
- Объектно-ориентированное программирование
Wikimedia Foundation . 2010 .
Что такое мутабельное значение 1с
До сих пор не могут понять, что такое мутабельное значение.
Объясните мне популярным языком, что есть мутабльное значение, какие есть в 1С, и почему именно они — мутабельные?Например, объект. Его можно менять. А ссылку менять нельзя, поэтому она не мутабельная
(1) Таблицу значений можно менять, структуру.. Список значений, массив, переменную примитивного типа.. Но они не мутабельные
(3) >>> Мутабельный тип (от англ. Mutable — изменчевый) — сложный тип данных (как правило — объекты), которые после своего создания допускают изменение своих свойств.
Ниже написано:
Проверить, что переменная Количество с типом «число» не содержит «ноль» — можно, а вот понять что такое «пустое» для СписокЗначений (то ли все значения списка равны нулю, то ли нет ни одного значения списка, или что-то иное) — однозначно нельзя.Однако, ЗначениеЗаполнено(Массив) — сработает, и не выдаст ошибку мутабельности. Хотя для массива действует тоже самое предположение автора: (то ли все значения массива равны нулю, то ли нет ни одного значения массива, или что-то иное). Поэтому с такими выводами я не согласен.
Если СписокЗначений Мутабельный, как сопоставить этот тип данных с правилом «которые после своего создания допускают изменение своих свойств»? У структуры есть свойства, но она не мутабельная.
Что такое мутабельное значение 1с
Ситуация. Возникла необходимость выполнить в консоли кода некоторый код. Для примера позаимствую код из подсистемы БСП «Версионирование объектов». Вообще я хотел исследовать в ИР тело функции ВерсионированиеОбъектов.РазборВерсии() и посмотреть содержимое внутренних структур. Вот пример кода (текстом), который я пытаюсь выполнить в консоли кода:
СведенияОВерсии = ВерсионированиеОбъектов.СведенияОВерсииОбъекта(Ссылка, НомерВерсии);
Результат = ВерсионированиеОбъектов.РазборПредставленияОбъектаXML(СведенияОВерсии.ВерсияОбъекта, Ссылка);
Результат.Вставить(«ИмяОбъекта», Строка(Ссылка));
Результат.Вставить(«АвторИзменения», СокрЛП(Строка(СведенияОВерсии.АвторВерсии)));
Результат.Вставить(«ДатаИзменения», СведенияОВерсии.ДатаВерсии);
Результат.Вставить(«Комментарий», СведенияОВерсии.Комментарий);Вот скриншот, где я отметил, что пытаюсь выполнить код в контексте сервера, т.к. в конфигурации есть подписки на объекты, т.е. мутабельные значения, и в контексте клиента будут ошибки.
В-принципе код выполнился на серверной стороне, но возникает следующая ошибка:
: Ошибка при вызове метода контекста (ВыполнитьКоманду)
мДополнительныеОтчетыИОбработки.ВыполнитьКоманду(Параметры);
по причине:
Попытка передачи с сервера клиенту мутабельного значения 1-го параметра метода ВыполнитьКоманду ().Генералиссимус
Группа: Администраторы
Сообщений: 5822
Статус: Оффлайн
Группа: Пользователи
Сообщений: 24
Статус: ОффлайнПараметр _ВыборкаВерсий на выходе имел мутабельное значение (Выборка из результата запроса) и был очищен
Параметр _ВыборкаОбъектов на выходе имел мутабельное значение (Выборка из результата запроса) и был очищен
Параметр _Запрос на выходе имел мутабельное значение (Запрос) и был очищенПортативные инструменты тоже очищают мутабельные значения на выходе, оказываццо. Может я просто на какую-то багу наткнулся случайно ? Немного поэкспериментировал, и вот какие результаты получил. Ошибка эта возникает при разборе версий документа «Экземпляр бюджета» в ERP 2.4 и не возникает при разборе какого-нибудь другого документа. Поэтому видоизменил слегка код на такой:
СведенияОВерсии = ВерсионированиеОбъектов.СведенияОВерсииОбъекта(Ссылка, НомерВерсии);
Результат = ВерсионированиеОбъектов.РазборПредставленияОбъектаXML(СведенияОВерсии.ВерсияОбъекта, Ссылка);
Результат.Вставить(«ИмяОбъекта», Строка(Ссылка));
Результат.Вставить(«АвторИзменения», СокрЛП(Строка(СведенияОВерсии.АвторВерсии)));
Результат.Вставить(«ДатаИзменения», СведенияОВерсии.ДатаВерсии);
Результат.Вставить(«Комментарий», СведенияОВерсии.Комментарий);ХЗ1 = Новый ХранилищеЗначения(СведенияОВерсии);
ХЗ2 = Новый ХранилищеЗначения(Результат);СведенияОВерсии = Неопределено;
Результат = Неопределено;И посмотрел, в чём была разница в возвращаемых структурах. Разница оказалась в том, что у экземпляра бюджета в структурах добавились табличные документы. Тогда у меня возникла мысль сделать вот такую простую проверку в консоли кода:
Результат = Новый ТабличныйДокумент;
Выполняется в контексте клиента и выдаёт ошибку в контексте сервера в портативных инструментах:
: Ошибка при вызове метода контекста (ВыполнитьКоманду)
мДополнительныеОтчетыИОбработки.ВыполнитьКоманду(Параметры);
по причине:
Попытка передачи с сервера клиенту мутабельного значения 1-го параметра метода ВыполнитьКоманду ().
ВнешняяОбработка.ирПортативный.МодульОбъекта(2926)>