Как получить список сотрудников из документа Ведомость в банк в ЗУП 3.1 и зачем нужны разные табличные части

Программист 1С:Зарплата и Управление Персоналом
← На главную

При работе с конфигурацией 1С:Зарплата и управление персоналом 3.1 программисты часто сталкиваются с особенностью реализации документа ВедомостьНаВыплатуЗарплатыВБанк. В конфигураторе мы видим несколько табличных частей, таких как Состав, Зарплата и НДФЛ (Подоходный налог), однако на форме документа пользователю видна только одна — Состав. При этом в видимой части фигурируют только физические лица, а не сотрудники. Разберемся подробно, почему так устроена система и как правильно извлекать данные о сотрудниках для кастомных отчетов или обработок.

Архитектурное разделение табличных частей: Состав vs Зарплата

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

  1. Табличная часть «Состав»: Это своего рода «витрина». Она агрегирует данные до уровня Физического лица. Это необходимо, потому что конечному получателю (банку и сотруднику) не важно, по скольким трудовым договорам (основное место, внутреннее совместительство) начислена сумма. Важна итоговая сумма к выплате на конкретный лицевой счет.
  2. Табличная часть «Зарплата»: Это аналитический фундамент. Здесь хранятся детальные записи в разрезе объектов СправочникСсылка.Сотрудники, Подразделений, Статей финансирования и Периодов взаиморасчетов. Именно эта таблица служит источником данных для проведения документа по регистру накопления ВзаиморасчетыССотрудниками.

Рассмотрим подробнее причину использования физических лиц в видимой части. В Сообщении 4 правильно отмечено, что расчет и удержание НДФЛ привязаны к человеку (физическому лицу), а не к его рабочему месту. Поскольку у одного физлица может быть несколько карточек сотрудников (например, основное место работы и внутреннее совместительство), система должна собрать все начисления воедино, чтобы корректно применить налоговые вычеты и рассчитать прогрессивную ставку налога.

Как получить сотрудников в записанном документе

Если задача состоит в том, чтобы получить список сотрудников и суммы выплат по уже существующему (записанному в базу) документу, наиболее эффективным способом будет использование запроса к табличной части Зарплата. В отличие от регистра, данные в ТЧ доступны сразу после сохранения документа, даже если он еще не проведен.

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


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

Этот метод позволяет увидеть реальную картину: если у физлица есть две «карточки» (сотрудника), запрос вернет две строки с соответствующими суммами, в то время как на форме документа будет отображена одна строка с общей суммой по физлицу.

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

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

Выясним причину: при нажатии кнопки «Заполнить» срабатывают процедуры программного интерфейса (обычно находящиеся в общих модулях типа ВыплатаЗарплаты), которые рассчитывают задолженность перед сотрудниками и заполняют коллекции объекта. Хотя ТЧ Зарплата не отображается на форме, она присутствует в реквизите Объект.

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


&НаСервере
Процедура ПолучитьСписокСотрудниковИзФормы()
    // Обращаемся напрямую к табличной части незаписанного объекта
    Для Каждого СтрокаЗарплаты Из Объект.Зарплата Цикл
        ТекСотрудник = СтрокаЗарплаты.Сотрудник;
        ТекСумма = СтрокаЗарплаты.КВыплате;
        
        // Здесь можно выполнять логику со списком сотрудников
        Сообщить("Сотрудник: " + ТекСотрудник + " Сумма: " + ТекСумма);
    КонецЦикла;
КонецПроцедуры

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

Особенности внутреннего совместительства и перемещений

Проанализируем ситуацию из Сообщения 10 и 11. Зачем нам список именно сотрудников, а не физлиц? Это критично в следующих случаях:

Если вы будете опираться только на ТЧ Состав, вы потеряете эту аналитику и не сможете понять, какая часть суммы относится к конкретному рабочему месту.

Рекомендации по работе с регистрами

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

Использование регистра предпочтительнее для построения отчетов, так как он гарантирует целостность данных и учитывает все корректировки, которые могли быть внесены позже другими документами.

Резюмируем:

  1. Для визуального контроля используйте ТЧ Состав.
  2. Для программного получения списка сотрудников и аналитики выплат (статьи, подразделения) используйте ТЧ Зарплата.
  3. Для получения данных до момента записи документа обращайтесь к коллекции Объект.Зарплата в серверном коде формы.
  4. Всегда учитывайте, что за одним физическим лицом может стоять несколько сотрудников, и именно ТЧ Зарплата хранит эту связь.
← На главную