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