Как получить реквизиты банковского счета контрагента при создании внешней печатной формы в 1С?

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

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

Использование типовых механизмов (Рекомендуемый подход)

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

  1. Выбор «основного» банковского счета.
  2. Корректную работу с историей изменений реквизитов.
  3. Фильтрацию счетов по дате действия.

Рассмотрим пример реализации в коде вашей печатной формы:


СведенияОПокупателе = ФормированиеПечатныхФормСервер.СведенияОЮрФизЛице(СсылкаНаОбъект.Контрагент, СсылкаНаОбъект.Дата);
Макет.Параметры.НомерСчетаПокупателя = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПокупателе, "НомерСчета");

Использование функции СведенияОЮрФизЛице избавляет вас от необходимости вручную обходить справочники и писать сложные запросы, так как разработчики 1С уже позаботились о том, чтобы получить актуальные данные на дату документа.

Реализация через запрос: пошаговый разбор

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

Чтобы получить данные конкретного контрагента, необходимо правильно настроить параметры запроса и фильтрацию. Разберем это по шагам:

  1. Фильтрация по владельцу: В запросе обязательно должно присутствовать условие ГДЕ, ограничивающее выборку конкретным контрагентом.
  2. Обход результата: Мало выполнить запрос — необходимо получить выборку, чтобы перебрать записи и передать нужный номер счета в параметры макета.

Пример корректного запроса:


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    БанковскиеСчетаКонтрагентов.НомерСчета КАК НомерСчета,
               |    БанковскиеСчетаКонтрагентов.НаименованиеБанка КАК НаименованиеБанка,
               |    БанковскиеСчетаКонтрагентов.БИКБанка КАК БИКБанка
               |ИЗ
               |    Справочник.БанковскиеСчетаКонтрагентов КАК БанковскиеСчетаКонтрагентов
               |ГДЕ
               |    БанковскиеСчетаКонтрагентов.Владелец = &Контрагент";

Запрос.УстановитьПараметр("Контрагент", СсылкаНаОбъект.Контрагент);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Если Выборка.Следующий() Тогда
    Макет.Параметры.НомерСчетаПокупателя = Выборка.НомерСчета;
КонецЕсли;

На что обратить внимание

При самостоятельной работе с запросами помните о следующих нюансах:

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

← На главную