Как скрыть неактуальные должности и запретить их выбор в 1С:ЗУП?

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

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

Разберем подробно два основных подхода к решению этой задачи: штатные возможности конфигурации без внесения изменений в структуру метаданных и программную реализацию отбора при выборе.

Способ 1. Использование типового механизма штатного расписания

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

Рассмотрим порядок действий для исключения ненужных должностей штатным путем:

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

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

Способ 2. Программная фильтрация и запрет выбора

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

Рассмотрим, какие обработчики событий платформы 1С:Предприятие 8 отвечают за выбор данных:

  1. Модуль менеджера справочника (ввод по строке и автоподбор): обработчик ОбработкаПолученияДанныхВыбора позволяет переопределить список значений, выпадающий при наборе названия должности с клавиатуры.
  2. Форма выбора (подбор из полного списка): обработчик ПриОткрытии формы выбора или событие НачалоВыбора у поля ввода документа накладывает отбор на динамический список или табличное поле.

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


Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Должности.Ссылка КАК Ссылка,
        |	Должности.Наименование КАК Наименование
        |ИЗ
        |	Справочник.Должности КАК Должности
        |ГДЕ
        |	Должности.Наименование ПОДОБНО &СтрокаПоиска
        |	И НЕ Должности.НеАктуально
        |	И НЕ Должности.ПометкаУдаления";
        
    Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаАвтоПодбора + "%");
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    ДанныеВыбора = Новый СписокЗначений;
    Пока Выборка.Следующий() Цикл
        ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.Наименование);
    КонецЦикла;

КонецПроцедуры

Для обычных форм в модуле формы выбора справочника Должности установим постоянный отбор списка при открытии:


Процедура ПриОткрытии()
    
    // Устанавливаем отбор по флагу неактуальности
    ОтборЭлемент = СправочникСписок.Отбор.Найти("НеАктуально");
    Если ОтборЭлемент <> Неопределено Тогда
        ОтборЭлемент.Значение = Ложь;
        ОтборЭлемент.ВидСравнения = ВидСравнения.Равно;
        ОтборЭлемент.Использование = Истина;
    КонецЕсли;
    
КонецПроцедуры

Подводные камни и важные ограничения

При реализации запрета выбора неактуальных должностей обратим внимание на следующие нюансы:

  1. Защита от копирования документов: если пользователь создает новый документ путем копирования старого, обработчики формы выбора не вызываются, и в новом документе останется неактуальная должность. Чтобы полностью закрыть эту возможность, добавим проверку в событие ОбработкаПроверкиЗаполнения или ПередЗаписью кадрового документа.
  2. Сохранение архивных документов: нельзя накладывать жесткий запрет на чтение или открытие уже проведенных документов прошлых периодов. Проверка должна выполняться строго при интерактивном изменении реквизита или записи нового документа.
  3. Классификаторы и отчетность: отключение видимости должности не должно влиять на привязку к общероссийским или национальным классификаторам профессий, используемым для формирования регламентированной отчетности.
← На главную