Почему в списках 1С:Управление торговлей 11 создаются два одинаковых документа и как это исправить?

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

При работе в современных конфигурациях на базе 1С:ERP и 1С:Управление торговлей 11 пользователи могут столкнуться с пугающим явлением: после записи или проведения документа (например, Заказ поставщику или Реализация товаров и услуг) в списке отображаются две абсолютно идентичные строки. У них совпадает номер, дата, контрагент и сумма. При попытке отменить проведение одного документа — отменяется и второй. Физически документ остается один, остатки по складу не удваиваются, но работать с таким списком становится невозможно.

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

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

Для начала проанализируем ситуацию с технической стороны. В конфигурациях «нового поколения» (УТ 11, КА 2, ERP) для ускорения отрисовки динамических списков используется специальный механизм. Вместо того чтобы обращаться напрямую к таблицам документов, система считывает данные из специального регистра сведений — РеестрДокументов.

Почему происходит удвоение? Каждой уникальной ссылке на документ в этом регистре должна соответствовать ровно одна запись. Однако из-за сбоев при обновлении конфигурации, некорректной работы системы разграничения прав доступа (RLS) или аварийных завершений сеанса, для одного физического документа создаются две (и более) записи в регистре. Динамический список честно отображает обе записи, создавая иллюзию дублирования данных.

Рассмотрим по шагам, как диагностировать и исправить эту ошибку.

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

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

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

Способ 2: Работа со справочником «Ключи реестра документов»

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

Часто в модуле менеджера справочника при выполнении кода можно встретить ошибку вида: Значение не является значением объектного типа (Скопировать). Это происходит в процедуре УправлениеДоступомСлужебный. Разберем пример кода, который может вызывать сбой при попытке системы автоматически почистить дубли:


ТекущийСоставИзменений = СоставИзменений.Скопировать(, ОписаниеЗависимыхТаблиц.Ключ);
// Ошибка возникает, если ОписаниеЗависимыхТаблиц или его свойство Ключ не определены

Чтобы решить проблему вручную, выполним следующие действия:

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

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

Иногда корни проблемы уходят в механизм RLS (права на уровне записей). Если ключи доступа сформированы неверно, динамический список может отображать документ несколько раз для разных групп доступа.

Проанализируем ситуацию через настройки системы:

Технический разбор: Почему стандартное удаление может давать сбой

В Сообщении 7 исходной темы приводится стек ошибки. Проанализируем его. Ошибка возникает в общем модуле УправлениеДоступомСлужебный при попытке выполнить метод ЗапланироватьОбновлениеЗависимыхУстаревшихКлючейДоступаПоЗначениямПолей.

Это говорит о том, что в базе есть записи-сироты или ссылки на удаленные объекты в таблицах прав доступа. Если стандартные средства через интерфейс не помогают, программисту следует воспользоваться консолью запросов, чтобы найти записи в регистре РеестрДокументов, где на одну Ссылку приходится несколько различных записей, и удалить лишние программно, установив признак ОбменДанными.Загрузка = Истина, чтобы обойти проверки в модулях.

Профилактика повторного появления дублей

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

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

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

← На главную