Как программно получить позицию штатного расписания, имея только должность и подразделение?

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

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

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

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

Поэтому, когда мы пытаемся сделать запрос к справочнику ШтатноеРасписание по параметрам Должность и Подразделение, мы почти всегда получим массив (список) ссылок, а не одну конкретную позицию. Автоматический выбор одного из элементов из списка — это логическая ошибка, так как система не знает, какая именно «ставка» нужна пользователю в текущем документе.

Вариант 1: Использование запроса к справочнику ШтатноеРасписание

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

Пример базового запроса:


ВЫБРАТЬ
    ШтатноеРасписание.Ссылка КАК Позиция
ИЗ
    Справочник.ШтатноеРасписание КАК ШтатноеРасписание
ГДЕ
    ШтатноеРасписание.Должность = &Должность
    И ШтатноеРасписание.Подразделение = &Подразделение
    И НЕ ШтатноеРасписание.ПометкаУдаления

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

Вариант 2: Использование данных из регистра Кадровая история сотрудников

Иногда требуется найти актуальную позицию, опираясь на то, как эти данные распределяются по сотрудникам. В этом случае мы обращаемся к регистру сведений КадроваяИсторияСотрудников (или аналогичным регистрам в зависимости от версии конфигурации). Мы используем срез последних на определенную дату.

Однако помните: этот метод работает эффективно, если у вас уже есть сотрудник. Если же позиция еще не занята, регистр может не содержать по ней информации. Если позиция вакантна, искать ее нужно именно в справочнике ШтатноеРасписание.

Рекомендованный алгоритм работы: совместная работа кода и пользователя

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

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

Практический совет по реализации выбора

В управляемых формах 1С для реализации выбора используйте метод ОткрытьФорму или установку ПараметрыВыбора для поля ввода. Это позволит пользователю увидеть весь список характеристик позиции (оклад, график, условия), которые помогут ему принять верное решение. Таким образом, мы перекладываем ответственность за выбор конкретной штатной единицы на того, кто владеет необходимой кадровой информацией, при этом значительно упрощая процесс, отсекая все лишние позиции через фильтры.

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

← На главную