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