Что такое мутабельное значение 1с
Перейти к содержимому

Что такое мутабельное значение 1с

  • автор:

Что такое мутабельное значение 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-го параметра метода ВыполнитьКоманду ().

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *