Почему не получается получить «Статью финансирования» через стандартные кадровые запросы?

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

При разработке отчетов или обработок в конфигурациях ЗУП 3.1 или ЗКГУ 3.1 часто возникает потребность вывести «Статью финансирования» в разрезе дат. Разработчики часто пытаются использовать стандартный механизм КадровыйУчет.ЗапросВТКадровыеДанныеСотрудников, однако сталкиваются с тем, что данные возвращаются некорректно: колонка либо пустая, либо содержит данные только на текущую дату, игнорируя исторические изменения.

Давайте разберем, почему это происходит и как правильно получать эти сведения.

Выясняем причину проблемы

Основная ошибка заключается в том, что мы воспринимаем «Статью финансирования» как кадровое данное (например, «Должность» или «График работы»). В архитектуре 1С:ЗУП 3.0/3.1 это разные сущности:

  1. Кадровые данные: Хранятся в регистрах сведений (таких как КадровыеДанныеСотрудников), которые имеют периодичность «День». Стандартные функции КадровыйУчет работают именно с ними.
  2. Бухгалтерские данные: «Статья финансирования» — это реквизит, относящийся к учету начислений и отражению зарплаты. В большинстве случаев (особенно в ЗУП) этот реквизит не является измерением кадровых регистров.

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

Как правильно получать «Статью финансирования»

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

Способ 1: Прямое обращение к регистру бухучета

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

Разберем, как построить такой запрос:


ВЫБРАТЬ
    БухучетЗарплатыСотрудниковСрезПоследних.Сотрудник,
    БухучетЗарплатыСотрудниковСрезПоследних.СтатьяФинансирования
ИЗ
    РегистрСведений.БухучетЗарплатыСотрудников.СрезПоследних(&Период, ) КАК БухучетЗарплатыСотрудниковСрезПоследних
ГДЕ
    БухучетЗарплатыСотрудниковСрезПоследних.Сотрудник В (&СписокСотрудников)

Важно: Если вам нужно получить данные на каждый день месяца, используйте объединение запросов или временные таблицы, передавая в СрезПоследних последовательно каждый день из вашего периода. Обратите внимание, что прямое обращение к этому регистру требует проверки настроек учетной политики, так как в ЗУП данные могут наследоваться от организации или подразделения, если для сотрудника они не заданы индивидуально.

Способ 2: Использование специализированных функций конфигурации

В типовых конфигурациях существуют специализированные модули, предназначенные для получения плановых данных. Вместо универсального кадрового учета рекомендуем изучить методы модуля ЗарплатаКадрыОбщиеНаборыДанных.

Часто в коде типовых решений используется логика, которая приоритезирует источники данных:

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

Рекомендации по анализу

  1. Проверьте движения документа: Откройте документ «Кадровый перевод» в конфигураторе и посмотрите, в какие регистры он делает движения. Если там нет регистра, связанного с бухучетом, значит, ваши данные — это не кадровое событие.
  2. Используйте отладчик: Установите точку останова в месте, где отрабатывает ваш запрос, и проверьте содержимое таблицы ВТКадровыеДанныеСотрудников. Если колонка СтатьяФинансирования пуста, значит, функция КадровыйУчет не смогла сопоставить записи.
  3. Будьте внимательны с ЗКГУ: В государственных конфигурациях механизм финансирования более жесткий и может требовать обращения к специфическим регистрам, отражающим бюджетную классификацию.

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

← На главную