Из каких регистров берутся данные для отчета «Анализ начислений и удержаний» в ЗУП 3.1

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

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

Механизм динамического построения запросов

В современных версиях ЗУП 3.1 используется универсальный механизм построения зарплатных отчётов, базирующийся на системе ЗарплатаКадрыОтчеты. Вместо того чтобы хранить один огромный статический запрос, разработчики 1С применили программное формирование текста запроса в общих модулях. Это позволяет системе гибко подключать только те таблицы данных, которые действительно нужны пользователю в текущей настройке отчёта.

Если мы заглянем в макет компоновки данных, мы можем увидеть странную конструкцию:


ВЫБРАТЬ ПЕРВЫЕ 0
    0 КАК Сумма,
    "" КАК Сотрудник

Рассмотрим, для чего это нужно. Проанализируем ситуацию: системе необходимо заранее подготовить структуру временных таблиц, в которые позже будут помещены данные из разных источников (начисления, удержания, выплаты, налоги). Использование ВЫБРАТЬ ПЕРВЫЕ 0 позволяет инициализировать временную таблицу с нужными типами колонок, не считывая при этом данные из базы. В дальнейшем через МенеджерВременныхТаблиц эти таблицы наполняются данными порциями в зависимости от того, какие «галочки» стоят в настройках отчета.

Чтобы увидеть реальный текст запроса, нам необходимо обратиться к общему модулю ЗарплатаКадрыОбщиеНаборыДанныхРасширенный. В частности, ключевой является функция ПолучитьТекстОбщегоЗапроса. Поставив точку останова в этой функции и запустив формирование отчёта, мы сможем извлечь итоговый текст запроса из переменной, которая содержит собранную строку.

Ключевой источник: Регистр «Начисления удержания по сотрудникам»

Хотя отчет собирает данные из множества мест, «сердцем» отчёта «Анализ начислений и удержаний» является оборотный регистр накопления НачисленияУдержанияПоСотрудникам. Посмотрим на его роль подробнее:

  1. Денормализация данных: В отличие от классических регистров расчета (таких как Начисления), этот регистр специально спроектирован для быстрой отчетности. Он содержит в себе сразу и сотрудника, и организацию, и сумму, и вид начисления/удержания.
  2. Зеркалирование: Данные в этот регистр попадают одновременно с проведением расчетных документов (Начисление зарплаты, Премия, Отпуск и т.д.).
  3. Группировка: В этом регистре есть важное измерение ГруппаНачисленияУдержанияВыплаты, которое позволяет отчету классифицировать записи по категориям.

Проанализируем пример того, как данные могут извлекаться из этого регистра напрямую:


ВЫБРАТЬ
    НачисленияУдержанияПоСотрудникам.Сотрудник КАК Сотрудник,
    НачисленияУдержанияПоСотрудникам.НачислениеУдержание КАК НачислениеУдержание,
    НачисленияУдержанияПоСотрудникам.Сумма КАК Сумма
ИЗ
    РегистрНакопления.НачисленияУдержанияПоСотрудникам КАК НачисленияУдержанияПоСотрудникам
ГДЕ
    НачисленияУдержанияПоСотрудникам.ПериодРегистрации МЕЖДУ &НачалоПериода И &КонецПериода

Однако помните, что этот регистр — лишь верхушка айсберга. Если в отчете выведены колонки с НДФЛ или взносами, система подключит дополнительные таблицы.

Откуда берутся данные о времени (Дни и Часы)

Одной из главных загадок для начинающих разработчиков является источник данных об отработанном времени. Выясним причину, почему их часто нет в регистре начислений. В ЗУП 3.1 для учета времени используются отдельные механизмы:

В итоговом запросе отчета происходит левое соединение сумм из регистра начислений с данными о времени по ключу, состоящему из Сотрудник, ПериодРегистрации и ВидРасчета.

Регистры взаиморасчетов и сальдо

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

  1. Взаиморасчеты с сотрудниками: Хранит информацию в разрезе месяцев начисления. Это то, что мы привыкли видеть как «долг за предприятием» или «долг за сотрудником» в разрезе периодов.
  2. Бухгалтерские взаиморасчеты с сотрудниками: Этот регистр используется, когда необходимо сформировать отчетность по данным бухгалтерского учета. Различия между этими двумя регистрами часто являются причиной расхождения сумм к выплате и начисленных сумм, если выплаты регистрировались без привязки к конкретным документам-основаниям.
  3. Зарплата к выплате: Регистр, в котором фиксируются суммы, фактически подготовленные к выплате ведомостями.

НДФЛ и Страховые взносы

Когда вы добавляете в настройки отчёта «Анализ начислений и удержаний» информацию о налогах, механизм СКД динамически добавляет к основному запросу через ОБЪЕДИНИТЬ ВСЕ (UNION ALL) выборки из следующих регистров:

Практические советы по анализу отчета

Если вам необходимо точно понять, почему в отчете появилась та или иная цифра, выполните следующие шаги:

  1. Используйте консоль запросов: Но не пытайтесь копировать запрос из схемы компоновки. Лучше используйте внешние обработки «Консоль системы компоновки данных», которые умеют перехватывать итоговый макет с уже подставленными параметрами и сгенерированным текстом запроса.
  2. Проверьте справочник «Группы начислений и удержаний»: Часто данные попадают не в ту колонку не из-за ошибки в регистре, а из-за того, что в настройках конкретного Вида Расчета (на вкладке «Налоги, взносы, бухучет») указана неверная функциональная группа.
  3. Анализируйте расшифровку: В режиме 1С:Предприятие дважды щелкните на сомнительную цифру и выберите расшифровку по полю Регистратор. Это самый быстрый способ увидеть документ-источник, который сделал запись в регистр.

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

← На главную