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