Как решить проблемы с видом занятости после обновления ЗУП на релиз 3.1.5.129?

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

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

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

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

Разберем ситуацию с точки зрения логики разработчиков 1С. Ранее вид занятости (основное место работы, внешнее или внутреннее совместительство) хранился непосредственно в регистре КадроваяИсторияСотрудников. Это приводило к избыточности данных: при любом кадровом перемещении (например, смене подразделения) создавалась новая запись, в которой дублировался вид занятости, хотя он мог не меняться годами.

Для оптимизации хранения и повышения производительности в релизе 3.1.5 ресурс был переименован в УдалитьВидЗанятости (что сломало прямые запросы), а актуальные данные перенесены в два новых регистра:

  1. ВидыЗанятостиСотрудников — периодический регистр, подчиненный регистратору. В нем фиксируются изменения документов «Прием на работу», «Кадровый перевод» и др.
  2. ВидыЗанятостиСотрудниковИнтервальный — вспомогательный непериодический регистр, который используется системой для быстрого построения отчетов и получения среза данных на конкретные даты без сложных соединений.

Анализ проблем с обновлением и перенос данных

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


Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.5.4";
Обработчик.Процедура = "КадровыйУчет.ПеренестиВидыЗанятостиИзКадроваяИсторияСотрудниковВВидыЗанятостиСотрудников";
Обработчик.РежимВыполнения = ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ОсновнойРежимВыполненияОбновления;

Проанализируем важный нюанс: этот обработчик спроектирован так, что он не будет выполняться, если в новых регистрах (ВидыЗанятостиСотрудников или ВидыЗанятостиСотрудниковИнтервальный) уже есть хотя бы одна запись. Это часто происходит, если обновление прерывалось или если в базе велась тестовая работа до завершения всех процедур обновления. Чтобы решить проблему, необходимо очистить новые регистры и запустить обработчик повторно через консоль обслуживания или стандартные средства управления обновлением в разделе «Администрирование».

Программное получение данных о виде занятости

Рассмотрим, как теперь правильно писать код для получения вида занятости, чтобы избежать ошибок при будущих обновлениях. Прямое обращение к регистрам сведений (особенно к тем, что помечены префиксом Удалить) крайне не рекомендуется. Вместо этого используем экспортные методы общего модуля КадровыйУчет.

Если нам нужно получить таблицу данных по списку сотрудников на определенную дату, воспользуемся функцией КадровыеДанныеСотрудников. Посмотрим на пример кода:


СписокСотрудников = Новый Массив;
СписокСотрудников.Добавить(ВыбранныйСотрудник);

ПараметрыПолучения = "ВидЗанятости, Подразделение, Должность";
ДатаСреза = ТекущаяДата();

ТаблицаДанных = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ПараметрыПолучения, ДатаСреза);

Для Каждого Строка Из ТаблицаДанных Цикл
    Сообщить("Сотрудник: " + Строка.Сотрудник + ", Вид занятости: " + Строка.ВидЗанятости);
КонецЦикла;

Преимущество этого метода заключается в том, что разработчики 1С сами обновляют его логику. Когда меняется структура регистров, метод КадровыеДанныеСотрудников адаптируется внутри, а ваш код остается рабочим.

Если же вам требуется получить данные внутри запроса (например, для сложного отчета), рекомендуем использовать механизм временных таблиц, который подготавливается типовой процедурой:


МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВТ = МенеджерВТ;

// Подготавливаем временную таблицу с кадровыми данными
КадровыйУчет.СоздатьНаДатуВТКадровыеДанныеСотрудников(МенеджерВТ, Истина, ПараметрыПостроения);

Запрос.Текст = 
    "ВЫБРАТЬ
    |	ВТКадровыеДанные.Сотрудник,
    |	ВТКадровыеДанные.ВидЗанятости
    |ИЗ
    |	ВТКадровыеДанныеСотрудников КАК ВТКадровыеДанные";

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

Исправление типовых отчетов и ошибок СКД

Проанализируем ситуацию с отчетами, такими как «Кадровые изменения» или «Штатные сотрудники». В релизе 3.1.5.129 была зафиксирована ошибка 10192636, из-за которой поле Вид занятости просто исчезло из доступных полей настройки отчета. Это произошло потому, что старое поле было удалено, а новые связи в схеме компоновки данных (СКД) не были прописаны корректно.

Разберем, как исправить это самостоятельно, не дожидаясь релиза 3.1.6:

  1. Откройте настройки отчета и перейдите в режим «Изменить вариант».
  2. В дереве доступных полей найдите группу «Работа».
  3. Попробуйте найти поле «Вид занятости» там. Если его нет, проверьте возможность добавления поля через регистратор (документ события). В кадровых отчетах данные часто можно «вытащить» через соединение с основным документом-регистратором.
  4. В крайнем случае, если отчет критически важен, придется временно отредактировать схему компоновки данных в конфигураторе, добавив левое соединение с регистром ВидыЗанятостиСотрудниковИнтервальный.

Важно: Помните, что в релизе 3.1.6 и выше эта ошибка была официально исправлена. Если у вас есть возможность обновиться до актуальной версии ветки 3.1.10 или выше, это будет самым правильным решением.

Особенности синхронизации с «1С:Бухгалтерия 3.0»

Выясним, как изменения повлияли на обмен данными. При синхронизации ЗУП и БП поле Вид занятости также может передаваться некорректно. Это происходит, если правила обмена не соответствуют обновленной структуре метаданных. При возникновении пустых значений в Бухгалтерии после выгрузки из ЗУП, обязательно убедитесь, что вы обновили и конфигурацию «Бухгалтерия предприятия» до актуального релиза, так как правила обмена часто поставляются внутри конфигураций и должны соответствовать друг другу по версиям API.

Резюме и рекомендации

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

Следуя этим инструкциям, вы сможете минимизировать последствия перехода на новые релизы и обеспечите корректный учет кадров в вашей системе.

← На главную