Почему после обновления 1С:ЗУП реквизиты заполняются только у первых 100 документов?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При переходе на новые релизы конфигураций 1С (например, при обновлении 1С:ЗУП с версии 3.1.30.249 на 3.1.34.77) разработчики и администраторы часто сталкиваются с ситуацией, когда новые служебные реквизиты заполняются не у всех объектов. Проанализируем ситуацию: после обновления выясняется, что некорректно работает дата запрета редактирования для документа ДоговорРаботыУслуги. Причина кроется в том, что реквизит ДатаЗапрета остался незаполненным в старых документах.

Если заглянуть в модуль менеджера документа, можно найти процедуру обновления, например, ЗаполнитьДатыЗапрета, которая при запуске почему-то обрабатывает ровно 100 документов и останавливается. Разберем по шагам, почему так происходит и как правильно решить эту задачу.

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

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

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

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

Способы решения проблемы

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

1. Проверка статуса отложенного обновления

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

  1. В режиме 1С:Предприятие перейдите в раздел Администрирование -> Обслуживание (или «Поддержка и обслуживание»).
  2. Откройте пункт Результаты обновления и дополнительная обработка данных.
  3. В открывшемся окне вы увидите список всех отложенных обработчиков и их статус.
  4. Если процесс не завершен, вы можете дождаться его окончания или запустить принудительно прямо из этой формы. В клиент-серверных базах также может быть доступна опция изменения приоритета обработки данных на максимальный, что значительно ускорит процесс.

2. Что делать, если обновление зависло?

Если вы видите, что документы не обновляются автоматически и прогресс остановился, проанализируем возможные причины блокировки:

  1. Блокировка регламентных заданий: На уровне сервера 1С (в консоли кластера серверов) может быть установлена галочка «Блокировка регламентных заданий включена». В этом случае фоновое обновление просто не может запуститься. Снимите блокировку.
  2. Отключение конкретного задания: В самой базе могло быть остановлено регламентное задание «Отложенное обновление ИБ». Часто в окне результатов обновления система сама выводит предупреждение об этом и предлагает включить задание.
  3. Ошибка в конкретных документах: Обработчик мог споткнуться об ошибочный или заблокированный документ, который не проходит проверки нового релиза. Если обработчик завершился с ошибкой, подробности можно посмотреть в окне «Результаты обновления». Устраните причину (например, исправьте данные в документе) и нажмите кнопку «Перезапустить отложенное обновление».

3. Альтернативный вариант (для крайних случаев)

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


ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
ДокументОбъект.ДатаЗапрета = СсылкаНаДокумент.Дата; // Или ваша логика заполнения
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);

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

← На главную