Как получить актуальный банковский счет и БИК сотрудника в 1С:ЗУП 3.1?

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

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

Причины появления «дублей» в результатах запроса

Проанализируем ситуацию: почему при запросе номера счета и БИК мы можем получить две и более строки на одного сотрудника? Рассмотрим основные технические причины:

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

Шаг 1: Фильтрация по пометке на удаление

Прежде всего, проверим самый простой вариант. При написании запроса к справочнику БанковскиеСчетаКонтрагентов необходимо всегда проверять статус записи. Посмотрим на пример кода запроса, который отсекает лишние данные:


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

Как показывает практика, в 90% случаев «лишние» записи — это именно помеченные на удаление объекты, которые пользователь не видит в интерфейсе, но которые «видит» запрос.

Шаг 2: Определение актуального счета через регистры сведений

Если после фильтрации по помеченным на удаление записям всё равно выводится несколько строк, нам нужно выяснить, какой именно счет является основным для выплаты зарплаты на текущий момент. В ЗУП 3.1 эта информация не хранится в самом справочнике счетов. Нам необходимо обратиться к специализированным регистрам. При выделении зарплатного учета из комплексной системы перенос кадровых и расчётных данных ERP 2 — ЗУП 3 обеспечивается автоматическое наполнение этих регистров на основании накопленной истории.

Основным источником данных является регистр сведений МестаВыплатыЗарплатыСотрудников. Рассмотрим подробнее, как работает логика системы:

Проанализируем запрос, который позволяет получить именно тот счет, который выбран в карточке сотрудника в разделе «Выплаты и учет затрат»:


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

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

Шаг 3: Получение БИК из справочника Банки

Как было замечено в обсуждении, реквизит БИК часто выведен на форму элемента справочника БанковскиеСчетаКонтрагентов программно, и его нет в списке реквизитов самого справочника. В типовых конфигурациях 1С БИК — это Код элемента справочника Банки.

Чтобы вытащить его запросом, мы обращаемся к реквизиту через точку: БанковскийСчет.Банк.Код. Выясним причину, по которой БИК может двоиться: если в справочнике Банки создано два элемента с названием «Филиал №34 Банка ВТБ», но с разными кодами, и на каждый из них ссылается свой банковский счет сотрудника, мы получим две разные строки.

Итоговый алгоритм решения задачи

Для гарантированного получения актуального БИК рекомендуем придерживаться следующей последовательности действий:

  1. Определяем контекст выплаты. Если нам нужен счет для зарплатной ведомости, обращаемся к РегистрСведений.МестаВыплатыЗарплатыСотрудников.СрезПоследних.
  2. Проверяем иерархию настроек. Помним, что если на уровне сотрудника место выплаты не задано, нужно проверить настройки подразделения или организации (регистры МестаВыплатыЗарплатыПодразделений и МестаВыплатыЗарплатыОрганизаций соответственно).
  3. Соединяем данные. Полученную ссылку на банковский счет из регистра соединяем со справочником БанковскиеСчетаКонтрагентов, чтобы достать Банк.Код.
  4. Добавляем проверку на пометку удаления. Даже в регистрах могут остаться ссылки на битые объекты, поэтому дополнительная проверка НЕ БанковскийСчет.ПометкаУдаления лишней не будет.

Таким образом, мы уходим от неопределенности «какой счет последний по дате» к четкой бизнес-логике программы: актуальным считается тот счет, который назначен сотруднику ответственным лицом (бухгалтером или расчетчиком) в качестве целевого для перечисления денежных средств.

← На главную