Каждый практикующий специалист или администратор баз данных «1С:Предприятие» рано или поздно сталкивается с загадочным поведением интерфейса: при открытии журналов документов (например, «Документы продажи» или «Документы закупки») одна и та же накладная или заказ отображается несколько раз. При этом физически документ в базе данных существует в единственном экземпляре, его номер и дата совпадают во всех строчках, а при попытке пометить на удаление одну строку — помечаются и все остальные. В то же время в обычных списках конкретных документов (например, только «Реализации товаров и услуг») всё отображается корректно.
В этой статье мы подробно разберем, почему возникает этот сбой, как устроена архитектура хранения списков в современных конфигурациях на базе ERP-платформы (включая «1С:Управление торговлей», «1С:Комплексная автоматизация» и «1С:ERP»), и по шагам восстановим корректное отображение данных без программирования и изменения платформы.
Прежде чем перейти к исправлению, давайте проанализируем архитектурную модель современных конфигураций 1С. В старых решениях (например, в «Управлении производственным предприятием» редакции 1.3 или «Управлении торговлей» редакции 10.3) динамические списки документов строились напрямую по таблицам самих документов. Это работало быстро на небольших базах, но вызывало колоссальные задержки при росте объемов данных и необходимости строить сводные журналы по разным видам документов.
Для ускорения работы в современных конфигурациях ERP-линейки разработчики фирмы 1С применили оптимизацию: они вынесли реестр всех документов в отдельный служебный регистр сведений — РеестрДокументов. Динамические списки сводных журналов («Документы продажи (все)», «Документы закупки (все)», «Внутренние документы») обращаются именно к этому регистру, а не к физическим таблицам документов. Это позволяет мгновенно открывать списки и выполнять по ним поиск.
Однако для обеспечения гибкой фильтрации по складам, партнерам, контрагентам и договорам, регистр сведений РеестрДокументов связывается левым соединением со специальным служебным справочником — КлючиРеестраДокументов. Схематично запрос динамического списка выглядит следующим образом:
ВЫБРАТЬ
Реестр.Ссылка КАК Ссылка,
Реестр.Дата КАК Дата,
Реестр.Номер КАК Номер,
Реестр.Проведен КАК Проведен,
Ключи.Партнер КАК Партнер,
Ключи.Контрагент КАК Контрагент,
Ключи.Склад КАК Склад
ИЗ
РегистрСведений.РеестрДокументов КАК Реестр
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиРеестраДокументов КАК Ключи
ПО Реестр.КлючАналитики = Ключи.Ссылка
Проанализируем эту конструкцию. Если в справочнике КлючиРеестраДокументов для одного и того же набора аналитики (или из-за технических сбоев) создается несколько одинаковых элементов с разными внутренними идентификаторами (GUID), то при выполнении левого соединения СУБД возвращает столько строк для одного документа, сколько дублирующихся ключей сопоставилось с записью регистра. Именно в этот момент и происходит визуальное «затроение» или «задвоение» строк в интерфейсе пользователя.
Выясним, из-за чего ломается ссылочная целостность служебных таблиц. На практике выделяют несколько ключевых факторов:
Важно понимать: обновление технологической платформы 1С или простое обновление конфигурации здесь не помогут, так как проблема кроется исключительно в логической целостности самих данных в базе.
Для исправления этой ошибки нам не придется писать код или вручную чистить таблицы SQL. Разработчики 1С уже предусмотрели штатные механизмы самодиагностики и восстановления реестра. Рассмотрим, как запустить исправление по шагам.
Важное предупреждение: перед выполнением любых сервисных операций в базе данных обязательно создайте резервную копию (резервный архив) вашей информационной базы! Все действия рекомендуется выполнять в монопольном режиме, когда в системе нет активных пользователей.
Для доступа к служебным справочникам нам понадобятся полные права и специальный режим отображения меню.
Теперь откроем список служебных ключей, где локализована наша ошибка.
Ключи реестра документов.При открытии формы списка этого справочника система автоматически инициирует фоновый анализ таблиц на предмет логических несоответствий. Если дубликаты будут обнаружены, система выведет предупреждающее сообщение в верхней части экрана.
После завершения работы процедур автоматического исправления нам необходимо проверить работу журналов.
Строки должны перестать дублироваться, приняв свой стандартный и корректный вид.
Если автоматическая очистка через форму списка справочника не принесла результатов или предупреждающая ссылка не появилась, мы можем запустить принудительное обновление регистров с помощью специализированного инструмента.
Исправление.РеестрДокументов и перезапишет их на основе актуальных документов и правильных ключей аналитики.Чтобы избежать повторного затроения документов в списках, рекомендуем придерживаться следующих правил при администрировании баз данных:
Мы подробно разобрали внутренние механизмы оптимизации динамических списков в решениях 1С и научились быстро и безопасно устранять неприятный визуальный баг с дублированием строк. Этот метод вернет удобство работы пользователям и сохранит целостность вашей учетной системы.