В процессе эксплуатации конфигурации «1С:Зарплата и управление персоналом 3.1» (особенно на релизах ветки 3.1.10.хх) администраторы и программисты иногда сталкиваются с аномалией: документы КадровыйПеревод перестают отображаться в общем журнале ВсеКадровыеДокументы. Ситуация осложняется тем, что документы видны в списке одноименного типа, но отсутствуют в сводном журнале даже у пользователей с полными правами. В этой статье мы детально разберем причины возникновения этой проблемы и рассмотрим по шагам методы её решения.
Прежде чем переходить к сложным манипуляциям с базой данных, проанализируем стандартные факторы, которые могут влиять на видимость объектов. Зачастую проблема кроется в локальном кэше или некорректном завершении сеанса при обновлении конфигурации.
Рассмотрим обязательный чек-лист первичной проверки:
%AppData%\1C\1Cv8), но и кэш сервера приложений 1С:Предприятие. Это исключает ошибки метаданных, которые могли возникнуть после обновления релиза.Реиндексация таблиц информационной базы и Пересчет итогов. Однако, как показывает практика, для журналов документов стандартное ТИИ не всегда восстанавливает связи в системных таблицах состава журнала.КадровыйПеревод или форму журнала, их следует временно отключить. Важно не просто деактивировать их, а полностью удалить (предварительно сохранив копию), чтобы исключить влияние препроцессоров на формирование динамических списков.Одной из наиболее вероятных причин «исчезновения» документов в ЗУП 3.1 является сбой в подсистеме Управления доступом (БСП). Даже если в настройках программы опция «Ограничивать доступ на уровне записей» (RLS) выключена, механизмы БСП продолжают работать в фоновом режиме, подготавливая данные для возможного включения этой функции.
Выясним причину через проверку специализированных регистров. В версии 3.1.10 произошли серьезные изменения в архитектуре доступа, и система может ошибочно фильтровать документы, если в регистре КлючиДоступаКОбъектам отсутствуют записи для конкретных экземпляров КадровыйПеревод.
Для исправления ситуации выполним следующие действия:
Запустим процедуру обновления параметров доступа. Для этого необходимо перейти в раздел Администрирование — Обслуживание — Управление доступом и нажать на кнопку «Обновить параметры доступа». Если кнопка неактивна или не помогает, воспользуемся обработкой «Заполнение данных для ограничения доступа», которую можно найти через «Функции для технического специалиста».
Проанализируем состояние констант. Иногда «моргание» функциональной опции (например, при прерванном обновлении) приводит к тому, что документ формально существует, но признак его использования в системе сброшен. Попробуйте найти в настройках кадрового учета опции, связанные с кадровым перемещением, и перевключить их (снять флаг — записать — установить флаг — записать).
В платформе 1С документы не динамически собираются в журнал в момент открытия, а регистрируются в специальных таблицах журнала при записи или проведении. Если произошел сбой реструктуризации, записи в таблице журнала для типа КадровыйПеревод могли быть утеряны.
Посмотрим, как можно принудительно восстановить эти записи. Если штатное ТИИ не помогло, можно воспользоваться программным методом перерегистрации. Рассмотрим пример кода, который принудительно перезаписывает документы для их появления в журналах:
Выборка = Документы.КадровыйПеревод.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
// Установка признака обмена, чтобы не менять дату изменения, если нужно
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
Этот метод заставляет платформу пересмотреть состав журналов для каждого документа. Важно: Перед выполнением таких манипуляций всегда делайте резервную копию базы данных!
Если проблему не удается решить системными методами, а документы нужны пользователям «здесь и сейчас», можно прибегнуть к изменению текста запроса в форме журнала через расширение. Рассмотрим ситуацию, когда мы принудительно добавляем данные из таблицы документов, игнорируя стандартный механизм регистрации в журнале.
Рассмотрим реализацию этого метода:
В расширении создадим процедуру-перехватчик ПриСозданииНаСервере для формы журнала ВсеКадровыеДокументы. Нам необходимо модифицировать свойство ТекстЗапроса динамического списка. Пример модификации запроса с использованием ОБЪЕДИНИТЬ:
ТекстЗапроса = Список.ТекстЗапроса;
Дополнение =
"ВЫБРАТЬ
| ДокументКадровыйПеревод.Ссылка КАК Ссылка,
| ДокументКадровыйПеревод.Дата КАК Дата,
| ДокументКадровыйПеревод.ПометкаУдаления КАК ПометкаУдаления,
| ДокументКадровыйПеревод.Номер КАК Номер,
| ДокументКадровыйПеревод.Проведен КАК Проведен,
| ""Кадровый перевод"" КАК ТипДокумента
|ИЗ
| Документ.КадровыйПеревод КАК ДокументКадровыйПеревод";
// Здесь необходимо аккуратно встроить ОБЪЕДИНИТЬ в существующий запрос
// или полностью заменить запрос на кастомный, если оригинальный поврежден
Список.ТекстЗапроса = ТекстЗапроса + " ОБЪЕДИНИТЬ ВСЕ " + Дополнение;
Внимание: Использование ОБЪЕДИНИТЬ в динамических списках может существенно снизить производительность, если документов в базе сотни тысяч. Используйте этот метод только как временную меру.
Проанализируем ситуацию с точки зрения целостности данных. В редких случаях динамический список журнала «ломается», если в базе присутствует документ с пустой датой или незаполненной организацией (если по ней стоит отбор).
Выясним, есть ли «битые» документы, выполнив простой запрос в консоли:
ВЫБРАТЬ
Ссылка,
Номер,
Дата,
Организация
ИЗ
Документ.КадровыйПеревод
ГДЕ
Дата = ДАТАВРЕМЯ(1, 1, 1)
ИЛИ Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
Если такие документы обнаружены, их необходимо либо корректно заполнить, либо удалить, так как они могут блокировать построение индекса журнала на уровне SQL-сервера.
Подводя итог, можно сказать, что отсутствие Кадровых переводов в журнале Все кадровые документы в ЗУП 3.1 чаще всего связано с ошибкой обновления метаданных или сбоем в таблицах ключей доступа БСП.
Алгоритм действий должен быть следующим:
КадровыйПеревод в режиме ОбменДанными.Загрузка = Истина.Следование этим инструкциям позволит вам восстановить работоспособность журналов и обеспечить корректную работу пользователей в программе.