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

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

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

Анализ механизма получения сведений об участниках сделки

В типовых конфигурациях 1С для извлечения реквизитов юридических и физических лиц используется общий модуль (например, ФормированиеПечатныхФорм или подсистемы БСП). Функция СведенияОЮрФизЛице принимает на вход ссылку на организацию или контрагента и возвращает структуру со всеми базовыми реквизитами, включая ИНН, КПП, адреса, телефоны и банковские данные.

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


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

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

Обратим внимание на четвертый параметр функции. Если в запросе печати расчетный счет покупателя не выбирается отдельным полем, передавать параметр БанковскийСчет для контрагента не требуется — при передаче пустого значения функция попытается автоматически определить основной банковский счет контрагента.

Заполнение параметров макета печатной формы

После получения структур СведенияОПоставщике и СведенияОПокупателе необходимо перенести банковские реквизиты в структуру данных для заполнения параметров макета. Проанализируем пример кода:


// Реквизиты поставщика
СтруктураДанныхШапки.Вставить("ОКЭДПоставщика", СведенияОПоставщике.КодПоОКПО);
СтруктураДанныхШапки.Вставить("ИННПоставщика", СведенияОПоставщике.ИНН);
СтруктураДанныхШапки.Вставить("БИКПоставщика", СведенияОПоставщике.БИК);
СтруктураДанныхШапки.Вставить("БанкПоставщика", СведенияОПоставщике.Банк);
СтруктураДанныхШапки.Вставить("ГородПоставщика", СведенияОПоставщике.ГородБанка);
СтруктураДанныхШапки.Вставить("РСПоставщика", СведенияОПоставщике.НомерСчета);

// Реквизиты покупателя
СтруктураДанныхШапки.Вставить("ПредставлениеПокупателя", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПокупателе, "ПолноеНаименование"));
СтруктураДанныхШапки.Вставить("АдресПокупателя", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПокупателе, "ЮридическийАдрес"));
СтруктураДанныхШапки.Вставить("ТелефонПокупателя", СведенияОПокупателе.Телефоны);
СтруктураДанныхШапки.Вставить("БанкПокупателя", СведенияОПокупателе.Банк);
СтруктураДанныхШапки.Вставить("БИКПокупателя", СведенияОПокупателе.БИК);
СтруктураДанныхШапки.Вставить("ГородПокупателя", СведенияОПокупателе.ГородБанка);
СтруктураДанныхШапки.Вставить("РСПокупателя", СведенияОПокупателе.НомерСчета);
СтруктураДанныхШапки.Вставить("ИННПокупателя", СведенияОПокупателе.ИНН);

// Заполнение области макета
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки);

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

Диагностика и поиск ошибок через механизм отладки

Если в процессе формирования печатной формы возникают ошибки типа «Поле объекта не обнаружено» или в ячейках выводятся пустые строки, воспользуемся встроенными средствами отладки 1С:

  1. Вычислить выражение (Shift + F9): Установим точку останова перед проблемной строкой. В окне вычисления выражений можно в реальном времени проверить содержимое переменных ДанныеПечати, СведенияОПокупателе или вызвать функцию ФормированиеПечатныхФорм.СведенияОЮрФизЛице(...) с различными параметрами, не перезапуская сеанс.
  2. Табло (Ctrl + Alt + W): Позволяет отслеживать несколько выражений одновременно при пошаговом выполнении алгоритма (F10 / F11).
  3. Остановка по ошибке: В главном меню конфигуратора выберем Отладка -> Остановка по ошибке и включим флаг Останавливаться по ошибке. Это позволит сразу увидеть строку, в которой происходит сбой.

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

Выясним основные причины, из-за которых банковские реквизиты покупателя могут не отображаться на печатной форме:

  1. У контрагента не назначен основной расчетный счет: Если у партнера создано несколько банковских счетов, типовой алгоритм 1С ищет счет по умолчанию. Если ни один счет не отмечен кнопкой Использовать как основной, метод вернет пустую ссылку.
  2. Счет привязан к договору, а не к контрагенту: В ряде конфигураций расчетный счет контрагента фиксируется в договоре или соглашении. В таком случае в запрос печати следует добавить поле Документы.Договор.БанковскийСчет и передавать его явным образом.
  3. Несоответствие валюты счета: Если валюта документа отличается от валюты расчетного счета покупателя, система отфильтрует данный счет при автоматическом подборе.
  4. Пометка на удаление или закрытие счета: Если единственный активный счет помечен на удаление или закрыт, типовая функция проигнорирует его.

Программная подстраховка для выбора активного счета (Fallback)

Если у контрагентов в базе часто не заполнен основной банковский счет, напишем вспомогательную функцию для получения первого доступного расчетного счета:


Функция ПолучитьАктивныйБанковскийСчетКонтрагента(КонтрагентСсылка, ВалютаДокумента)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |	БанковскиеСчета.Ссылка КАК Ссылка
        |ИЗ
        |	Справочник.БанковскиеСчетаКонтрагентов КАК БанковскиеСчета
        |ГДЕ
        |	БанковскиеСчета.Владелец = &Владелец
        |	И НЕ БанковскиеСчета.ПометкаУдаления
        |	И БанковскиеСчета.ВалютаДенежныхСредств = &Валюта";
    
    Запрос.УстановитьПараметр("Владелец", КонтрагентСсылка);
    Запрос.УстановитьПараметр("Валюта", ВалютаДокумента);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        Возврат Выборка.Ссылка;
    КонецЕсли;
    
    Возврат Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка();
КонецФункции

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

← На главную