Как исправить отображение пустых строк и пропажу документов в кадровом журнале 1С?

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

При работе с крупными информационными базами 1С, особенно на платформе 8.3.13 в связке с MS SQL Server 2012, администраторы и разработчики иногда сталкиваются с пугающим явлением: документы в журнале внезапно исчезают или отображаются в виде «пустых строк». При этом сами документы физически существуют, доступны через список документов и сохраняют свои данные. Рассмотрим подробно, почему это происходит и как вернуть данные в кадровый журнал.

Анализ причин возникновения «глюка» кадрового журнала

Для начала разберем внутреннюю механику работы 1С. В платформе 1С:Предприятие журналы документов — это не просто виртуальное представление. На уровне СУБД (SQL) для каждого журнала создается отдельная физическая таблица (обычно с префиксом _DocumentJournal). Когда вы записываете документ ПриемНаРаботу, платформа одновременно вносит данные в основную таблицу документа и в таблицу журнала.

Проблема «пустых граф» возникает из-за рассинхронизации этих таблиц. Часто это случается после процедуры «Тестирования и исправления» (ТиИ), когда система находит битые ссылки и пытается их «починить», создавая объекты-заглушки или очищая поля. Если в процессе ТиИ произошел сбой или структура индексов SQL была нарушена, записи в таблице журнала перестают корректно ссылаться на данные документов.

Решение 1: Принудительное пересоздание таблицы журнала (Metadata Update)

Это самый быстрый и эффективный метод «заставить» платформу 1С полностью перестроить физическую таблицу журнала в SQL. Если стандартное тестирование и исправление не помогло, мы выполним фиктивное изменение структуры метаданных.

Разберем по шагам:

  1. Откроем базу в режиме Конфигуратор.
  2. Найдем в дереве метаданных нужный журнал (в нашем случае — «КадровыйЖурнал» или аналогичный).
  3. Добавим в него новую Графу с произвольным названием, например, ТехническаяГрафа.
  4. В свойствах этой графы на закладке «Данные» не нужно выбирать никаких реквизитов.
  5. Выполним обновление конфигурации базы данных (клавиша F7). В этот момент 1С увидит изменение структуры и инициирует реструктуризацию таблицы _DocumentJournal.
  6. После успешного обновления зайдем в режим «Предприятие» и проверим журнал. В 90% случаев данные появятся.
  7. Вернемся в Конфигуратор, удалим созданную графу и снова обновим конфигурацию (F7), чтобы вернуть систему в исходное состояние.

Решение 2: Программное обновление записей в журнале

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

Рассмотрим пример кода обработки, которая поможет «протолкнуть» документы обратно в журнал:


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

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

Решение 3: Очистка серверного кэша и проверка SQL

Ситуация, когда новые документы отображаются корректно, а старые — нет, часто указывает на проблему кэширования или специфические ошибки версии 8.3.13.

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

  1. Остановим службу Агент сервера 1С:Предприятия.
  2. Перейдем в каталог данных сервера (обычно это C:\Program Files\1cv8\srvinfo\reg_1541).
  3. Удалим содержимое папок snacc и config (предварительно сделав бэкап). Это очистит глобальный кэш конфигурации и сеансов.
  4. Запустим службу сервера.

Также проверим настройки самого SQL Server 2012. Для корректной работы с платформой 8.3 уровень совместимости базы данных (Compatibility Level) должен соответствовать версии SQL. Выполним проверку через SQL Management Studio:

Щелкните правой кнопкой на базе данных -> Properties -> Options -> Compatibility level. Для SQL 2012 он должен быть установлен в SQL Server 2012 (110). Если стоит меньшее значение, это может вызывать ошибки в работе виртуальных таблиц журналов.

Решение 4: Проверка соответствия граф в Конфигураторе

Выясним причину, по которой колонки отображаются пустыми. Даже если записи есть, платформа может не «понимать», какой реквизит документа ПриемНаРаботу соответствует графе Организация в журнале.

Проанализируем настройки журнала:

Решение 5: Сброс настроек пользователя

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

Рассмотрим процесс очистки:

Зайдите в базу под пользователем с правами администратора. Перейдите в меню Сервис — Настройки пользователя — Очистка настроек (путь может отличаться в зависимости от конфигурации «Хьюмен Системс»). Найдите настройки для формы «Кадровый журнал» и удалите их для проблемного пользователя. Это сбросит все кэшированные фильтры и пользовательские представления колонок.

Подведем итог: наиболее вероятным решением является Решение №1 (фиктивное изменение состава журнала), так как оно устраняет физическую рассинхронизацию таблиц SQL, возникшую после процедуры исправления битых ссылок.

← На главную