Как убрать удаленные организации и статьи затрат («Объект не найден») из отчетов 1С?

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

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

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

Выясняем техническую причину возникновения проблемы

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

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

Решение 1. Полный пересчет итогов в Конфигураторе

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

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

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

Решение 2. Управление итогами в режиме 1С:Предприятие

Если у вас нет возможности выгнать пользователей из базы для монопольной работы в Конфигураторе, решить проблему можно непосредственно в пользовательском режиме. Рассмотрим этот альтернативный вариант:

  1. Перейдите в раздел Администрирование — Обслуживание — Регламентные операции — Управление итогами и агрегатами.
  2. В открывшемся списке найдите проблемный регистр (например, ДвиженияДенежныхСредств).
  3. Используйте команды ручного управления для актуализации и расчета итогов по выбранному регистру на текущую дату.

Решение 3. Точечный программный пересчет через внешнюю обработку

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

Разберем пример программного кода для пересчета итогов регистра накопления ДвиженияДенежныхСредств:


// Полный пересчет итогов конкретного регистра
РегистрыНакопления.ДвиженияДенежныхСредств.ПересчитатьИтоги();

// Альтернативный вариант: пересчет итогов только за конкретный проблемный период
НачалоПериода = '20230101000000'; // Дата начала проблемного интервала
КонецПериода  = '20231231235959'; // Дата окончания проблемного интервала
РегистрыНакопления.ДвиженияДенежныхСредств.ПересчитатьИтогиЗаПериод(НачалоПериода, КонецПериода);

Решение 4. Принудительный сброс и перестроение таблиц итогов

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

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


// Отключение использования итогов (очищает таблицы итогов в БД)
РегистрыНакопления.ДвиженияДенежныхСредств.УстановитьИспользованиеИтогов(Ложь);

// Повторное включение (вызывает полное перестроение таблиц итогов с нуля)
РегистрыНакопления.ДвиженияДенежныхСредств.УстановитьИспользованиеИтогов(Истина);

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

Решение 5. Обновление агрегатов (для оборотных регистров)

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

Чтобы обновить агрегаты программно, выполните следующий код:


// Обновление существующих агрегатов регистра
РегистрыНакопления.ДвиженияДенежныхСредств.ОбновитьАгрегаты();

// Либо полное перестроение агрегатных таблиц
РегистрыНакопления.ДвиженияДенежныхСредств.ПерестроитьИспользованиеАгрегатов();

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

← На главную