В практической работе с программой 1С:Зарплата и Управление Персоналом (редакция 3.1) кадровые специалисты и системные администраторы часто сталкиваются с ситуацией, когда одно или несколько подразделений организации требуется расформировать (закрыть). Однако при включенной опции ведения истории штатного расписания стандартный механизм дает сбой: при выборе подразделения в документе Изменение штатного расписания его табличная часть оказывается абсолютно пустой. Кнопки управления неактивны, закрыть позиции невозможно, а в карточке самого подразделения вручную установить флаг расформирования программа не позволяет.
В этой статье мы подробно проанализируем причины возникновения этой ошибки, разберем опасности обходных путей, которые могут разрушить базу данных, и рассмотрим четыре практических способа решения проблемы: от простых кадровых приемов до программного изменения реквизитов.
Для начала разберем внутреннюю логику работы программы 1С:ЗУП 3.1. Когда в настройках кадрового учета включен флаг "Ведется история изменения штатного расписания", прямое редактирование признака расформирования в карточке справочника Подразделения (или Подразделения организаций) блокируется на уровне интерфейса. Программа ожидает, что этот признак будет выставлен автоматически. При необходимости обхода подобных интерфейсных ограничений можно использовать обработку для просмотра и редактирования элементов формы.
Автоматическая установка флага происходит только тогда, когда в документе Изменение штатного расписания (или Утверждение штатного расписания) закрываются абсолютно все штатные позиции, закрепленные за данным подразделением. Как только последняя позиция закрывается, система делает запись в регистрах и сама отмечает подразделение как расформированное.
Проблема пустого документа возникает в следующих случаях:
Поскольку в документе Изменение штатного расписания закрывать нечего, штатный триггер автоматического закрытия подразделения просто не может сработать.
У многих пользователей возникает соблазн решить проблему "быстрым" способом: зайти в настройки кадрового учета, временно снять флаг "Ведется история изменения штатного расписания", зайти в карточку подразделения, вручную установить дату расформирования и вернуть флаг обратно.
Внимание! Делать так на рабочей базе категорически запрещено!
Проанализируем последствия такого действия:
Утверждение штатного расписания и Изменение штатного расписания могут потерять связь с регистрами, стать непроведенными или помеченными на удаление.Поэтому рассмотрим безопасные методы решения этой задачи.
Если у вас есть доступ к конфигуратору или возможность запускать внешние обработки, наиболее правильным и чистым решением будет принудительное программное заполнение реквизитов подразделения. Этот способ не затрагивает регистры штатного расписания и не нарушает целостность данных.
Нам необходимо напрямую обратиться к объекту справочника и установить два реквизита: Расформировано (тип Булево) и ДатаРасформирования (тип Дата). Посмотрим на пример программного кода, который можно выполнить в контексте серверной процедуры вспомогательной обработки:
&НаСервере
Процедура ПрименитьНаСервере()
// Получаем объект подразделения из ссылки, переданной в реквизит формы
ПодразделениеОбъект = Объект.Подразделение.ПолучитьОбъект();
Если ПодразделениеОбъект <> Неопределено Тогда
// Устанавливаем признак расформирования напрямую в обход экранных проверок
ПодразделениеОбъект.Расформировано = Истина;
ПодразделениеОбъект.ДатаРасформирования = Объект.ДатаРасформирования;
// Записываем измененный объект в базу данных
ПодразделениеОбъект.Записать();
Сообщить("Подразделение успешно расформировано программным путем!");
Иначе
ВызватьИсключение "Не удалось получить объект подразделения для редактирования.";
EndIf;
КонецПроцедуры
Этот код напрямую записывает данные в справочник. После его выполнения подразделение сразу же перейдет в статус расформированных и скроется из списков актуальных подразделений.
Если вы не хотите писать код, аналогичную процедуру можно выполнить с помощью стандартного встроенного инструмента 1С:Предприятие. Для этого воспользуемся обработкой группового изменения.
Разберем этот процесс по шагам:
Ссылка Равно [Выбрать ваше проблемное подразделение]. Если пропустить этот шаг, вы расформируете абсолютно все подразделения компании!Программа напрямую обновит поля в базе данных для выбранного элемента, решив проблему за несколько секунд.
Что делать кадровику, у которого нет административных прав или доступа к групповой обработке данных? Проблему можно обойти чисто функциональными средствами, заставив систему поверить, что у подразделения появилась история.
Рассмотрим этот обходной маневр детально:
Изменение штатного расписания.Изменение штатного расписания (его можно сделать той же датой или следующим днем).Система увидит, что единственная (и последняя) позиция данного подразделения была закрыта. Сработает стандартный программный алгоритм, который автоматически установит флаг "Подразделение расформировано" и запишет дату закрытия в карточку подразделения.
Иногда табличная часть документа изменения штатного расписания пустует из-за того, что позиции уже были созданы, но находятся в некорректном статусе (например, документ утверждения остался в статусе черновика или помечен на удаление).
Выполним проверку по следующему алгоритму:
Мы подробно разобрали проблему блокировки расформирования подразделений в 1С:ЗУП 3.1. Наиболее быстрым и технологичным решением для ИТ-специалиста является использование Группового изменения реквизитов (Способ 2) или применение внешней обработки с программным кодом (Способ 1). Если же задачу нужно решить силами кадровой службы без привлечения программистов, отлично подойдет метод с временным созданием и последующим закрытием позиции (Способ 3). Главное — избегать опасного отключения истории штатного расписания в настройках учета рабочей базы.