Как получить данные трудового договора в печатной форме для документа Кадровый перевод списком в ЗУП 3.1?

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

Разберем типичную задачу, с которой сталкиваются начинающие разработчики при создании внешних печатных форм (ВПФ) для программы 1С:Зарплата и Управление Персоналом 3.1. Основная сложность заключается в том, что в архитектуре ЗУП 3.1 документы, такие как Кадровый перевод списком, не содержат в своих реквизитах данных о трудовом договоре (его номере и дате). Эти сведения являются актуальными кадровыми данными и хранятся в специализированных регистрах сведений.

Почему не удается получить номер и дату договора напрямую из документа?

При попытке обратиться к документу через СсылкаНаОбъект.ТрудовойДоговорНомер, система выдаст ошибку, так как подобных полей у объекта просто нет. Даже при попытке итерироваться по табличной части Сотрудники, вы не обнаружите там нужных реквизитов. Эти данные хранятся отдельно, чтобы обеспечить актуальность информации при изменениях кадровых условий.

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

Чтобы корректно вывести номер и дату трудового договора в печатную форму, необходимо использовать возможности запросов 1С. Основным источником данных для трудовых договоров является регистр сведений ОсновныеДанныеКонтрактаДоговораСотрудника.

Рассмотрим пошагово, как построить правильный запрос для получения этой информации:

  1. Определение источников данных: Нам необходимо соединить справочник Сотрудники с регистром ОсновныеДанныеКонтрактаДоговораСотрудника.
  2. Фильтрация актуальных данных: Если нам нужно получить данные только по работающим сотрудникам, полезно дополнительно использовать регистр ТекущиеКадровыеДанныеСотрудников.

Пример кода для реализации запроса в модуле вашей печатной формы:


ВЫБРАТЬ
    Сотрудники.Ссылка КАК Ссылка,
    Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
    ОсновныеДанныеКонтрактаДоговораСотрудника.ДатаДоговораКонтракта КАК ДатаДоговораКонтракта,
    ОсновныеДанныеКонтрактаДоговораСотрудника.НомерДоговораКонтракта КАК НомерДоговораКонтракта
ИЗ
    Справочник.Сотрудники КАК Сотрудники
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОсновныеДанныеКонтрактаДоговораСотрудника КАК ОсновныеДанныеКонтрактаДоговораСотрудника
    ПО (ОсновныеДанныеКонтрактаДоговораСотрудника.Сотрудник = Сотрудники.Ссылка)

Особенности использования регистров для печатных форм

Разберем подробнее, почему использование регистров — это единственный надежный путь:

Рекомендация по архитектуре ВПФ

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

  1. Собрать все ссылки на сотрудников из табличной части документа в массив.
  2. Выполнить один общий запрос к регистрам сведений, передав этот массив как параметр В (СотрудникиСписок).
  3. Выгрузить результат запроса в таблицу значений или временную таблицу, чтобы быстро обращаться к ней при выводе областей макета.

Используя этот подход, вы обеспечите быструю работу вашей внешней печатной формы даже при большом списке сотрудников в документе Кадровый перевод списком. Помните, что использование ОсновныеДанныеКонтрактаДоговораСотрудника вместе с ТекущиеКадровыеДанныеСотрудников — это стандарт индустрии при разработке для ЗУП 3.1, позволяющий избежать ошибок доступа к данным и обеспечить корректный вывод информации в печатные формы.

← На главную