Почему документы не видны в списках 1С:Документооборот после выгрузки/загрузки через XML и как это исправить?

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

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

В этой статье мы подробно разберем, почему так происходит, как устроена архитектура отображения данных в СЭД и какими способами можно вернуть «невидимые» документы в интерфейс пользователя.

Разберем причину: архитектура динамических списков в СЭД

В большинстве типовых конфигураций 1С динамические списки строятся непосредственно на таблицах справочников или документов. Однако «1С:Документооборот» — это высоконагруженная система с очень сложной моделью разграничения прав доступа (RLS). Если бы система при каждом открытии списка выполняла тяжелые запросы с множеством соединений для проверки прав и получения дополнительных реквизитов, производительность была бы крайне низкой.

Чтобы избежать этого, разработчики фирмы «1С» применили механизм вспомогательных регистров. Основной из них для нашего случая — РегистрСведений.ДанныеВнутреннихДокументов. Именно этот регистр служит «подложкой» для динамического списка. Когда вы открываете список внутренних документов, система читает данные не из справочника ВнутренниеДокументы, а из этого регистра.

Проанализируем ситуацию с загрузкой XML. При использовании стандартной обработки выгрузки/загрузки по умолчанию устанавливается режим ОбменДанными.Загрузка = Истина. В этом режиме:

  1. Система записывает объект «как есть», не выполняя проверки и обработчики событий.
  2. Не отрабатывает процедура ПриЗаписи в модуле объекта.
  3. Следовательно, не запускаются механизмы обновления вспомогательных данных и пересчета прав доступа.

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

Способ 1. Принудительное обновление вспомогательных данных

Это самый правильный и «штатный» способ решения проблемы. В составе конфигурации «1С:Документооборот» предусмотрены специальные процедуры для актуализации данных в регистрах. Рассмотрим, как запустить процесс обновления.

Если документов немного, можно воспользоваться встроенной обработкой «Обслуживание» — «Регламентные и фоновые задания». Нам необходимо убедиться, что выполнено задание «Заполнение данных для поиска документов в списках». Однако часто требуется запустить этот процесс вручную для конкретных типов объектов.

Проанализируем программный метод вызова обновления. Можно создать небольшую внешнюю обработку и выполнить следующий код:


// Пример вызова обновления данных для внутренних документов
Выборка = Справочники.ВнутренниеДокументы.Выбрать();
Пока Выборка.Следующий() Цикл
    // Вызов процедуры обновления из типового модуля
    Делопроизводство.ОбновитьДанныеВнутреннегоДокумента(Выборка.Ссылка);
КонецЦикла;

Этот метод заполнит РегистрСведений.ДанныеВнутреннихДокументов, и объекты появятся в списках.

Способ 2. Массовая перезапись объектов

Если вы не хотите вникать в структуру конкретных процедур обновления, можно воспользоваться универсальным подходом — программной перезаписью объектов. Важно помнить, что перезапись должна происходить с параметром ОбменДанными.Загрузка = Ложь, чтобы сработали все обработчики событий.

Рассмотрим пример кода для массовой обработки:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ВнутренниеДокументы.Ссылка КАК Ссылка
    |ИЗ
    |	Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
    |ГДЕ
    |	ВнутренниеДокументы.ПометкаУдаления = ЛОЖЬ";

РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    ОбъектДокумента = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
    // Устанавливаем режим обмена в Ложь, чтобы сработала логика ПриЗаписи
    ОбъектДокумента.ОбменДанными.Загрузка = Ложь;
    Попытка
        ОбъектДокумента.Записать();
    Исключение
        Сообщить("Ошибка при записи документа: " + ВыборкаДетальныеЗаписи.Ссылка + " - " + ОписаниеОшибки());
    КонецПопытки;
КонецЦикла;

Важный момент: При такой перезаписи могут инициироваться другие процессы, например, старт бизнес-процессов по шаблонам или отправка уведомлений. Будьте осторожны и предварительно проверьте настройки системы в базе-приемнике.

Способ 3. Пересчет дескрипторов и прав доступа

Иногда даже после заполнения регистра данных документы не появляются. Выясним причину: в СЭД за видимость объектов отвечает механизм RLS, базирующийся на дескрипторах доступа. Если записи в регистре ДоступностьОбъектовПоДескрипторам отсутствуют, то даже пользователь с полными правами может не видеть документы в определенных разрезах (так как запросы динамических списков жестко ограничены RLS).

Для решения этой проблемы выполним следующие шаги:

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

Способ 4. Полнотекстовый поиск и индексация

В сообщении на форуме упоминалось, что поиск по названию не дает результатов. Это явный признак того, что данные не попали в индекс полнотекстового поиска (ППС). При загрузке через XML индекс не обновляется мгновенно.

Проанализируем порядок действий для восстановления поиска:

  1. Зайдем в Настройка и администрация — Обслуживание — Полнотекстовый поиск.
  2. Нажмем кнопку «Обновить индекс».
  3. Если это не помогло, выполним «Очистить индекс», а затем заново запустим полное индексирование.

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

Выводы и рекомендации

Проблема «невидимости» объектов после XML-загрузки в «1С:Документооборот» не является ошибкой платформы или конфигурации. Это следствие оптимизированной архитектуры СЭД, которая требует синхронизации основных данных со вспомогательными структурами.

Основные тезисы для закрепления:

Рассмотренные нами методы позволяют быстро восстановить работоспособность системы после миграции данных и обеспечить корректное отображение всех перенесенных документов в интерфейсе пользователей.

← На главную