При работе в конфигурации 1С:Зарплата и управление персоналом 3.1 часто возникает необходимость кастомизации типовых отчетов. Одной из самых востребованных задач является настройка отчета Анализ зарплаты по сотруднику (или по подразделениям) таким образом, чтобы в нем отображалась колонка "Чистого" начисления. Под этим обычно подразумевается математическая разница между всеми начислениями и удержаниями (включая НДФЛ) за конкретный период, исключая влияние начального сальдо и произведенных выплат. В этой статье мы подробно разберем, как реализовать такой механизм с помощью инструментов системы компоновки данных (СКД), не прибегая к программированию.
Рассмотрим ситуацию: типовой отчет "Анализ зарплаты" оперирует группами данных. В нем есть блоки "Начислено", "Удержано", "Выплачено" и "Сальдо". Поле Всего включено в ведомости или Конечное сальдо часто учитывает долги прошлых периодов или уже произведенные выплаты (авансы, межрасчетные выплаты). Если наша задача — увидеть просто разницу "На руки" по итогам расчетов текущего месяца, нам необходимо создать собственное расчетное поле.
Основная сложность заключается в том, что в СКД данные о начислениях и удержаниях хранятся в разных строках набора данных, разделенных по значению поля Группа. Если мы просто создадим поле Начислено - Удержано, система может выдать некорректный результат в строках группировок, так как она будет пытаться вычесть значения внутри одной строки, где одновременно начисления и удержания обычно не присутствуют.
Для корректного расчета нам потребуется создать пользовательское поле. Перейдем в настройки отчета через меню Еще — Прочее — Изменить вариант отчета. На вкладке Пользовательские поля нажмем Добавить — Новое поле-выражение.
Нам необходимо прописать две формулы: одну для детальных записей, другую для итоговых (ресурсов). Разберем логику условий. В системе 1С:ЗУП 3.1 принадлежность суммы к тому или иному виду расчетов определяется перечислением ГруппыНачисленияУдержанияВыплаты.
Рассмотрим формулу для вычисления суммы начислений. Проанализируем выражение:
Выбор
Когда Группа = Значение(Перечисление.ГруппыНачисленияУдержанияВыплаты.Начислено)
Тогда Сумма
Иначе 0
Конец
Аналогично определяются удержания и налоги (НДФЛ). Чтобы получить итоговое значение "К выплате", мы должны объединить эти условия в единый агрегатный расчет в поле Выражение итоговых записей:
Сумма(Выбор Когда Группа = Значение(Перечисление.ГруппыНачисленияУдержанияВыплаты.Начислено) Тогда Сумма Иначе 0 Конец)
- Сумма(Выбор Когда Группа = Значение(Перечисление.ГруппыНачисленияУдержанияВыплаты.Удержано) Тогда Сумма Иначе 0 Конец)
- Сумма(Выбор Когда Группа = Значение(Перечисление.ГруппыНачисленияУдержанияВыплаты.Налоги) Тогда Сумма Иначе 0 Конец)
Важный нюанс: использование функции Сумма() внутри выражения позволяет системе "собрать" данные из всех строк группировки по сотруднику, игнорируя тот факт, что начисления и удержания находятся в разных категориях.
В некоторых случаях обращение к перечислениям может быть затруднительным из-за особенностей релиза. Проанализируем альтернативный подход. В СКД отчета "Анализ зарплаты" поле Группа имеет иерархию и порядок. Мы можем использовать проверку по конкретным видам взаиморасчетов. Рассмотрим пример настройки поля "Сумма Начислено" через виды взаиморасчетов:
Выбор
Когда Группа = Значение(Перечисление.ГруппыНачисленияУдержанияВыплаты.Начислено)
Или Группа = Значение(Перечисление.ГруппыНачисленияУдержанияВыплаты.Справочно)
Тогда Сумма
Иначе 0
Конец
А для удержаний можно использовать:
Выбор
Когда Группа = Значение(Перечисление.ГруппыНачисленияУдержанияВыплаты.Удержано)
Или Группа = Значение(Перечисление.ГруппыНачисленияУдержанияВыплаты.Налоги)
Тогда Сумма
Иначе 0
Конец
После создания поля оно появится в списке доступных полей. Если мы просто добавим его в Выбранные поля отчета, мы столкнемся с проблемой "раздвоения". Посмотрим на ситуацию: отчет строится в виде кросс-таблицы или таблицы с группировкой по горизонтали (по полю Группа). В этом случае наша новая колонка "К выплате" будет дублироваться внутри каждой группы: она появится в колонке "Начислено", в колонке "Удержано" и так далее.
Выясним причину: это происходит потому, что поле включено в состав выбранных полей для всей таблицы, которая разворачивается по группировке Группа. Чтобы колонка выводилась один раз в конце строки (как итог), выполним следующие действия:
Группа).Группа (колонки) необходимо зайти на вкладку Выбранные поля и снять флажок с нашего пользовательского поля, если оно там наследовалось.Проанализируем ситуацию, когда в отчет попадают выплаты (авансы). Если мы хотим получить именно математический остаток "сколько мы должны сотруднику за месяц", мы не должны вычитать группу Выплачено. Если же мы хотим увидеть, сколько осталось выплатить реально (с учетом уже выданного аванса), то в формулу в итоговых записях нужно добавить еще одно вычитаемое:
- Сумма(Выбор Когда Группа = Значение(Перечисление.ГруппыНачисленияУдержанияВыплаты.Выплачено) Тогда Сумма Иначе 0 Конец)
Однако автор исходного вопроса акцентировал внимание на разнице "Начислено - Удержано", поэтому в большинстве случаев достаточно трех групп: Начисления, Удержания и Налоги.
Разберем еще один способ, доступный в более свежих версиях ЗУП 3.1. В наборе данных отчета часто присутствует скрытое поле СуммаВзаиморасчетов. Его особенность в том, что оно уже содержит знаки: начисления приходят с плюсом, а удержания и налоги — с минусом. Рассмотрим, как это упрощает нашу задачу. Нам достаточно создать пользовательское поле с простой формулой:
Сумма(Выбор
Когда Группа <> Значение(Перечисление.ГруппыНачисленияУдержанияВыплаты.НачальноеСальдо)
И Группа <> Значение(Перечисление.ГруппыНачисленияУдержанияВыплаты.КонечноеСальдо)
И Группа <> Значение(Перечисление.ГруппыНачисленияУдержанияВыплаты.Выплачено)
Тогда СуммаВзаиморасчетов
Иначе 0
Конец)
Такой подход считается более профессиональным в среде разработчиков СКД, так как он использует предопределенную логику знаков в регистрах накопления Взаиморасчеты с сотрудниками, на которых базируется отчет.
Таким образом, комбинируя пользовательские поля и агрегатные функции Сумма(), мы получаем гибкий инструмент для анализа заработной платы, который не зависит от входящего сальдо и позволяет четко контролировать расчеты "чистыми" за текущий период.