При разработке внешних печатных форм (ВПФ) в конфигурации 1С:Розница часто возникает задача вывести банковские реквизиты контрагента, такие как номер счета, БИК банка или корреспондентский счет. Поскольку эти данные не всегда доступны напрямую в объекте документа, нам необходимо воспользоваться средствами запросов или типовыми методами конфигурации. Рассмотрим подробно, как это реализовать.
Если вам требуется вывести данные конкретного счета, наиболее простым способом будет выполнение запроса к справочнику БанковскиеСчетаКонтрагентов. Ключевым моментом здесь является правильная фильтрация данных по владельцу счета, чтобы в печатную форму не попали реквизиты другого контрагента.
Разберем процесс по шагам:
Запрос.ГДЕ, чтобы ограничить выборку конкретным контрагентом.Посмотрим на пример реализации такого запроса:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| БанковскиеСчетаКонтрагентов.НомерСчета КАК НомерСчета,
| БанковскиеСчетаКонтрагентов.БИКБанка КАК БИКБанка,
| БанковскиеСчетаКонтрагентов.КоррСчетБанка КАК КоррСчетБанка
|ИЗ
| Справочник.БанковскиеСчетаКонтрагентов КАК БанковскиеСчетаКонтрагентов
|ГДЕ
| БанковскиеСчетаКонтрагентов.Владелец = &Контрагент";
Запрос.УстановитьПараметр("Контрагент", СсылкаНаОбъект.Контрагент);
Результаты = Запрос.Выполнить();
Если НЕ Результаты.Пустой() Тогда
Выборка = Результаты.Выбрать();
Если Выборка.Следующий() Тогда
Макет.Параметры.НомерСчетаПокупателя = Выборка.НомерСчета;
КонецЕсли;
Иначе
Сообщить("У контрагента не задан банковский счет!");
КонецЕсли;
В типовых конфигурациях 1С, включая Розницу, существуют готовые методы, которые значительно упрощают задачу и делают код более устойчивым к изменениям структуры базы данных. Вместо написания громоздких запросов, рекомендуется обращаться к методам менеджера справочника.
Рассмотрим использование метода ПолучитьБанковскийСчетПоУмолчанию:
// Получаем основной счет контрагента
БанковскийСчет = Справочники.БанковскиеСчетаКонтрагентов.ПолучитьБанковскийСчетПоУмолчанию(СсылкаНаОбъект.Контрагент);
// Если счет найден, получаем его полные реквизиты
Если ЗначениеЗаполнено(БанковскийСчет) Тогда
РеквизитыСчета = Справочники.БанковскиеСчетаКонтрагентов.ПолучитьРеквизитыБанковскогоСчета(БанковскийСчет);
Макет.Параметры.НомерСчетаПокупателя = РеквизитыСчета.НомерСчета;
Макет.Параметры.БИК = РеквизитыСчета.БИК;
Макет.Параметры.КоррСчет = РеквизитыСчета.КоррСчет;
КонецЕсли;
Преимущества этого подхода:
Справочники.БанковскиеСчетаКонтрагентов исключает риск того, что вы пропустите важное поле или ошибётесь в наименовании реквизита.При написании кода для печатных форм всегда помните о следующих правилах:
1. Всегда проверяйте данные на пустоту. Не забывайте использовать Результаты.Пустой() или ЗначениеЗаполнено(). Попытка обратиться к несуществующему объекту вызовет ошибку, которая прервет выполнение печати документа.
2. Используйте серверные функции. Если в конфигурации уже есть готовые процедуры, такие как ФормированиеПечатныхФормСервер.СведенияОЮрФизЛице, старайтесь использовать их для получения стандартных реквизитов (ИНН, КПП, наименование). Это сократит количество кода в вашей функции СформироватьПечатнуюФорму.
3. Выбор счета. Если у контрагента несколько счетов, логика выбора нужного должна быть четко определена (например, выбор основного счета или счета, указанного в текущем заказе). Если нужно вывести несколько счетов, используйте цикл по выборке запроса и выводите данные в отдельные области табличного документа.
Надеемся, эти советы помогут вам эффективно реализовать вывод банковских реквизитов в ваших печатных формах!