При работе с крупными информационными базами 1С, особенно на платформе 8.3.13 в связке с MS SQL Server 2012, администраторы и разработчики иногда сталкиваются с пугающим явлением: документы в журнале внезапно исчезают или отображаются в виде «пустых строк». При этом сами документы физически существуют, доступны через список документов и сохраняют свои данные. Рассмотрим подробно, почему это происходит и как вернуть данные в кадровый журнал.
Для начала разберем внутреннюю механику работы 1С. В платформе 1С:Предприятие журналы документов — это не просто виртуальное представление. На уровне СУБД (SQL) для каждого журнала создается отдельная физическая таблица (обычно с префиксом _DocumentJournal). Когда вы записываете документ ПриемНаРаботу, платформа одновременно вносит данные в основную таблицу документа и в таблицу журнала.
Проблема «пустых граф» возникает из-за рассинхронизации этих таблиц. Часто это случается после процедуры «Тестирования и исправления» (ТиИ), когда система находит битые ссылки и пытается их «починить», создавая объекты-заглушки или очищая поля. Если в процессе ТиИ произошел сбой или структура индексов SQL была нарушена, записи в таблице журнала перестают корректно ссылаться на данные документов.
Это самый быстрый и эффективный метод «заставить» платформу 1С полностью перестроить физическую таблицу журнала в SQL. Если стандартное тестирование и исправление не помогло, мы выполним фиктивное изменение структуры метаданных.
Разберем по шагам:
ТехническаяГрафа._DocumentJournal.Если манипуляции с метаданными не помогли, значит, флаги регистрации документов в журнале повреждены на уровне записей. Обычное перепроведение вручную может игнорироваться платформой, если она считает, что данные не менялись. Нам нужно принудительно вызвать метод записи документа.
Рассмотрим пример кода обработки, которая поможет «протолкнуть» документы обратно в журнал:
Выборка = Документы.ПриемНаРаботу.Выбрать(ДатаНачала, ДатаКонца);
Пока Выборка.Следующий() Цикл
ОбъектДок = Выборка.ПолучитьОбъект();
// Устанавливаем режим загрузки, чтобы не срабатывали лишние проверки и подписки
ОбъектДок.ОбменДанными.Загрузка = Истина;
Попытка
// Записываем документ без перепроведения, только для обновления записей в журнале
ОбъектДок.Записать(РежимЗаписиДокумента.Запись);
Сообщить("Документ обновлен: " + ОбъектДок);
Исключение
Сообщить("Ошибка при обновлении: " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
Важно помнить, что использование ОбменДанными.Загрузка = Истина позволяет избежать выполнения кода в процедурах ПередЗаписью и ПриЗаписи, что критично, если вы не хотите изменить текущие движения документа по регистрам расчета или бухгалтерии.
Ситуация, когда новые документы отображаются корректно, а старые — нет, часто указывает на проблему кэширования или специфические ошибки версии 8.3.13.
Проанализируем действия по очистке системы:
C:\Program Files\1cv8\srvinfo\reg_1541).snacc и config (предварительно сделав бэкап). Это очистит глобальный кэш конфигурации и сеансов.Также проверим настройки самого SQL Server 2012. Для корректной работы с платформой 8.3 уровень совместимости базы данных (Compatibility Level) должен соответствовать версии SQL. Выполним проверку через SQL Management Studio:
Щелкните правой кнопкой на базе данных -> Properties -> Options -> Compatibility level. Для SQL 2012 он должен быть установлен в SQL Server 2012 (110). Если стоит меньшее значение, это может вызывать ошибки в работе виртуальных таблиц журналов.
Выясним причину, по которой колонки отображаются пустыми. Даже если записи есть, платформа может не «понимать», какой реквизит документа ПриемНаРаботу соответствует графе Организация в журнале.
Проанализируем настройки журнала:
КадровыйЖурнал.Организация, Сотрудник, Номер) проверьте список в правой части окна.ПриемНаРаботу стоит галочка и выбран соответствующий реквизит. Если после ТиИ эти связи «слетели», графа будет пустой, хотя документ в списке присутствует.Если под одним пользователем журнал отображается некорректно (пустые строки), а под другим (новым) — всё хорошо, проблема кроется в хранилище настроек данных. В обычных формах настройки списков и отборов сохраняются в системных таблицах базы.
Рассмотрим процесс очистки:
Зайдите в базу под пользователем с правами администратора. Перейдите в меню Сервис — Настройки пользователя — Очистка настроек (путь может отличаться в зависимости от конфигурации «Хьюмен Системс»). Найдите настройки для формы «Кадровый журнал» и удалите их для проблемного пользователя. Это сбросит все кэшированные фильтры и пользовательские представления колонок.
Подведем итог: наиболее вероятным решением является Решение №1 (фиктивное изменение состава журнала), так как оно устраняет физическую рассинхронизацию таблиц SQL, возникшую после процедуры исправления битых ссылок.