При разработке механизмов автоматического заполнения документов в конфигурациях 1С (например, 1С:Зарплата и Управление Персоналом или 1С:ERP) часто возникает задача заполнить «Должность по штатному расписанию» на основании выбранной «Должности» и «Подразделения». Разберем, почему эта задача требует особого подхода и как ее правильно решить.
Первое, что нужно осознать при работе со справочником ШтатноеРасписание — это его структура. Справочник Должности является классификатором и не содержит данных о конкретных условиях труда. В то же время, штатное расписание описывает конкретные рабочие места. В рамках одного подразделения может существовать множество позиций с абсолютно одинаковой должностью, но с разными графиками работы, разным количеством ставок или разным уровнем оплаты.
Поэтому, когда мы пытаемся сделать запрос к справочнику ШтатноеРасписание по параметрам Должность и Подразделение, мы почти всегда получим массив (список) ссылок, а не одну конкретную позицию. Автоматический выбор одного из элементов из списка — это логическая ошибка, так как система не знает, какая именно «ставка» нужна пользователю в текущем документе.
Если ваша бизнес-логика позволяет, мы можем сформировать выборку доступных позиций с помощью запроса. Рассмотрим, как это выглядит программно. Мы обращаемся к справочнику ШтатноеРасписание, фильтруя его по нужным нам критериям.
Пример базового запроса:
ВЫБРАТЬ
ШтатноеРасписание.Ссылка КАК Позиция
ИЗ
Справочник.ШтатноеРасписание КАК ШтатноеРасписание
ГДЕ
ШтатноеРасписание.Должность = &Должность
И ШтатноеРасписание.Подразделение = &Подразделение
И НЕ ШтатноеРасписание.ПометкаУдаления
Важное примечание: При написании кода обязательно учитывайте актуальность позиции. В современных конфигурациях позиция может быть закрыта или находиться в архиве. Поэтому в запрос стоит добавить условие на проверку периода действия, если в вашей конфигурации ведется история штатного расписания.
Иногда требуется найти актуальную позицию, опираясь на то, как эти данные распределяются по сотрудникам. В этом случае мы обращаемся к регистру сведений КадроваяИсторияСотрудников (или аналогичным регистрам в зависимости от версии конфигурации). Мы используем срез последних на определенную дату.
Однако помните: этот метод работает эффективно, если у вас уже есть сотрудник. Если же позиция еще не занята, регистр может не содержать по ней информации. Если позиция вакантна, искать ее нужно именно в справочнике ШтатноеРасписание.
Разберем оптимальную стратегию реализации функционала, чтобы избежать ошибок и обеспечить удобство пользователя:
ШтатноеРасписание, установив предварительно отбор (ПараметрыВыбора) по должности и подразделению.В управляемых формах 1С для реализации выбора используйте метод ОткрытьФорму или установку ПараметрыВыбора для поля ввода. Это позволит пользователю увидеть весь список характеристик позиции (оклад, график, условия), которые помогут ему принять верное решение. Таким образом, мы перекладываем ответственность за выбор конкретной штатной единицы на того, кто владеет необходимой кадровой информацией, при этом значительно упрощая процесс, отсекая все лишние позиции через фильтры.
Используя этот подход, вы сделаете решение гибким, устойчивым к изменениям в структуре компании и удобным для конечного пользователя, исключая при этом вероятность автоматического выбора «не той» штатной единицы.