Как расформировать подразделение в 1С:ЗУП 3.1, если документ изменения штатного расписания открывается пустым?

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

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

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

Выясняем причину: почему блокируется закрытие подразделения?

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

Автоматическая установка флага происходит только тогда, когда в документе Изменение штатного расписания (или Утверждение штатного расписания) закрываются абсолютно все штатные позиции, закрепленные за данным подразделением. Как только последняя позиция закрывается, система делает запись в регистрах и сама отмечает подразделение как расформированное.

Проблема пустого документа возникает в следующих случаях:

  1. Создание без истории: Подразделение было заведено в базу в период, когда флаг ведения истории штатного расписания был снят. В результате в регистрах сведений по этому подразделению не числится ни одной записи о позициях.
  2. Перенос данных: База была перенесена из старых версий (например, ЗУП 2.5) или сторонних программ некорректно, из-за чего связь между подразделением и историческими позициями штатного расписания была утеряна.
  3. Неутвержденные черновики: Позиция была создана в документе-черновике, который так и не был проведен, либо в системе осталась скрытая «зависшая» позиция.

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

Опасный путь: почему нельзя временно отключать историю штатного расписания

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

Внимание! Делать так на рабочей базе категорически запрещено!

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

Поэтому рассмотрим безопасные методы решения этой задачи.

Способ 1: Программное изменение реквизитов (для программистов и администраторов)

Если у вас есть доступ к конфигуратору или возможность запускать внешние обработки, наиболее правильным и чистым решением будет принудительное программное заполнение реквизитов подразделения. Этот способ не затрагивает регистры штатного расписания и не нарушает целостность данных.

Нам необходимо напрямую обратиться к объекту справочника и установить два реквизита: Расформировано (тип Булево) и ДатаРасформирования (тип Дата). Посмотрим на пример программного кода, который можно выполнить в контексте серверной процедуры вспомогательной обработки:


&НаСервере
Процедура ПрименитьНаСервере()
    // Получаем объект подразделения из ссылки, переданной в реквизит формы
    ПодразделениеОбъект = Объект.Подразделение.ПолучитьОбъект();
    
    Если ПодразделениеОбъект <> Неопределено Тогда
        // Устанавливаем признак расформирования напрямую в обход экранных проверок
        ПодразделениеОбъект.Расформировано = Истина;
        ПодразделениеОбъект.ДатаРасформирования = Объект.ДатаРасформирования;
        
        // Записываем измененный объект в базу данных
        ПодразделениеОбъект.Записать();
        
        Сообщить("Подразделение успешно расформировано программным путем!");
    Иначе
        ВызватьИсключение "Не удалось получить объект подразделения для редактирования.";
    EndIf;
КонецПроцедуры

Этот код напрямую записывает данные в справочник. После его выполнения подразделение сразу же перейдет в статус расформированных и скроется из списков актуальных подразделений.

Способ 2: Групповое изменение реквизитов (без программирования, для администраторов)

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

Разберем этот процесс по шагам:

  1. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных и откроем ссылку Групповое изменение реквизитов (в некоторых интерфейсах доступ к ней можно получить через меню "Функции для технического специалиста").
  2. В поле "Изменять:" выберем справочник Подразделения (или Подразделения организаций).
  3. Критически важный шаг! Нажмем на ссылку "Все элементы" рядом с отбором и добавим новое условие: Ссылка Равно [Выбрать ваше проблемное подразделение]. Если пропустить этот шаг, вы расформируете абсолютно все подразделения компании!
  4. В списке доступных для изменения реквизитов найдем и отметим галочками:
    • Расформировано — установим значение Да.
    • Дата расформирования — укажем дату, начиная с которой подразделение считается закрытым.
  5. Нажмем кнопку Изменить реквизиты внизу формы.

Программа напрямую обновит поля в базе данных для выбранного элемента, решив проблему за несколько секунд.

Способ 3: Обходной маневр через временное создание позиции (чисто кадровый метод)

Что делать кадровику, у которого нет административных прав или доступа к групповой обработке данных? Проблему можно обойти чисто функциональными средствами, заставив систему поверить, что у подразделения появилась история.

Рассмотрим этот обходной маневр детально:

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

Система увидит, что единственная (и последняя) позиция данного подразделения была закрыта. Сработает стандартный программный алгоритм, который автоматически установит флаг "Подразделение расформировано" и запишет дату закрытия в карточку подразделения.

Способ 4: Проверка скрытых и неутвержденных позиций

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

Выполним проверку по следующему алгоритму:

  1. Откроем справочник Штатное расписание.
  2. В нижней части формы или в настройках формы установим флаги:
    • Показывать закрытые позиции;
    • Показывать неутвержденные позиции.
  3. Проанализируем структуру по нашему подразделению. Если обнаружится неутвержденная позиция, необходимо открыть создавший её документ и либо утвердить его (провести), либо полностью удалить черновик, если он был создан ошибочно.

Резюме

Мы подробно разобрали проблему блокировки расформирования подразделений в 1С:ЗУП 3.1. Наиболее быстрым и технологичным решением для ИТ-специалиста является использование Группового изменения реквизитов (Способ 2) или применение внешней обработки с программным кодом (Способ 1). Если же задачу нужно решить силами кадровой службы без привлечения программистов, отлично подойдет метод с временным созданием и последующим закрытием позиции (Способ 3). Главное — избегать опасного отключения истории штатного расписания в настройках учета рабочей базы.

← На главную