Как исправить ошибку «Обнаружены отсутствующие регистраторы» при выгрузке базы в 1С:Фреш

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

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

Почему возникают ошибки отсутствующих регистраторов?

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

Проанализируем основные причины появления таких «записей-сирот»:

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

Шаг 1. Тестирование и исправление (ТиИ)

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

Запустим информационную базу в режиме Конфигуратор и перейдем в меню Администрирование — Тестирование и исправление. Нам необходимо установить следующие флаги:

В нижней части окна настроек в группе «При наличии ссылок на несуществующие объекты» обязательно выберем вариант «Очищать ссылки» или «Удалять объект». Это позволит системе автоматически найти записи в регистрах (таких как РегистрСведений.СтандартныеВычетыНаДетейНДФЛ или РегистрНакопления.НДФЛПеречисленный), у которых нет регистратора, и удалить их.

Шаг 2. Обновление конфигурации до актуального релиза

Проанализируем ситуацию с версиями. Сервис 1С:Фреш всегда работает на самых последних выпусках конфигураций. Если ваша локальная версия 3.0.91.36 пытается выгрузиться в сервис, где актуальная версия уже перешагнула за 3.0.150, возникнет конфликт структур метаданных.

Важное правило: Перед выгрузкой во Фреш необходимо обновить локальную базу до версии, максимально близкой к той, что используется в сервисе. В новых релизах 1С:Бухгалтерии (начиная с 3.0.100) мастер перехода содержит встроенную кнопку «Исправить ошибки», которая умеет автоматически вычищать многие проблемы, мешающие выгрузке. При обслуживании нескольких баз процесс их обновления, тестирования и резервного копирования можно автоматизировать с помощью программы для автоматического обновления и тестирования баз 1С.

Шаг 3. Программный поиск и удаление «битых» записей

Если тестирование и исправление не помогло, рассмотрим более детальный метод. Мы можем программно обратиться к проблемным регистрам и удалить записи, у которых регистратор равен NULL или является «битой ссылкой» (Объект не найден).

Разберем пример кода для очистки записей в одном из проблемных регистров из нашего списка, например, РегистрСведений.ПлановыеНачисления:


// Пример программной очистки записей без регистратора
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Т.Регистратор КАК Регистратор
    |ИЗ
    |	РегистрСведений.ПлановыеНачисления КАК Т
    |ГДЕ
    |	Т.Регистратор.Ссылка ЕСТЬ NULL";

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

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

Этот метод следует применить ко всем регистрам, перечисленным в логе ошибки (СтандартныеВычетыНаДетейНДФЛ, УплатаНДФЛНалоговымиАгентамиКРаспределению, КадроваяИсторияСотрудников и др.). Обратите внимание, что для регистров накопления используется аналогичный подход через РегистрыНакопления...СоздатьНаборЗаписей(). В качестве готовой альтернативы программной очистке подойдёт обработка для восстановления и удаления битых ссылок.

Шаг 4. Особенности выгрузки при выделении организации

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

  1. Перед выгрузкой во Фреш выполните полное удаление всех помеченных на удаление объектов.
  2. Убедитесь, что база является автономной (не подчиненной в узле обмена).
  3. Проверьте регистры сведений, связанные с НДФЛ и зарплатой. Часто ошибки возникают из-за того, что в локальной базе велся учет по нескольким организациям, а при переносе одной из них данные по регистрам НДФЛКПеречислению перенеслись не полностью.

Итоги и рекомендации

Выясним основной алгоритм действий для исправления ситуации:

Следуя этим шагам, вы устраните препятствия для миграции, и ваша база будет успешно развернута в облачном сервисе 1С:Фреш.

← На главную