Как в 1С:ЗУП 3.1 получить значения показателей начислений из документа «Кадровый перевод» через запрос?

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

При разработке отчетов или доработке конфигурации 1С:Зарплата и управление персоналом 3.1 разработчики часто сталкиваются с задачей извлечения конкретных числовых значений начислений (размеров окладов, тарифных ставок, надбавок) из кадровых документов, таких как Кадровый перевод или Прием на работу.

При попытке найти соответствующий реквизит в конфигураторе на форме документа возникает сложность: привычных колонок с суммами в табличной части начислений нет. Разберем по шагам, как устроено хранение этих данных в системе и как составить корректный запрос для их получения.

Почему колонки показателей отсутствуют в метаданных формы?

Рассмотрим внутренний механизм отображения начислений в ЗУП 3.1. Колонки с показателями (например, «Оклад», «Тарифная ставка», «Процент надбавки») формируются в табличной части динамически при открытии формы. Программа анализирует формулы назначенных видов расчетов и состав показателей из справочника Показатели расчета зарплаты, после чего программно добавляет соответствующие элементы на форму.

По этой причине найти статическое поле на форме или обратиться к нему напрямую как к реквизиту табличной части Начисления невозможно. Сами числовые значения хранятся в отдельной подчиненной структуре.

Структура хранения данных: связь табличных частей «Начисления» и «Показатели»

В документе Кадровый перевод информация о назначаемых начислениях разделена между двумя табличными частями:

  1. Табличная часть Начисления — содержит перечень видов начислений (ссылки на план видов расчета), порядок их действия, дату начала и дату окончания.
  2. Табличная часть Показатели — содержит числовые значения конкретных показателей в реквизите Значение и ссылку на справочник ПоказателиРасчетаЗарплаты в реквизите Показатель.

Связь между строкой начисления и строками его показателей осуществляется с помощью специального реквизита ИдентификаторСтрокиВидаРасчета. У одного начисления может быть несколько показателей (например, формула вида «Оклад * Коэффициент * Процент»), и все они будут иметь одинаковый идентификатор, связывающий их со строкой начисления.

Как правильно связать таблицы в запросе и избежать зависаний

Проанализируем типичные ошибки, возникающие при составлении запросов к данным табличным частям:

  1. Соединение только по полю ИдентификаторСтрокиВидаРасчета. Поле является числовым идентификатором внутри конкретного документа. Если не добавить связь по полю Ссылка, запрос выполнит декартово соединение строк всех документов в информационной базе, что приведет к зависанию системы и падению по тайм-ауту.
  2. Соединение по полю НомерСтроки. Использовать номер строки категорически нельзя, так как нумерация строк в независимых табличных частях документа не синхронизирована.
  3. Использование поля шапки СовокупнаяТарифнаяСтавка. Данный реквизит документа содержит сумму только тех показателей, которые явно включены в настройках программы в состав совокупной тарифной ставки. Если показатель туда не входит или настройки не заданы, поле останется незаполненным.

Таким образом, для получения точного значения показателя необходимо связывать таблицы строго по двум полям: Ссылка и ИдентификаторСтрокиВидаРасчета.

Пример корректного запроса к документу «Кадровый перевод»

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


ВЫБРАТЬ
	ПереводНачисления.Ссылка.Сотрудник КАК Сотрудник,
	ПереводНачисления.Ссылка.Дата КАК ДатаДокумента,
	ПереводНачисления.Ссылка.ДатаНачала КАК ДатаПеревода,
	ПереводНачисления.Начисление.Наименование КАК ВидНачисления,
	ПереводПоказатели.Показатель.Наименование КАК Показатель,
	ПереводПоказатели.Значение КАК ЗначениеПоказателя
ИЗ
	Документ.КадровыйПеревод.Начисления КАК ПереводНачисления
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.КадровыйПеревод.Показатели КАК ПереводПоказатели
		ПО ПереводНачисления.Ссылка = ПереводПоказатели.Ссылка
			И ПереводНачисления.ИдентификаторСтрокиВидаРасчета = ПереводПоказатели.ИдентификаторСтрокиВидаРасчета
ГДЕ
	ПереводНачисления.Ссылка.Проведен = ИСТИНА
	И ПереводНачисления.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
	И ПереводНачисления.Ссылка.Подразделение В ИЕРАРХИИ(&Подразделение)
УПОРЯДОЧИТЬ ПО
	Сотрудник,
	ДатаПеревода

Если для части начислений показатели могут не требоваться (например, начисления с фиксированной суммой без формульных показателей), вместо конструкции ВНУТРЕННЕЕ СОЕДИНЕНИЕ следует использовать ЛЕВОЕ СОЕДИНЕНИЕ.

Альтернативный способ: получение действующих показателей через регистры сведений

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

Разберем основные регистры ЗУП 3.1 для этой задачи:

  1. Регистр сведений ПлановыеНачисления (срез последних) — предоставляет актуальный список действующих начислений сотрудников на заданную дату.
  2. Регистр сведений ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников — хранит значения окладов, тарифных ставок и персональных коэффициентов в разрезе сотрудников и показателей.
  3. Регистр сведений ТекущиеКадровыеДанныеСотрудников — содержит готовые предрассчитанные данные по сотрудникам, включая текущую позицию штатного расписания и тарифную ставку, что существенно ускоряет построение кадровой отчетности.
← На главную