Почему задваиваются суммы в отчете «Анализ зарплаты по сотрудникам» и как найти ошибку?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Бухгалтерский учет
← На главную

Ситуация, когда типовой отчет «Анализ зарплаты по сотрудникам» показывает суммы, ровно в два раза (или более) превышающие реальные начисления, является довольно распространенной в практике работы с 1С:Зарплата и управление персоналом 3.1. При этом в первичных документах (начисление зарплаты, расчет взносов) и в основных регистрах расчета цифры могут быть абсолютно корректными. Рассмотрим подробнее, почему возникает эта техническая коллизия и как ее устранить.

Природа проблемы: архитектура запроса и «левые соединения»

Для начала проанализируем, как работает отчет «Анализ зарплаты по сотрудникам». В отличие от простых списков, этот отчет строится на базе сложной системы компоновки данных (СКД), запрос которой может содержать десятки пакетов временных таблиц. Основная задача отчета — собрать данные не только из регистров накопления НачисленияУдержанияПоСотрудникам, но и сопоставить их с данными о выплатах и взаиморасчетах.

Задвоение чаще всего происходит в момент выполнения операции LEFT JOIN (левое соединение) в SQL-запросе. Если система пытается соединить таблицу начислений с таблицей выплат по определенным полям (физическое лицо, организация, статья финансирования, статья расходов), и в одной из таблиц эти поля заполнены не полностью или имеют дублирующие записи, возникает эффект «декартового произведения». Строка начисления находит две или более подходящих строки в таблице взаиморасчетов, и итоговая сумма в отчете умножается на количество этих связей.

Шаг 1. Анализ через Универсальный отчет

Чтобы не копаться в сложном запросе типового отчета, который использует механизмы представлений, разберем более простой способ диагностики. Воспользуемся инструментом Универсальный отчет (раздел «Администрирование» — «Печатные формы, отчеты и обработки»).

Проанализируем регистр накопления Бухгалтерские взаиморасчеты с сотрудниками. Настроим отчет следующим образом:

  1. Выберем тип объекта «Регистр накопления», имя объекта — Бухгалтерские взаиморасчеты с сотрудниками.
  2. В настройках группировки добавим поля: Физическое лицо, Статья расходов, Регистратор.
  3. В фильтрах укажем проблемного сотрудника и период, предварительно проверив, что источник финансирования соответствует счету учета.

Если в результате мы увидим, что по документу Ведомость в банк (или ведомость в кассу) поле Статья расходов не заполнено (пустое значение), это и есть первопричина. Когда отчет «Анализ зарплаты» пытается «подтянуть» эту ведомость, отсутствие аналитики заставляет алгоритм распределения отрабатывать некорректно, дублируя строки начислений.

Шаг 2. Влияние будущих периодов и «хвостов» взаиморасчетов

Выясним еще одну интересную деталь, упомянутую в практике: почему ведомость за декабрь (например, выплата аванса) может влиять на отчет за ноябрь? Дело в том, что отчет анализирует состояние взаиморасчетов в разрезе месяцев. Если в декабрьской ведомости указан месяц выплаты «Декабрь», но при этом в регистр попали записи, закрывающие долги за ноябрь, или если в ведомости допущена ошибка в периоде регистрации, отчет «притянет» эту информацию к ноябрьским данным.

Проверим движения документа Ведомость в банк. Для этого в документе нажмем кнопку «Еще» — «Показать движения документа». Нас интересует вкладка Взаиморасчеты по сотрудникам и Бухгалтерские взаиморасчеты с сотрудниками. Обратим внимание на колонку Статья расходов. Если она пуста, отчет не сможет однозначно сопоставить выплату с начислением.

Шаг 3. Работа с интервальными регистрами

Иногда причина кроется глубже — в так называемых интервальных регистрах. В ЗУП 3.1 данные о периодах работы, позициях штатного расписания и других кадровых изменениях хранятся в виде временных интервалов. Если в этих регистрах записи накладываются друг на друга (например, из-за исправлений документов «задним числом» без пересчета периодов), отчет может «видеть» одного сотрудника как две разные аналитические единицы в один и тот же момент времени.

Разберем, как это проверить:

  1. Откроем «Функции для технического специалиста» (или «Все функции»).
  2. Найдем регистры сведений, в названии которых есть слово «интервальный» (например, ДанныеИнтервалы...).
  3. Проанализируем записи по конкретному сотруднику. Если на одну дату приходится две записи с одинаковыми параметрами, это свидетельствует о технической ошибке данных.

Шаг 4. Исправление ошибки и заполнение аналитики

Как только причина (пустая Статья расходов) выявлена, необходимо привести данные в порядок. Рассмотрим варианты решения:

Вариант А. Ручное исправление документа.

Если документов немного, достаточно открыть проблемную ведомость, зайти в расшифровку суммы (кнопка «Изменить налог» или просто двойной клик по сумме выплаты) и убедиться, что аналитика заполнена. Если поле пустое — выберите нужное значение вручную и перепроведите документ.

Вариант Б. Групповое изменение реквизитов.

Если ведомостей много, воспользуемся обработкой «Групповое изменение реквизитов»:

  1. Выберем тип объекта Ведомость в банк.
  2. Добавим отбор по периоду и конкретным документам.
  3. Найдем реквизит Статья расходов и установим нужное значение.
  4. Выполним изменение. Внимание: после этого документы необходимо перепровести, чтобы обновились записи в регистрах накопления.

Вариант В. Использование специализированных обработок. Например, может потребоваться редактирование движений в регистрах документа «Перенос данных».

В некоторых случаях (особенно при переходе с других версий или после переноса данных) требуется переформирование интервальных регистров. Для этого в программе предусмотрены скрытые процедуры. Например, можно запустить процедуру пересчета интервалов через консоль кода или воспользоваться встроенными помощниками обслуживания в разделе «Администрирование» — «Обслуживание» — «Корректировка данных».

Резюме и рекомендации

Проанализировав ситуацию, мы пришли к выводу, что задвоение в «Анализе зарплаты» — это почти всегда сигнал о нарушении целостности аналитического учета в регистрах взаиморасчетов. Для предотвращения подобных проблем в будущем рекомендуем:

← На главную