Как убрать дубли документов в журналах 1С:Управление торговлей 11.5?

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

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

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

Выясним причину: почему появляются дубли?

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

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

К основным причинам сбоя можно отнести:

  1. Состояние гонки (Race condition): При фоновом проведении документов несколько процессов могут одновременно пытаться создать ключ реестра.
  2. Ошибки в расширениях: Некорректно написанные обработчики событий ПередЗаписью или ПриЗаписи, которые вызывают повторное обновление движений.
  3. Сбои при обновлении: После перехода на новые релизы УТ 11.5 структура ключей может измениться, а старые записи не очиститься.
  4. Специфика учета: Как упоминалось выше, совмещение ролей поставщика и покупателя у одного партнера.

Способ 1: Использование стандартной команды очистки дублей

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

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

После выполнения этих действий рекомендуется обновить журнал документов (клавиша F5). В большинстве случаев фантомные строки исчезнут сразу.

Способ 2: Пересчет итогов и тестирование реестра

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

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

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


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

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

Способ 3: Настройка регламентных заданий

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

  1. Зайдем в раздел «НСИ и администрирование» — «Обслуживание» — «Регламентные операции».
  2. Проверим список регламентных заданий.
  3. Найдем задания, связанные с очисткой ненужных данных и обслуживанием итогов.
  4. Убедимся, что задание Текстовое описание объектов и задачи по обновлению индексов выполняются без ошибок.

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

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

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

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

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

← На главную