В современных конфигурациях на платформе 1С:Предприятие 8.3, таких как УТ 11.5, ERP 2.5 или КА 2.5, пользователи часто сталкиваются с неприятной ситуацией: в списках документов (например, в журнале «Документы закупки» или «Документы продажи») одна и та же накладная отображается дважды. При этом документы имеют абсолютно идентичные номера, даты и суммы. Самое странное происходит при попытке работы с ними — если мы отменим проведение одного «дубля», второй автоматически становится непроведенным. Это прямо указывает на то, что физически в базе данных существует только один объект, но интерфейс отображает его многократно.
В этой статье мы подробно разберем, почему возникают такие фантомные записи, проанализируем механизм работы оптимизации списков в 1С и рассмотрим пошаговые инструкции по исправлению этой ошибки.
Для начала посмотрим на техническую составляющую. Чтобы списки документов открывались мгновенно даже при наличии миллионов записей, разработчики 1С реализовали специальный механизм оптимизации. Вместо того чтобы обращаться напрямую к таблицам документов (которые могут быть очень «тяжелыми»), динамические списки в журналах строятся по вспомогательному регистру сведений РеестрДокументов.
Записи в этом реестре жестко связаны со служебным справочником КлючиРеестраДокументов. Ошибка возникает в тот момент, когда для одного физического документа система по ошибке создает две или более записи в реестре или два разных ключа. Проанализируем ситуацию, описанную на форуме: автор заметил, что проблема часто проявляется у контрагентов, которые одновременно являются и поставщиками, и покупателями. В таких случаях система может ошибочно сформировать записи реестра сразу по двум «веткам» аналитики, что и приводит к двоению в общем журнале.
К основным причинам сбоя можно отнести:
ПередЗаписью или ПриЗаписи, которые вызывают повторное обновление движений.Это самый быстрый и эффективный метод, который помог автору темы. Он заключается в использовании встроенного механизма обслуживания ключей реестра. Выполним следующие шаги:
КлючиРеестраДокументов.После выполнения этих действий рекомендуется обновить журнал документов (клавиша F5). В большинстве случаев фантомные строки исчезнут сразу.
Если ручное удаление ключей не помогло, нам необходимо принудительно заставить систему пересчитать РеестрДокументов. Разберем по шагам, как это сделать без написания сложного кода.
Иногда помогает стандартная процедура «Тестирование и исправление» (ТиИ) через Конфигуратор, но важно выбрать правильные параметры. Обычная проверка ссылочной целостности здесь бессильна, так как ссылки верны. Нам нужен пункт «Пересчет итогов». Однако, для файловых баз (как в случае автора) эффективнее использовать специализированные обработки по обновлению реестра документов, которые входят в состав «Инструментов разработчика» или доступны в скрытых настройках раздела «Обслуживание».
Рассмотрим пример того, как программно инициировать обновление записей для конкретного документа, если дублей немного:
// Пример программного обновления записей реестра для документа
ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
// Установка признака необходимости обновления реестра
ДокументОбъект.ДополнительныеСвойства.Вставить("ПерезаписатьРеестрДокументов", Истина);
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Этот код заставляет систему пересмотреть ключи аналитики именно для этого объекта и создать корректную запись в РеестрДокументов.
Чтобы проблема не повторялась в будущем, проанализируем состояние регламентных заданий в базе. За актуальность данных в списках часто отвечают фоновые задачи. Выясним, все ли у нас настроено правильно:
Текстовое описание объектов и задачи по обновлению индексов выполняются без ошибок.Если в вашей базе включено отложенное проведение, посмотрим на настройки в подразделе «Проведение документов». Иногда дубли возникают из-за того, что основная запись в реестр создается при записи документа пользователем, а фоновое задание «дописывает» вторую запись при окончательном расчете итогов. Попробуйте на время отключить фоновое проведение для проверки гипотезы.
Подведем итоги и сформулируем правила профилактики этой ошибки. Если вы столкнулись с этой проблемой один раз — достаточно очистки через КлючиРеестраДокументов. Если же дубли появляются постоянно:
РегистрСведений.РеестрДокументов.Таким образом, мы разобрали сложную техническую проблему, связанную с механизмами оптимизации 1С. Помните, что появление визуальных дублей — это не порча данных, а «дребезг» вспомогательных таблиц, который успешно лечится штатными средствами системы.