Почему после обновления ЗУП 3.1 пропали документы из общих журналов и как их вернуть?

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

Ситуация, когда после планового обновления конфигурации 1С:Зарплата и Управление персоналом 3.1 (особенно начиная с версий ветки 3.1.11 и выше) пользователи обнаруживают «пропажу» документов, является довольно распространенной. Примечательно, что документы не исчезают бесследно: они доступны в специализированных списках (например, «Приемы, переводы, увольнения»), по ним сформированы корректные движения в регистрах, но в общих журналах, таких как Кадровые документы или Все начисления, их нет. Рассмотрим подробно причины этого поведения и разберем по шагам методы исправления ситуации.

Анализируем причину: почему документы «невидимы»?

Для начала разберем внутреннюю архитектуру современных типовых решений на платформе 1С:Предприятие 8.3. В конфигурации ЗУП 3.1 для оптимизации производительности при работе с большими объемами данных разработчики отказались от прямого обращения к таблицам документов в динамических списках общих журналов. Вместо этого используется механизм вспомогательных регистров, таких как РегистрСведений.РеестрДокументов и РегистрСведений.СоставДокументовЗарплатаКадры.

Когда вы открываете журнал Кадровые документы, система выполняет запрос не к таблице Документ.ПриемНаРаботу, а к вышеупомянутым регистрам. Проанализируем пример запроса, который лежит в основе динамического списка:


ВЫБРАТЬ
    ЖурналДокументовКадровыеДокументы.Ссылка КАК Ссылка,
    ЖурналДокументовКадровыеДокументы.Дата КАК Дата,
    // ... другие поля ...
ИЗ
    ЖурналДокументов.КадровыеДокументы КАК ЖурналДокументовКадровыеДокументы
{ГДЕ
    (ИСТИНА В
            (ВЫБРАТЬ ПЕРВЫЕ 1
                ИСТИНА
            ИЗ
                РегистрСведений.СоставДокументовЗарплатаКадры КАК СоставДокументовЗарплатаКадры
            ГДЕ
                СоставДокументовЗарплатаКадры.ФизическоеЛицо = &ФизическоеЛицо
                И ЖурналДокументовКадровыеДокументы.Ссылка = СоставДокументовЗарплатаКадры.ДокументФизическогоЛица))}

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

Метод 1: Полное перестроение структуры (через удаление расширения)

Этот метод является наиболее радикальным, но и самым эффективным, если проблема вызвана некорректной реструктуризацией. Рассмотрим его по шагам:

  1. Создание резервной копии. Прежде чем производить любые манипуляции со структурой данных, обязательно создайте копию базы.
  2. Выгрузка данных расширения. Если ваше расширение добавляет новые реквизиты, данные в которых важны, воспользуйтесь обработкой ВыгрузкаЗагрузкаДанныхXML. Выгрузите только те объекты, которые содержат данные из расширения.
  3. Удаление расширения. Перейдите в меню Администрирование — Печатные формы, отчеты и обработки — Расширения и полностью удалите расширение, которое вносит изменения в структуру «пропавших» документов.
  4. Тестирование и исправление (ТиИ). Запустите базу в режиме Конфигуратора. Откройте Администрирование — Тестирование и исправление. Выберите пункты:
    • Реиндексация таблиц информационной базы.
    • Проверка логической целостности.
    • Реструктуризация таблиц информационной базы.
    Нажмите «Выполнить». Этот процесс заново сформирует таблицы журналов и индексы без влияния расширения.
  5. Возврат расширения. Загрузите расширение обратно в информационную базу.
  6. Загрузка данных. С помощью той же обработки XML верните данные в реквизиты расширения.

Проанализируем ситуацию: после удаления расширения и проведения ТиИ система восстанавливает связи в Реестре документов, так как структура объектов становится «чистой» с точки зрения типовой конфигурации.

Метод 2: Программное обновление записей реестра

Если вы не хотите прибегать к удалению расширения, можно попробовать инициировать обновление вспомогательных данных программным путем. Выясним причину: часто достаточно просто перезаписать документ, чтобы сработал подписка на событие, обновляющая Реестр документов.

Рассмотрим пример кода на встроенном языке 1С, который можно запустить во внешней обработке для принудительного обновления:


Процедура ОбновитьРеестрДокументов()
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ПриемНаРаботу.Ссылка КАК Ссылка
        |ИЗ
        |   Документ.ПриемНаРаботу КАК ПриемНаРаботу
        |ГДЕ
        |   ПриемНаРаботу.Проведен = ИСТИНА";
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ОбъектДок = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
        Попытка
            // Используем режим записи без проведения, чтобы не менять движения
            ОбъектДок.Записать(РежимЗаписиДокумента.Запись);
            Сообщить("Обновлен документ: " + ОбъектДок);
        Исключение
            Сообщить("Ошибка при записи: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;
КонецПроцедуры

При выполнении метода Записать() платформа вызывает стандартные механизмы БСП (Библиотеки стандартных подсистем), которые отвечают за актуализацию данных в журналах. В большинстве случаев это возвращает «пропавшие» записи в списки.

Метод 3: Использование типовых процедур обновления данных

В ЗУП 3.1 предусмотрены встроенные механизмы для исправления подобных коллизий. Рассмотрим подробнее работу с формой «Обслуживание».

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

Важные рекомендации по работе с расширениями

Выясним, как избежать подобных проблем в будущем. Критически важно при создании расширений соблюдать следующие правила:

Проанализируем итог: проблема отсутствия документов в журналах 1С 8.3 — это почти всегда проблема индексации данных в реестрах, а не физическая пропажа объектов. Использование реструктуризации и программной перезаписи объектов позволяет полностью восстановить работоспособность системы без потери данных.

← На главную