Как исправить ошибку «Попытка передачи с клиента на сервер мутабельного значения» в УПП 1.3.126.1?

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет Промышленность, строительство и АПК
← На главную

При обновлении конфигурации «Управление производственным предприятием» (УПП) до релиза 1.3.126.1 многие специалисты столкнулись с критической ошибкой. При попытке заполнить документ ОтражениеЗарплатыВРеглУчете система выдает сообщение о невозможности передачи мутабельного значения. Эта проблема блокирует работу бухгалтерии по отражению фонда оплаты труда и требует немедленного вмешательства технического специалиста.

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

Анализ технической причины ошибки

Рассмотрим текст ошибки, который видит пользователь:

{Документ.ОтражениеЗарплатыВРеглУчете.МодульОбъекта(19331)}: Ошибка при вызове метода контекста (ПоказатьВременнуюТаблицу) ... Попытка передачи с клиента на сервер мутабельного значения 2-го параметра метода ПоказатьВременнуюТаблицу ().

Выясним причину такого поведения системы. В платформе 1С:Предприятие 8 под мутабельностью понимается способность объекта изменяться. К таким объектам относятся таблицы значений, менеджеры временных таблиц, прикладные объекты (документы, справочники) и другие. В клиент-серверном варианте работы передача таких объектов между клиентом и сервером запрещена, так как это нарушает целостность данных и архитектурные принципы платформы.

В данном конкретном случае в релизе 1.3.126.1 разработчики 1С допустили досадную оплошность: они оставили в коде вызов отладочного метода РасширеннаяАналитикаУчета.ПоказатьВременнуюТаблицу. Этот метод предназначен исключительно для нужд разработки, чтобы визуально просматривать содержимое временных таблиц в памяти. В качестве параметра в этот метод передается Запрос.МенеджерВременныхТаблиц, который и является тем самым «мутабельным значением».

Проанализируем ситуацию: почему ошибка проявляется не у всех? Чаще всего она «выстреливает» в клиент-серверных базах (на SQL). В файловых версиях границы между клиентом и сервером менее выражены, и платформа иногда позволяет подобные операции, что, скорее всего, и привело к пропуску ошибки на этапе внутреннего тестирования в 1С.

Решение №1: Обновление конфигурации (рекомендуемое)

Самый правильный и безопасный способ — это обновление на исправленный релиз. Разработчики оперативно отреагировали на проблему и выпустили внеплановое обновление.

  1. Проверим текущую версию конфигурации. Если у вас 1.3.126.1, необходимо запланировать обновление.
  2. Скачаем и установим релиз 1.3.126.2 или выше.
  3. В этом релизе разработчики полностью удалили все вызовы метода ПоказатьВременнуюТаблицу, которые приводили к сбою.

Решение №2: Исправление кода вручную (если обновление невозможно)

Если ваша конфигурация сильно кастомизирована и оперативное обновление затруднено, мы можем применить «костыль», который полностью устранит проблему без потери функциональности. Разберем по шагам, что нужно сделать в конфигураторе:

  1. Откроем конфигуратор и найдем документ ОтражениеЗарплатыВРеглУчете.
  2. Перейдем в Модуль объекта документа.
  3. Воспользуемся поиском (Ctrl+F) и найдем все вхождения строки:
    
    РасширеннаяАналитикаУчета.ПоказатьВременнуюТаблицу(Новый Структура("ОтладочныйРежим", Истина), Запрос.МенеджерВременныхТаблиц, "ВТСписокРаботников");
    
  4. Проанализируем количество найденных строк. Как правило, в модуле этого документа их 3 штуки.
  5. Закомментируем эти строки, добавив два символа косой черты // в начале. Код должен выглядеть следующим образом:
    
    // РасширеннаяАналитикаУчета.ПоказатьВременнуюТаблицу(Новый Структура("ОтладочныйРежим", Истина), Запрос.МенеджерВременныхТаблиц, "ВТСписокРаботников");
    
  6. Сохраним изменения и обновим конфигурацию базы данных (F7).

Важное замечание: Этот код не несет никакой полезной нагрузки для конечного пользователя. Это «забытый инструмент» программиста, поэтому его отключение никак не повлияет на правильность расчета проводок или заполнение данных.

Разбор опасного решения: почему нельзя менять свойства общего модуля

Рассмотрим еще один совет, который часто встречается на форумах: включить галочку «Клиент (обычное приложение)» в свойствах общего модуля РасширеннаяАналитикаУчета.

Внимание! Мы настоятельно не рекомендуем этого делать. Проанализируем последствия такого изменения:

Резюме

Посмотрим на ситуацию в целом: мы столкнулись с классической регрессионной ошибкой. Чтобы её исправить, нам не нужно переписывать сложные алгоритмы. Достаточно либо обновиться до 1.3.126.2, либо просто закомментировать отладочные строки, которые по ошибке попали в релиз. Главное — избегать правок свойств модулей, чтобы не создать лавинообразный эффект новых ошибок в других подсистемах УПП.

← На главную