При ведении штатного расписания в конфигурации «1С:Зарплата и управление персоналом 3.1» пользователи и администраторы иногда сталкиваются с ситуацией: создается документ «Утверждение штатного расписания» (или «Изменение штатного расписания»), в шапке документа выбирается конкретное подразделение, но в открывшемся окне выбора нужной структуры предприятия попросту нет. При этом в справочнике Подразделения элемент присутствует, и в строках табличной части его можно выбрать без каких-либо затруднений.
Разберем детально механизм работы формы выбора подразделений для штатного расписания, выясним первопричину такого поведения и рассмотрим способы быстрого исправления ситуации.
Проанализируем техническую сторону формирования списка. При открытии формы выбора подразделения для документов подсистемы штатного расписания на сервере накладываются специализированные отборы. Конфигурация строит дерево или список доступных структурных единиц, опираясь не только на справочник ПодразделенияОрганизаций (или Подразделения), но и на данные служебного регистра сведений «Подчиненность подразделений организаций».
Этот регистр хранит развернутую иерархическую структуру подчиненности (включая ссылки элементов верхнего уровня на самих себя). Если записи в регистре отсутствуют или сформированы некорректно, отбор по ссылке отсекает такие подразделения из диалога выбора.
Посмотрим, в каких случаях происходит рассинхронизация:
ОбменДанными.Загрузка = Истина. В таком режиме события модуля объекта ПередЗаписью и ПриЗаписи отключаются, в результате чего запись в регистр сведений не формируется.Если подразделений много и они были загружены пакетом из внешней системы, наиболее быстрым и надежным решением является их принудительная программная перезапись с отключенным флагом загрузки данных. В этом случае для каждого объекта сработают типовые процедуры формирования движений в регистре подчиненности.
Рассмотрим пример кода для внешней обработки или консоли кода:
Выборка = Справочники.ПодразделенияОрганизаций.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
Объект.ОбменДанными.Загрузка = Ложь;
Попытка
Объект.Записать();
Исключение
Сообщить("Ошибка при записи подразделения: " + Объект.Наименование + " - " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
После выполнения этого скрипта все служебные записи в регистре «Подчиненность подразделений организаций» будут пересчитаны, и элементы сразу станут доступны для выбора в шапке документов штатного расписания.
Если в базе не отображаются буквально несколько подразделений, проблему можно решить непосредственно в пользовательском режиме без написания программного кода.
Выполним следующие действия по шагам:
Подразделения (или Подразделения организаций).При интерактивной записи формы срабатывают все встроенные алгоритмы типовой конфигурации, и необходимые строки в служебном регистре создаются автоматически.
В некоторых версиях конфигурации (например, 3.1.3 и 3.1.4) в самой форме выбора предусмотрен флаг фильтрации. Если подразделение только что создано и по нему еще не было утверждено штатное расписание, оно считается новым для системы.
Проверим настройки формы:
Чтобы избежать повторного возникновения проблемы при регулярных обменах с внешними программами (например, при выгрузке организационной структуры из 1С:ERP или 1С:УПП), настроим правила обмена данными следующим образом:
Объект.ОбменДанными.Загрузка = Ложь перед финализацией записи, чтобы структура подчиненности поддерживалась в актуальном состоянии автоматически.