Как исправить ошибку Не удалось записать: Использовать бизнес-процессы и задачи в 1С:БГУ

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

При работе с конфигурацией 1С:Бухгалтерия государственного учреждения 2.0 (БГУ) специалисты часто сталкиваются с досадной ошибкой при запуске системы после обновления или перехода с версии ПРОФ на Базовую. Текст ошибки гласит: «Не удалось записать: "Использовать бизнес-процессы и задачи"!». Ситуация осложняется тем, что замер производительности и обычный поиск по тексту ошибки не всегда сразу выводят на проблемный участок кода, так как ошибка может возникать в фоновом задании или при выполнении обработчиков обновления информационной базы.

В этой статье мы подробно разберем причины возникновения этой проблемы и рассмотрим несколько способов ее решения — от программной правки до административных манипуляций с данными. Также вы можете изучить готовое исправление ошибки при даунгрейде БГУ до базовой, подготовленное сообществом.

Выясняем причину ошибки

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


ОбщийМодуль.ОбщегоНазначенияБГУ.Модуль(5913): ОбщегоНазначенияБГУ.ОтключитьНедоступныйФункционал
ОбщийМодуль.ОбщегоНазначения.Модуль(5934): Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(3277): ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.Процедура);

Причина кроется в том, что система пытается программно отключить функционал, который недоступен в текущей версии (например, в Базовой) или в текущем режиме работы. Для этого она пытается установить константу ИспользоватьБизнесПроцессыИЗадачи в значение Ложь. Однако, если в базе данных остались «хвосты» — незавершенные задачи или запущенные бизнес-процессы — платформа блокирует запись этой константы, чтобы не нарушить логическую целостность данных. Также проблема может быть вызвана особенностями прав доступа или блокировками в транзакции обновления.

Способ 1. Использование расширения конфигурации (Рекомендуемый)

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

  1. Создадим новое расширение в конфигураторе.
  2. Добавим в расширение общий модуль ОбщегоНазначенияБГУ.
  3. Найдем в этом модуле процедуру ОтключитьНедоступныйФункционал.
  4. Нам необходимо изменить логику работы с константами. Мы можем либо закомментировать попытку записи, либо обернуть ее в блок Попытка ... Исключение.

Разберем пример кода, который нужно применить в расширении (используя аннотацию &Вместо):


&Вместо("ОтключитьНедоступныйФункционал")
Процедура Расш_ОтключитьНедоступныйФункционал()
    // Мы можем полностью переопределить логику или исключить запись проблемной константы
    Попытка
        // Оригинальный код, который вызывает ошибку:
        // Константы.ИспользоватьБизнесПроцессыИЗадачи.Установить(Ложь);
        
        // Вместо этого мы проверяем, не приведет ли запись к ошибке
        Если Константы.ИспользоватьБизнесПроцессыИЗадачи.Получить() <> Ложь Тогда
            Константы.ИспользоватьБизнесПроцессыИЗадачи.Установить(Ложь);
        КонецЕсли;
    Исключение
        ЗаписьЖурналаРегистрации("Обновление", УровеньЖурналаРегистрации.Предупреждение, , , 
            "Не удалось программно отключить бизнес-процессы, пропускаем...");
    КонецПопытки;
КонецПроцедуры

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

Способ 2. Полная очистка данных бизнес-процессов

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

  1. Откроем обработку «Удаление помеченных объектов». Если объектов в базе очень много, штатная процедура может не справиться, в этом случае поможет удаление помеченных объектов с предварительным отбором.
  2. Попробуем найти все объекты типов Задача.ЗадачаИсполнителя и любые объекты из ветки Бизнес-процессы.
  3. Если они не помечены на удаление, их нужно пометить программно или через консоль запросов.
  4. После удаления всех ссылок и самих записей в таблицах задач, попробуем снова запустить процедуру обновления.

Для быстрой пометки на удаление можно воспользоваться следующим фрагментом кода в обработке «Групповое изменение реквизитов» или в произвольной форме:


Выборка = Задачи.ЗадачаИсполнителя.Выбрать();
Пока Выборка.Следующий() Цикл
    Объект = Выборка.ПолучитьОбъект();
    Объект.УстановитьПометкуУдаления(Истина);
КонецЦикла;

Способ 3. Прямая правка в «тяжелых» случаях

Если вы столкнулись с ситуацией при «даунгрейде» (переходе с ПРОФ на Базовую) и расширение не помогает, рассмотрим радикальный шаг — временное изменение типа константы в основной конфигурации (требуется снятие с поддержки или включение возможности изменения).

  1. В конфигураторе найдем константу ИспользоватьБизнесПроцессыИЗадачи.
  2. Временно изменим ее тип на Число или Строка.
  3. Применим изменения в базе данных (F7). Это заставит платформу очистить текущее значение.
  4. Вернем тип обратно в Булево.
  5. Запустим предприятие.

Этот метод позволяет «сбросить» состояние константы, которое могло заблокироваться из-за ошибок в кэше метаданных или некорректных значений в таблице _Consts на уровне СУБД.

Дополнительные рекомендации

Проанализируем еще несколько нюансов, которые могут помочь:

Выяснив причину и выбрав один из предложенных методов, мы сможем успешно завершить обновление 1С:БГУ 2.0 и продолжить работу в штатном режиме.

← На главную