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