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