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

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

В процессе обновления конфигурации «1С:Бухгалтерия предприятия 3.0» многие специалисты сталкиваются с досадной остановкой процесса. Система выдает критическую ошибку: «Процедура Справочники.ДоговорыКонтрагентов.ЗаполнитьСпособЗаполненияСтавкиНДС обработки данных завершилась с ошибкой: Превышено допустимое количество запусков процедуры обновления. Выполнение прервано для предотвращения зацикливания». Давайте разберем, почему это происходит и как довести обновление до конца, сохранив целостность данных.

Почему возникает эта ошибка?

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

В случае со справочником ДоговорыКонтрагентов основными причинами сбоя могут быть:

  1. Огромный объем данных: Если в информационной базе сотни тысяч договоров, транзакция записи может не успевать закрыться.
  2. Блокировки объектов: Если база обновляется не в монопольном режиме или активны какие-то внешние интеграции, доступ к объекту может быть закрыт.
  3. Логические ошибки в данных: Наличие договоров с незаполненным владельцем (битые ссылки) или некорректно заполненные реквизиты, которые вызывают исключение при вызове метода Записать().

Способ 1. Принудительное завершение через регистры сведений

Рассмотрим самый быстрый способ, который не требует изменения программного кода. Если мы понимаем, что данные мы сможем поправить позже вручную, нам нужно заставить систему «поверить», что обновление успешно завершено.

Для этого выполним следующие шаги:

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

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

Способ 2. Комментирование кода обработчика

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

Перейдем в Конфигуратор и найдем справочник ДоговорыКонтрагентов. Нам нужен Модуль менеджера. В нем расположена экспортная процедура ЗаполнитьСпособЗаполненияСтавкиНДС(Параметры). Нам нужно закомментировать ее внутреннее содержимое, оставив только установку флага завершения.

Выглядеть это должно следующим образом:


Процедура ЗаполнитьСпособЗаполненияСтавкиНДС(Параметры) Экспорт
    // Полностью комментируем тело процедуры для обхода ошибки
    /*
    Параметры.ОбработкаЗавершена = Ложь;
    Запрос = Новый Запрос;
    ... весь остальной код запроса и цикла ...
    */
    
    // Обязательно сообщаем системе, что обработка якобы завершена
    Параметры.ОбработкаЗавершена = Истина;
КонецПроцедуры

После внесения изменений выполним обновление конфигурации базы данных (клавиша F7). Теперь при запуске обновления процедура мгновенно вернет статус Истина, и ошибка зацикливания исчезнет.

Способ 3. Тестирование и исправление (ТИИ)

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

  1. Меню «Администрирование» — «Тестирование и исправление».
  2. Установим флаги: «Реиндексация таблиц», «Проверка логической целостности», «Проверка ссылочной целостности».
  3. В поле при наличии ссылок на несуществующие объекты выберем «Очищать ссылки».

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

Что именно делает эта процедура?

Выясним причину, зачем вообще 1С запускает этот код. С выходом новых версий в договоры был добавлен реквизит СпособЗаполненияСтавкиНДС. Программа пытается автоматически заполнить его на основе старых данных.

Разберем логику штатного кода, который мы закомментировали в Способе 2:


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

Как завершить обработку данных вручную?

Если мы воспользовались методами «обхода» (закомментировали код или поменяли статус в регистре), данные в справочнике остались незаполненными. Это может привести к тому, что в новых документах ставка НДС будет подставляться некорректно или программа будет требовать заполнить поле «Способ заполнения». Чтобы исправить это, воспользуемся обработкой Групповое изменение реквизитов.

Пошаговый алгоритм действий:

  1. Откроем «Администрирование» — «Обслуживание» — «Корректировка данных» — «Групповое изменение реквизитов».
  2. Выберем объект Договоры контрагентов.
  3. Добавим фильтр: Способ заполнения ставки НДС — Не заполнено (или равно пустой ссылке).
  4. В колонке «Новое значение» для реквизита Способ заполнения ставки НДС выберем Автоматически (или Без НДС, в зависимости от специфики вашей организации).
  5. Нажмем «Изменить реквизиты».

Важный момент: если вы используете сложный учет НДС, рекомендуется сначала отобрать договоры, по которым вы являетесь налоговым агентом, и установить им значение Автоматически, а остальным (например, по договорам с поставщиками на УСН) — Без НДС.

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

← На главную