Как получить банковский счет контрагента в 1С:Управление торговлей 11.5 или ERP 2.5?

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

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

Понимание архитектуры: почему нет прямого реквизита?

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

Справочник БанковскиеСчетаКонтрагентов является подчиненным справочнику Контрагенты. Это означает, что для одного контрагента может быть создано неограниченное количество счетов (например, когда создается счет на оплату клиенту из документа Реализация товаров и услуг). Именно по этой причине в справочнике Контрагенты отсутствует поле «Основной банковский счет» — логика выбора того или иного счета определяется функционалом системы, а не статичным реквизитом.

Способ 1: Получение счета по умолчанию с помощью встроенных функций

Если вам нужно просто получить основной банковский счет контрагента в программном коде, не перегружая систему сложными SQL-запросами, воспользуйтесь готовым методом, который предоставляет сама конфигурация. Рассмотрим пример использования модуля БанковскиеСчетаКонтрагентов:


// Получаем основной банковский счет контрагента
// КонтрагентСсылка — ссылка на элемент справочника Контрагенты
БанковскийСчет = Справочники.БанковскиеСчетаКонтрагентов.ПолучитьБанковскийСчетПоУмолчанию(КонтрагентСсылка);

Этот подход предпочтительнее, так как он инкапсулирует всю внутреннюю логику определения «основного» счета, которую могут изменять разработчики 1С при обновлении конфигурации (особенно это важно, когда разрабатывается современный счет на оплату с QR-кодом). Вам не нужно следить за тем, как именно в базе данных помечается основной счет — функция сделает это за вас.

Способ 2: Использование механизмов Библиотеки стандартных подсистем (БСП)

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

Рассмотрим использование модуля ФормированиеПечатныхФорм:


// Получаем структуру сведений для печати
// Сюда входят все необходимые реквизиты, включая банковские
ДанныеОрганизации = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(КонтрагентСсылка, ТекущаяДата());
// Далее вы можете обратиться к нужному полю структуры
БанковскийСчетСтрокой = ДанныеОрганизации.БанковскийСчет;

Использование подобных методов позволяет избежать ошибок, связанных с изменениями структуры метаданных в будущих релизах платформы. Мы рекомендуем этот метод как основной при разработке отчетов и внешних печатных форм.

Способ 3: Получение данных через запрос (JOIN)

Если ваша задача — вывести список счетов в отчете на системе компоновки данных (СКД) или в сложном отчете, где требуется соединение данных, используйте классическое ЛЕВОЕ СОЕДИНЕНИЕ с таблицей БанковскиеСчетаКонтрагентов.

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


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

Важное примечание: при использовании соединения помните, что у одного контрагента может быть несколько счетов. Если в запросе не задать дополнительные условия (например, фильтр по «Основному» или конкретному счету), запрос вернет столько строк, сколько счетов заведено у контрагента. Чтобы избежать дублирования строк в отчете, обязательно накладывайте отбор или используйте ЕСТЬNULL, если данные могут отсутствовать.

Резюме по работе с контрагентами

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

Следуя этим правилам, вы обеспечите стабильность вашего кода и корректную работу системы учета даже при самых сложных обновлениях.

← На главную