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