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