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