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

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

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

В этой статье мы подробно разберем, почему типовые механизмы ведут себя именно так, проанализируем архитектуру хранения данных в ЗУП 3.1 и выясним, как восстановить видимость данных без полного перепроведения всех документов.

Разберем причину: Режим обмена данными и регистры-реестры

Для начала проанализируем ситуацию с точки зрения платформы 1С. Когда мы используем обработку Универсальный обмен данными в формате XML, загрузка объектов обычно происходит с установленным признаком ОбменДанными.Загрузка = Истина. Это стандартный механизм, который отключает большинство проверок и, что критично в нашем случае, обработчиков событий при записи и проведении документов.

В конфигурации ЗУП 3.1 реализована оптимизированная модель отображения данных. Чтобы формы списков и карточки сотрудников открывались быстро, программа не делает сложные запросы к таблицам документов каждый раз. Вместо этого используются специальные вспомогательные регистры сведений — так называемые реестры. Записи в эти реестры попадают в момент проведения документа через вызов специальных процедур в модулях менеджеров или через подписки на события.

Поскольку загрузка идет в режиме обмена, эти процедуры не вызываются, и вспомогательные регистры остаются пустыми. Документ в базе есть, он проведен, но "витрина" (реестр), из которой карточка сотрудника берет данные, не обновлена.

Решение проблемы с кадровыми документами: Реестр кадровых приказов

Выясним, какой именно объект отвечает за вкладку Кадровые документы. Это регистр сведений РеестрКадровыхПриказов. Если документ (например, ПриемНаРаботу) не зарегистрирован в этом регистре, он никогда не появится в экранном списке карточки сотрудника.

Рассмотрим, как можно решить эту задачу без перепроведения документов, которое может быть нежелательным из-за риска изменения расчетных данных или длительности процесса. Оптимальный вариант — программное обновление реестра. Для этого в типовой конфигурации предусмотрен метод в общем модуле КадровыйУчет.

Проанализируем пример кода, который поможет восстановить записи реестра для загруженных документов:


// Выберем все документы нужного типа за период переноса
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ПриемНаРаботу.Ссылка КАК Ссылка
    |ИЗ
    |	Документ.ПриемНаРаботу КАК ПриемНаРаботу
    |ГДЕ
    |	ПриемНаРаботу.Проведен";

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

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

Этот метод создаст необходимые записи в регистре РеестрКадровыхПриказов, и документы мгновенно появятся в интерфейсе. Аналогичные действия стоит произвести для документов КадровыйПеревод, Увольнение, БольничныйЛист и Отпуск.

Проблема с лицевыми счетами и выплатами

Ситуация с лицевыми счетами сотрудников в ЗУП 3.1 еще более многослойная. Если вы перенесли данные в регистр ЛицевыеСчетаПоЗарплатнымПроектам, но они не видны в карточке, нужно проверить еще два важных момента:

  1. Регистр сведений "Параметры выплаты зарплаты сотрудников": В этом регистре хранится информация о том, какой способ выплаты выбран для сотрудника (через кассу, через банк, по зарплатному проекту). Если запись в этом регистре отсутствует, программа считает, что способ выплаты не задан, и не пытается искать лицевой счет в таблице зарплатного проекта.
  2. Регистр сведений "Роли сотрудников": Этот служебный регистр определяет, в каком качестве выступает физическое лицо в программе. Если он пуст, интерфейс карточки сотрудника может скрывать целые блоки данных, считая, что активных трудовых отношений нет.

Посмотрим на структуру решения для восстановления параметров выплаты. Если мы знаем, что все сотрудники получают деньги на карточку в рамках одного проекта, мы можем программно создать записи в регистре ПараметрыВыплатыЗарплатыСотрудников, указав там основной способ выплаты.

Комплексный подход к исправлению при переносе данных

Если вы только готовитесь к переносу или решили повторить загрузку, рекомендуем включить в правила обмена (КД 2.0) следующие регистры сведений вместе с их регистраторами:

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


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

Подведем итоги

Отсутствие документов в интерфейсе ЗУП 3.1 после загрузки через XML — это не ошибка данных, а следствие работы механизма ОбменДанными.Загрузка = Истина, который пропускает заполнение сервисных регистров-реестров.

Рассмотрим основные выводы:

  1. Всегда проверяйте наличие записей в регистре РеестрКадровыхПриказов, если не видите документов в карточке сотрудника.
  2. Для лицевых счетов критически важно наличие данных в регистре ПараметрыВыплатыЗарплатыСотрудников.
  3. Вместо полного перепроведения (которое может "поплыть" по суммам в прошлом периоде) используйте вызов штатных процедур обновления реестров из общих модулей КадровыйУчет, УчетОтсутствий и других.
  4. При настройке правил конвертации данных (КД) старайтесь включать служебные регистры, помеченные как "Реестр", в план обмена, если вы планируете загружать документы как "уже проведенные".

Таким образом, понимание архитектуры "реестровой" модели ЗУП 3.1 позволяет быстро и безопасно исправлять последствия миграции данных, сохраняя целостность учета и обеспечивая комфортную работу пользователей в обновленной базе.

← На главную