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