Переход с редакции 2.0 на 3.0 в отраслевых решениях для ЖКХ (на базе «1С:Бухгалтерии») — это не просто рядовое обновление, а глубокая техническая трансформация базы данных. Мы переходим с архитектуры «Обычных форм» на «Управляемое приложение» (Такси), что часто сопровождается критическими ошибками на этапе выполнения обработчиков обновления. Рассмотрим одну из самых распространенных проблем: невозможность записи константы ВестиУчетПоОрганизациям и сопутствующие ошибки передачи мутабельных значений.
Когда мы запускаем предприятие после обновления конфигурации в режиме Конфигуратора, система инициирует выполнение процедур из общего модуля ОбновлениеИнформационнойБазыБП. В частности, срабатывает метод ПервыйЗапуск, который пытается установить базовые настройки учета. Ошибка «Не удалось записать: "Вести учет по организациям"!» возникает в строке:
Константы.ВестиУчетПоОрганизациям.Установить(Справочники.Организации.КоличествоОрганизаций() > 1);
Почему это происходит? Проанализируем ситуацию. Система пытается автоматически определить, будет ли в базе вестись многофирменный учет. Если при попытке записи этой константы возникает отказ, это свидетельствует о логическом конфликте в данных. Выясним основные причины:
Организации есть помеченные на удаление элементы или неявные дубликаты, созданные в результате некорректных обменов, логика обновления может нарушиться.Организации жестче. Наличие элементов с пустым ИНН или некорректным кодом может блокировать запись констант, связанных с этим справочником.Прежде чем приступать к «костылям» в коде, проанализируем состояние данных в исходной базе (еще на редакции 2.0). Рекомендуем выполнить следующие действия:
Организации и Контрагенты. Если у вас есть организация-«мусор», которую создали по ошибке, ее необходимо не просто пометить на удаление, а полностью удалить из базы через «Удаление помеченных объектов».Разберем ситуацию с фоновыми заданиями. В клиент-серверном варианте это критически важно. Перед запуском обновления в режиме «Предприятие» необходимо зайти в консоль администрирования кластера серверов 1С и в свойствах информационной базы установить галочку «Блокировка регламентных заданий включена».
Если вы работаете в файловом варианте, убедитесь, что в момент обновления не запущены другие сеансы, которые могли бы инициировать запуск планировщика заданий.
Если данные очищены, но ошибка сохраняется из-за специфики кода обновления, рассмотрим метод «костыля» с использованием расширения. Это позволит нам «проскочить» проблемный участок кода без изменения основной конфигурации (сохранив ее на поддержке).
Создадим новое расширение и добавим в него общий модуль ОбновлениеИнформационнойБазыБП. Нам нужно перехватить процедуру, в которой происходит ошибка (в релизе 3.0.79.3 это строка 2872 модуля). Применим метод «Вместо» или «ИзменениеИКонтроль».
Пример кода в расширении для принудительной установки значения:
&Вместо("УстановитьПараметрыУчетаПоОрганизациям")
Процедура Расш1_УстановитьПараметрыУчетаПоОрганизациям()
// Принудительно устанавливаем Ложь, если организация одна,
// или Истина, если учет действительно многофирменный.
Попытка
Константы.ВестиУчетПоОрганизациям.Установить(Ложь);
Исключение
ЗаписьЖурналаРегистрации("Обновление", УровеньЖурналаРегистрации.Ошибка,,,
"Не удалось принудительно установить константу ВестиУчетПоОрганизациям");
КонецПопытки;
КонецПроцедуры
После успешного запуска обновления это расширение нужно будет обязательно отключить и проверить настройки в разделе «Администрирование — Настройки программы — Параметры учета».
Ошибка «Передача мутабельного значения» при запуске толстого клиента часто возникает из-за того, что в коде обновления происходит попытка передать объект (например, ТаблицаЗначений или СправочникОбъект) с клиента на сервер или наоборот в контексте, который не поддерживает такую передачу в управляемом приложении.
Проанализируем ситуацию: в редакции 3.0 основной режим работы — Тонкий клиент. Толстый клиент в режиме управляемого приложения может вести себя нестабильно при выполнении фоновых процедур обновления. Рекомендуем:
Посмотрим на прыжок версий: с 2.0.66.79 сразу на 3.0.79.3. Это очень большой шаг. Разберем правильную стратегию обновления:
После того как вы «проскочили» ошибку записи константы и база запустилась, работа не закончена. Проанализируем результаты обновления:
Организации и пересохраните карточку основной организации.Использование расширений для временного обхода ошибок — это мощный инструмент в руках программиста 1С, который позволяет завершить процесс конвертации данных даже в самых сложных случаях, когда типовые механизмы дают сбой на «грязных» исторических данных.