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