Как восстановить сбившуюся иерархию подразделений в 1С:ЗУП 3.1?

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

В конфигурации 1С:Зарплата и управление персоналом 3.1 пользователи часто сталкиваются с проблемой, когда иерархия подразделений в справочнике «Штатное расписание» начинает отображаться некорректно. Это может произойти после переноса данных, некорректного использования обработки «Групповое изменение реквизитов» (поможет обработка отката изменений по истории версий) или ручных манипуляций с родительскими подразделениями. Ситуация осложняется, если в программе включена опция ведения истории изменений штатного расписания.

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

Разберем причины возникновения проблемы

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

  1. Регистр сведений «Подчиненность подразделений организаций»: Именно этот регистр сведений отвечает за быстрое построение дерева подразделений. Если записи в нем не соответствуют реальному положению дел в справочнике, визуальная структура будет нарушена.
  2. Даты формирования и расформирования: Каждое подразделение имеет скрытые или явные реквизиты даты появления в структуре. Если дата документа «Утверждение штатного расписания» меньше, чем дата формирования подразделения, оно может не отображаться или отображаться как «неутвержденное».
  3. История изменений: При включенной истории штатного расписания любое изменение «родителя» должно быть согласовано с периодами действия позиций.

Рассмотрим пошагово способы решения проблемы, от самых простых до программных.

Способ 1. Использование стандартного интерфейса (для пользователей)

В современных релизах ЗУП 3.1 (начиная с 3.1.10 и выше) разработчики предусмотрели штатную команду для принудительной перегенерации иерархических связей. Этот способ является приоритетным, так как он безопасен и не требует написания кода.

Выполним следующие действия:

  1. Перейдем в раздел КадрыШтатное расписание.
  2. В открывшейся форме списка нажмем кнопку Еще (расположена в правой верхней части командной панели).
  3. Найдем и выберем пункт Обновить структуру штатного расписания.

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

Способ 2. Программное обновление структуры (для программистов)

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

В разных версиях конфигурации название метода может отличаться. Рассмотрим пример кода для актуальных версий ЗУП (3.1.10 — 3.1.32):


// Универсальный вызов для большинства актуальных релизов
Справочники.ШтатноеРасписание.ОбновитьСтруктуруШтатногоРасписания();

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


// Вариант для старых релизов
Справочники.ШтатноеРасписание.ОбновитьСтруктуруШтатногоРасписанияПоПодразделениям();

Проанализируем ситуацию, если вы получили ошибку «Метод объекта не обнаружен». Это означает, что в вашем релизе процедура была переименована или перемещена. В таком случае рекомендуется выполнить глобальный поиск по конфигурации строки ОбновитьСтруктуруШтатногоРасписания, чтобы найти актуальное расположение метода в менеджере справочника.

Способ 3. Исправление дат формирования подразделений

Часто иерархия сбивается из-за того, что у подразделений не заполнены или заполнены некорректно даты их создания. Если подразделение считается «не созданным» на дату просмотра штатного расписания, оно выпадает из общей структуры.

Рассмотрим, как это исправить с помощью обработки «Групповое изменение реквизитов»:

  1. Выберем объект Подразделения.
  2. Нажмем Дополнительные параметры и установим флаг Показывать служебные реквизиты.
  3. Найдем реквизит Сформировано (или Дата формирования).
  4. Установим значение на заведомо раннюю дату (например, 01.01.1900), чтобы подразделения гарантированно попадали в любой период актуальности штатного расписания.
  5. Аналогично проверим реквизит Расформировано — он должен быть пустым для действующих подразделений.

Способ 4. Устранение циклических ссылок

При ручном исправлении иерархии (как описывал автор темы: назначил родителя — удалил родителя) легко допустить логическую ошибку — циклическую ссылку. Это ситуация, когда Подразделение А является родителем для Подразделения Б, а Подразделение Б указано родителем для Подразделения А.

Посмотрим, как выявить такие ошибки:

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

Способ 5. Проверка регистра «Подчиненность подразделений организаций»

Если программное обновление (Способ 2) не помогло, стоит заглянуть в «святая святых» — регистр сведений, где хранятся связи.

Выясним причину через Функции для технического специалиста (ранее — Все функции):

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

Дополнительный совет по работе с реквизитом «Головное подразделение»

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

Резюме: В большинстве случаев для восстановления иерархии достаточно выполнить команду «Обновить структуру штатного расписания» из меню «Еще» самого штатного расписания. Если это не помогает — проверяйте даты формирования подразделений и отсутствие циклических ссылок в поле «Родитель».

← На главную