Как исправить ошибку «Превышено допустимое количество запусков процедуры обновления» при обновлении 1С:Бухгалтерия 3.0?

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

При обновлении конфигурации 1С:Бухгалтерия Предприятия 3.0 (например, с версии 3.0.58.41 на 3.0.59.43/45) многие пользователи сталкиваются с неприятной ситуацией: процесс обновления информационной базы доходит практически до самого конца (около 94%), после чего система долго зависает и выдает ошибку. При каждом последующем запуске программы появляется уведомление «Не завершен переход на новую версию», а попытки повторного запуска обработок отложенного обновления завершаются сбойным сообщением:

Процедура "УчетСтажаПФР.ВосстановитьОтсутствующиеИнтервалыВторичногоРегистра" обработки данных завершилась с ошибкой: Превышено допустимое количество запусков процедуры обновления. Выполнение прервано для предотвращения зацикливания механизма обработки данных.

Разберем подробно, почему возникает данная проблема, что происходить в этот момент в программе и как успешно завершить обновление базы данных.

Причина возникновения проблемы и технический анализ

Проанализируем техническую сторону вопроса. В современных конфигурациях 1С на базе Библиотеки Стандартных Подсистем (БСП) используется механизм отложенного обновления информационной базы. Он позволяет выполнять тяжелые процедуры обработки данных в фоновом режиме, не блокируя работу пользователей.

Чтобы избежать бесконечных циклов в случае сбоя алгоритма, в БСП встроен защитный механизм. Если при очередном запуске процедура обновления не может завершить обработку данных (не устанавливает флаг ОбработкаЗавершена = Истина) и выборка сбойных записей снова и снова возвращает непустой результат, БСП прерывает выполнение после превышения лимита попыток и генерирует исключение.

Рассмотрим код сбойной процедуры УчетСтажаПФР.ВосстановитьОтсутствующиеИнтервалыВторичногоРегистра:


Процедура ВосстановитьОтсутствующиеИнтервалыВторичногоРегистра(ПараметрыОбновления = Неопределено) Экспорт
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	ПериодыСтажаПФР.ФизическоеЛицо КАК ФизическоеЛицо,
    |	ДАТАВРЕМЯ(1, 1, 1) КАК Начало,
    |	ДАТАВРЕМЯ(1, 1, 1) КАК Окончание
    |ПОМЕСТИТЬ ВТКлючиИзменившихсяДанных
    |ИЗ
    |	РегистрСведений.ПараметрыПериодовСтажаПФР КАК ПериодыСтажаПФР
    |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПериодыСтажаПФР КАК ПериодыСтажаПФРПересекающие
    |	ПО ПериодыСтажаПФР.ГоловнаяОрганизация = ПериодыСтажаПФРПересекающие.ГоловнаяОрганизация
    |	И ПериодыСтажаПФР.ФизическоеЛицо = ПериодыСтажаПФРПересекающие.ФизическоеЛицо
    |	И ПериодыСтажаПФР.ТипДоговора = ПериодыСтажаПФРПересекающие.ТипДоговора
    |	И ПериодыСтажаПФР.Начало >= ПериодыСтажаПФРПересекающие.Начало;
    |
    |ВЫБРАТЬ ПЕРВЫЕ 1
    |	ВТКлючиИзменившихсяДанных.ФизическоеЛицо КАК ФизическоеЛицо
    |ИЗ
    |	ВТКлючиИзменившихсяДанных КАК ВТКлючиИзменившихсяДанных";

    Запрос.УстановитьПараметр("ГражданскоПравовой", Перечисления.ТипыДоговоровСЗВ63.ГражданскоПравовой);
    Запрос.УстановитьПараметр("НеВключаетсяВСтраховойСтаж", Перечисления.ВидыСтажаПФР2014.НеВключаетсяВСтраховойСтаж);
    Запрос.УстановитьПараметр("МаксимальнаяДата", ЗарплатаКадрыПериодическиеРегистры.МаксимальнаяДата);

    Если Запрос.Выполнить().Пустой() Тогда
        ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", Истина);
        Возврат;
    КонецЕсли;

    ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", Ложь);
    ИзмеренияОтбора = Новый Массив;
    ИзмеренияОтбора.Добавить("ФизическоеЛицо");
    ОбновитьДанныеВторичногоРегистра(Запрос.МенеджерВременныхТаблиц, ИзмеренияОтбора, Истина);
КонецПроцедуры

Как видно из алгоритма, процедура опрашивает регистры сведений РегистрСведений.ПараметрыПериодовСтажаПФР и РегистрСведений.ПериодыСтажаПФР. Зацикливание происходит из-за некорректных или некоординированных кадровых данных в базе: например, когда в информационной базе присутствуют уволенные сотрудники, но кадровые документы приёма на работу по ним отсутствуют или проведения не имеют.

В результате запрос постоянно находит некорректные записи, функция ОбновитьДанныеВторичногоРегистра не может сформировать правильные интервалы, флаг ОбработкаЗавершена = Истина никогда не устанавливается, и механизм БСП принудительно прерывает выполнение обновления.

Рассмотрим несколько эффективных способов решения этой проблемы.

Способ 1. Обновление на исправленный релиз (Рекомендуемый)

Выясним наиболее простой и официальный путь устранения ошибки. Фирма «1С» признала наличие этой ошибки в релизах 3.0.59.43 и 3.0.59.45 и выпустила официальное исправление.

  1. Скачаем и установим релиз конфигурации 3.0.59.54 (или любой более новый).
  2. Откроем программу в режиме Конфигуратор.
  3. Выполним обновление конфигурации до актуальной версии через меню Конфигурация — Поддержка — Обновить конфигурацию.
  4. Запустим базу в режиме 1С:Предприятие от имени администратора.
  5. Программа автоматически запустит и успешно завершит процедуру обновления без возникновения ошибки.

Способ 2. Исправление некорректных кадровых данных в базе

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

Как показывает практика, данная ошибка часто возникает при наличии «повисших» кадровых состояний у сотрудников (например, оформлен документ увольнения, но отсутствует проведенный документ Прием на работу).

Выполним следующие шаги:

  1. Перейдем в раздел Зарплата и кадры — Сотрудники (или Физические лица).
  2. Отфильтруем список уволенных сотрудников.
  3. Откроем карточки уволенных сотрудников и проверим раздел кадровых документов.
  4. Убедимся, что по каждому сотруднику оформлены и проведены оба документа: и Прием на работу, и Увольнение. Если документ приема отсутствует, создадим и проведем его соответствующей датой.
  5. После проведения отсутствующих кадровых документов перейдем в форму «Не завершен переход на новую версию» и повторно запустим выполнение отложенных процедур обновления.

Способ 3. Проведение тестирования и исправления информационной базы

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

  1. Создадим резервную копию информационной базы (файл 1Cv8.1CD или через Администрирование — Выгрузить информационную базу).
  2. Запустим Конфигуратор.
  3. Перейдем в меню Администрирование — Тестирование и исправление....
  4. Отметим флажками пункты:
    • Проверка логической целостности информационной базы
    • Реструктуризация таблиц базы данных
  5. В переключателях при наличии ссылок на несуществующие объекты выберем Очищать ссылки.
  6. Нажмем кнопку Выполнить.

После завершения тестирования откроем базу в режиме 1С:Предприятие и повторим запуск отложенных обработчиков обновления.

Способ 4. Принудительное изменение статуса обработчика обновления

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

Для этого можно воспользоваться консолью кода или специализированной внешней обработкой, выполнив сброс состояния ошибки:


НаборЗаписей = РегистрыСведений.ОбработчикиОбновления.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ИмяОбработчика.Установить("УчетСтажаПФР.ВосстановитьОтсутствующиеИнтервалыВторичногоРегистра");
НаборЗаписей.Прочитай();

Если НаборЗаписей.Количество() > 0 Тогда
    Для Каждого Запись Из НаборЗаписей Цикл
        Запись.Статус = Перечисления.СтатусыОбработчиковОбновления.Выполнена;
        Запись.КоличествоЗапусков = 0;
    КонецЦикла;
    НаборЗаписей.Записать();
КонецЕсли;

Важно: Данный способ является крайним средством. Применение ручного сброса статуса без исправления исходных данных может привести к тому, что вторичный регистр стажа ПФР останется не полностью заполненным, что потребует повторного перерасчета стажа в будущем.

Подведем итоги

Рассмотренная ошибка связана с некорректным поведением алгоритма проверки кадровых интервалов в регистрах стажа ПФР при некорректных кадровых данных сотрудников. Оптимальным решением является обновление конфигурации 1С:Бухгалтерия 3.0 до версии 3.0.59.54 или выше, либо проверка и приведение в порядок кадровых документов (в частности, документов приёма на работу по уволенным сотрудникам).

← На главную