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