Как исправить ошибку «Не удалось записать: "Вести учет по организациям"!» при переходе 1С:ЖКХ с редакции 2.0 на 3.0?

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет Сфера услуг, туризм и социальный сектор
← На главную

Переход с редакции 2.0 на 3.0 в отраслевых решениях для ЖКХ (на базе «1С:Бухгалтерии») — это не просто рядовое обновление, а глубокая техническая трансформация базы данных. Мы переходим с архитектуры «Обычных форм» на «Управляемое приложение» (Такси), что часто сопровождается критическими ошибками на этапе выполнения обработчиков обновления. Рассмотрим одну из самых распространенных проблем: невозможность записи константы ВестиУчетПоОрганизациям и сопутствующие ошибки передачи мутабельных значений.

Проанализируем причину возникновения ошибки

Когда мы запускаем предприятие после обновления конфигурации в режиме Конфигуратора, система инициирует выполнение процедур из общего модуля ОбновлениеИнформационнойБазыБП. В частности, срабатывает метод ПервыйЗапуск, который пытается установить базовые настройки учета. Ошибка «Не удалось записать: "Вести учет по организациям"!» возникает в строке:

Константы.ВестиУчетПоОрганизациям.Установить(Справочники.Организации.КоличествоОрганизаций() > 1);

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

  1. Наличие «дублей» организаций. Если в справочнике Организации есть помеченные на удаление элементы или неявные дубликаты, созданные в результате некорректных обменов, логика обновления может нарушиться.
  2. Некорректные реквизиты. В редакции 3.0 требования к заполнению справочника Организации жестче. Наличие элементов с пустым ИНН или некорректным кодом может блокировать запись констант, связанных с этим справочником.
  3. Активные фоновые задания. Если в момент обновления сервер пытается выполнить регламентную операцию, происходит конфликт блокировок, и запись константы отклоняется платформой.

Шаг 1: Подготовка базы и очистка данных

Прежде чем приступать к «костылям» в коде, проанализируем состояние данных в исходной базе (еще на редакции 2.0). Рекомендуем выполнить следующие действия:

  1. Поиск и удаление дублей. Воспользуемся стандартной обработкой «Поиск и замена дублей». Особое внимание уделим справочникам Организации и Контрагенты. Если у вас есть организация-«мусор», которую создали по ошибке, ее необходимо не просто пометить на удаление, а полностью удалить из базы через «Удаление помеченных объектов».
  2. Тестирование и исправление (ТиИ). Обязательно запустим ТиИ в Конфигураторе со следующими настройками:
    • Реиндексация таблиц.
    • Проверка логической целостности.
    • Очистка ссылок на несуществующие объекты.
  3. Проверка версии платформы. Убедимся, что используемая платформа соответствует требованиям релиза. Для конфигурации 3.0.79.3 платформа должна быть не ниже 8.3.15.1830.

Шаг 2: Отключение блокирующих факторов

Разберем ситуацию с фоновыми заданиями. В клиент-серверном варианте это критически важно. Перед запуском обновления в режиме «Предприятие» необходимо зайти в консоль администрирования кластера серверов 1С и в свойствах информационной базы установить галочку «Блокировка регламентных заданий включена».

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

Шаг 3: Обход ошибки через расширение конфигурации

Если данные очищены, но ошибка сохраняется из-за специфики кода обновления, рассмотрим метод «костыля» с использованием расширения. Это позволит нам «проскочить» проблемный участок кода без изменения основной конфигурации (сохранив ее на поддержке).

Создадим новое расширение и добавим в него общий модуль ОбновлениеИнформационнойБазыБП. Нам нужно перехватить процедуру, в которой происходит ошибка (в релизе 3.0.79.3 это строка 2872 модуля). Применим метод «Вместо» или «ИзменениеИКонтроль».

Пример кода в расширении для принудительной установки значения:


&Вместо("УстановитьПараметрыУчетаПоОрганизациям")
Процедура Расш1_УстановитьПараметрыУчетаПоОрганизациям()
    // Принудительно устанавливаем Ложь, если организация одна, 
    // или Истина, если учет действительно многофирменный.
    Попытка
        Константы.ВестиУчетПоОрганизациям.Установить(Ложь);
    Исключение
        ЗаписьЖурналаРегистрации("Обновление", УровеньЖурналаРегистрации.Ошибка,,, 
            "Не удалось принудительно установить константу ВестиУчетПоОрганизациям");
    КонецПопытки;
КонецПроцедуры

После успешного запуска обновления это расширение нужно будет обязательно отключить и проверить настройки в разделе «Администрирование — Настройки программы — Параметры учета».

Шаг 4: Решение проблемы с «мутабельными значениями»

Ошибка «Передача мутабельного значения» при запуске толстого клиента часто возникает из-за того, что в коде обновления происходит попытка передать объект (например, ТаблицаЗначений или СправочникОбъект) с клиента на сервер или наоборот в контексте, который не поддерживает такую передачу в управляемом приложении.

Проанализируем ситуацию: в редакции 3.0 основной режим работы — Тонкий клиент. Толстый клиент в режиме управляемого приложения может вести себя нестабильно при выполнении фоновых процедур обновления. Рекомендуем:

Шаг 5: Последовательность релизов

Посмотрим на прыжок версий: с 2.0.66.79 сразу на 3.0.79.3. Это очень большой шаг. Разберем правильную стратегию обновления:

  1. Сначала обновим редакцию 2.0 до максимально возможного последнего релиза в ветке 2.0 (например, 2.0.67.х).
  2. Проверим, указан ли ваш текущий релиз 2.0 в списке поддерживаемых для перехода в описании релиза 3.0.
  3. Если прямой переход не предусмотрен, попробуем обновиться сначала на более ранний релиз 3.0 (например, 3.0.77.х), выполним все процедуры обновления данных, и только потом пойдем выше до 3.0.79.3.

Итоговые рекомендации

После того как вы «проскочили» ошибку записи константы и база запустилась, работа не закончена. Проанализируем результаты обновления:

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

← На главную