При работе с конфигурацией 1С:Бухгалтерия государственного учреждения 2.0 (БГУ) специалисты часто сталкиваются с досадной ошибкой при запуске системы после обновления или перехода с версии ПРОФ на Базовую. Текст ошибки гласит: «Не удалось записать: "Использовать бизнес-процессы и задачи"!». Ситуация осложняется тем, что замер производительности и обычный поиск по тексту ошибки не всегда сразу выводят на проблемный участок кода, так как ошибка может возникать в фоновом задании или при выполнении обработчиков обновления информационной базы.
В этой статье мы подробно разберем причины возникновения этой проблемы и рассмотрим несколько способов ее решения — от программной правки до административных манипуляций с данными. Также вы можете изучить готовое исправление ошибки при даунгрейде БГУ до базовой, подготовленное сообществом.
Проанализируем технологический стек возникновения ошибки. Как правило, она «всплывает» в момент работы механизма ОбновлениеИнформационнойБазы. Если заглянуть в стек вызовов, мы увидим следующую последовательность:
ОбщийМодуль.ОбщегоНазначенияБГУ.Модуль(5913): ОбщегоНазначенияБГУ.ОтключитьНедоступныйФункционал
ОбщийМодуль.ОбщегоНазначения.Модуль(5934): Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(3277): ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.Процедура);
Причина кроется в том, что система пытается программно отключить функционал, который недоступен в текущей версии (например, в Базовой) или в текущем режиме работы. Для этого она пытается установить константу ИспользоватьБизнесПроцессыИЗадачи в значение Ложь. Однако, если в базе данных остались «хвосты» — незавершенные задачи или запущенные бизнес-процессы — платформа блокирует запись этой константы, чтобы не нарушить логическую целостность данных. Также проблема может быть вызвана особенностями прав доступа или блокировками в транзакции обновления.
Рассмотрим наиболее корректный и безопасный метод, который позволяет не снимать основную конфигурацию с поддержки. Мы создадим расширение, которое перехватит управление в проблемном модуле.
ОбщегоНазначенияБГУ.ОтключитьНедоступныйФункционал.Попытка ... Исключение.Разберем пример кода, который нужно применить в расширении (используя аннотацию &Вместо):
&Вместо("ОтключитьНедоступныйФункционал")
Процедура Расш_ОтключитьНедоступныйФункционал()
// Мы можем полностью переопределить логику или исключить запись проблемной константы
Попытка
// Оригинальный код, который вызывает ошибку:
// Константы.ИспользоватьБизнесПроцессыИЗадачи.Установить(Ложь);
// Вместо этого мы проверяем, не приведет ли запись к ошибке
Если Константы.ИспользоватьБизнесПроцессыИЗадачи.Получить() <> Ложь Тогда
Константы.ИспользоватьБизнесПроцессыИЗадачи.Установить(Ложь);
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Обновление", УровеньЖурналаРегистрации.Предупреждение, , ,
"Не удалось программно отключить бизнес-процессы, пропускаем...");
КонецПопытки;
КонецПроцедуры
Важный момент: если вы переходите на Базовую версию, простого игнорирования может быть недостаточно, так как платформа на уровне ядра может проверять этот флаг. Поэтому рассмотрим дополнительные шаги.
Проанализируем ситуацию, когда ошибка вызвана наличием данных. Если в базе есть записи в таблицах задач, константа не запишется. Нам необходимо физически удалить эти данные.
Задача.ЗадачаИсполнителя и любые объекты из ветки Бизнес-процессы.Для быстрой пометки на удаление можно воспользоваться следующим фрагментом кода в обработке «Групповое изменение реквизитов» или в произвольной форме:
Выборка = Задачи.ЗадачаИсполнителя.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
Объект.УстановитьПометкуУдаления(Истина);
КонецЦикла;
Если вы столкнулись с ситуацией при «даунгрейде» (переходе с ПРОФ на Базовую) и расширение не помогает, рассмотрим радикальный шаг — временное изменение типа константы в основной конфигурации (требуется снятие с поддержки или включение возможности изменения).
ИспользоватьБизнесПроцессыИЗадачи.Число или Строка.Булево.Этот метод позволяет «сбросить» состояние константы, которое могло заблокироваться из-за ошибок в кэше метаданных или некорректных значений в таблице _Consts на уровне СУБД.
Проанализируем еще несколько нюансов, которые могут помочь:
ПолныеПрава и АдминистраторСистемы. Иногда ошибка записи возникает из-за того, что в процессе обновления права ролей пересчитываются, и в какой-то момент прав на запись константы просто не хватает.Выяснив причину и выбрав один из предложенных методов, мы сможем успешно завершить обновление 1С:БГУ 2.0 и продолжить работу в штатном режиме.