Почему один документ отображается в списке несколько раз и как это исправить в 1С?

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

В современных конфигурациях на базе платформы 1С:Предприятие 8.3, таких как Управление торговлей 11 (УТ 11), ERP Управление предприятием 2 и Комплексная автоматизация 2, пользователи часто сталкиваются с неприятным визуальным эффектом: один и тот же документ (например, «Списание безналичных денежных средств») отображается в списке двумя, тремя или более строками. При этом, если пометить на удаление одну строку, помечаются и все остальные, а консоль запросов подтверждает, что в базе данных существует только один экземпляр объекта. Разберем подробно, почему это происходит и как привести интерфейс в порядок.

Выясним причину: как работает механизм «Реестра документов»

Для начала проанализируем ситуацию с технической точки зрения. В старых версиях 1С динамические списки обращались напрямую к таблицам документов. В крупных базах это приводило к замедлению работы, если в списке нужно было вывести данные из разных типов документов (например, в журнале безналичных платежей). Чтобы ускорить работу, разработчики фирмы «1С» внедрили механизм реестра документов.

Этот механизм состоит из двух ключевых компонентов:

  1. Регистр сведений РеестрДокументов: это плоская таблица, в которой хранятся основные реквизиты документов (дата, номер, сумма, организация и т.д.). Именно из этого регистра система берет данные для отображения в списке.
  2. Справочник КлючиРеестраДокументов: вспомогательный объект, который хранит уникальные комбинации ключевых реквизитов. Каждая запись в регистре сведений ссылается на элемент этого справочника.

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

Шаг 1: Проверка регистра сведений и справочника ключей

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

  1. Откроем «Функции для технического специалиста» (или «Все функции»).
  2. Найдем регистр сведений РеестрДокументов.
  3. Установим отбор по ссылке на наш проблемный документ.

Если в результате отбора мы видим несколько строк вместо одной — причина найдена. Каждая такая строка соответствует отдельному элементу в справочнике КлючиРеестраДокументов. Часто это случается при программной загрузке данных (например, из клиент-банка), когда документ записывается несколько раз, и система не успевает корректно обновить кэш ключей.

Шаг 2: Стандартный метод исправления через перезапись

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

  1. В списке документов выделите одну или несколько проблемных строк.
  2. Нажмите правую кнопку мыши и выберите пункт «Изменить выделенные».
  3. В открывшемся окне не нужно менять никакие реквизиты. Просто нажмите кнопку «Изменить параметры» (или аналогичную, запускающую процесс).
  4. Система произведет циклическую перезапись объектов. В этот момент сработают подписки на события ПриЗаписи, которые должны очистить старые записи в РеестрДокументов и создать одну актуальную.

Шаг 3: Использование регламентных заданий

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

Попробуем запустить его принудительно:

  1. Перейдем в раздел НСИ и администрирование — Обслуживание — Регламентные операции — Регламентные и фоновые задания.
  2. Найдем в списке указанное задание.
  3. Нажмем кнопку «Выполнить сейчас».

Дождемся завершения выполнения и проверим список документов. Часто системные механизмы самоочистки срабатывают именно на этом этапе.

Шаг 4: Глубокая очистка через удаление дублей ключей

Если предыдущие методы не помогли, значит, проблема засела глубже — в справочнике КлючиРеестраДокументов. Рассмотрим пример, когда для одной организации и одного типа документа создалось несколько идентичных ключей. В этом случае поможет типовая обработка «Поиск и удаление дублей».

Важно: перед выполнением подобных операций обязательно создайте резервную копию базы данных!

Алгоритм работы:

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

Программное исправление (для разработчиков)

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


// Пример принудительного обновления реестра для документа
ДокументОбъект = ПроблемнаяСсылка.ПолучитьОбъект();
// Установка признака необходимости обновления (зависит от версии БСП)
ДокументОбъект.ДополнительныеСвойства.Вставить("ПересчитатьРеестрДокументов", Истина);
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);

Также проанализируем возможность полной очистки регистра. В исключительных случаях, когда объем поврежденных данных велик, программисты прибегают к полной очистке РегистрСведений.РеестрДокументов с последующим запуском процедуры РеестрДокументов.ОбновитьВесьРеестр() (название метода может отличаться в зависимости от версии конфигурации). Это запустит полное переформирование списка, что может занять длительное время, но гарантированно уберет все визуальные дубли.

Как не допустить повторения проблемы?

Выясним причину появления таких «хвостов». Чаще всего это происходит при использовании сторонних обработок загрузки из банк-клиента или обменов данными, которые записывают документы в режиме ОбменДанными.Загрузка = Истина. В этом режиме многие стандартные проверки и обновления регистров (включая реестр документов) отключаются.

Чтобы избежать этого в будущем, рекомендуем:

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

← На главную