Как программно заполнить банковский счет контрагента, чтобы БИК и данные банка отображались корректно?

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

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

В чем причина «невидимости» БИК?

Проанализируем ситуацию. В современных конфигурациях (БП 3.0, УТ 11, ERP 2, КА) справочник БанковскиеСчета тесно связан со справочником КлассификаторБанков. Важно понимать, что в большинстве случаев поле "БИК" на форме — это не просто текстовый реквизит самого счета. Это либо данные, которые динамически вычисляются при чтении формы, либо отображение реквизита Код связанного элемента из классификатора банков.

Когда мы просто записываем строку с БИК в объект счета, система «не понимает», к какому официальному банку привязана эта запись. В результате механизмы управляемых форм, завязанные на событие ПриЧтенииНаСервере, не находят ссылки на классификатор и оставляют поля пустыми. Рассмотрим подробнее, как обойти это ограничение.

Алгоритм правильной программной загрузки

Для того чтобы данные отображались корректно, нам необходимо выполнить не просто запись строковых значений, а установить правильные связи между объектами. Разберем по шагам правильный порядок действий:

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

Реализация программного кода

Проанализируем пример кода, который решает поставленную задачу. Предположим, у нас есть переменные ВыбКонтрагент, ТекстовыйБИК и НомерСчета, полученные из Excel.


// 1. Ищем банк в классификаторе по БИК
СсылкаНаБанк = Справочники.КлассификаторБанков.НайтиПоКоду(ТекстовыйБИК);

Если СсылкаНаБанк.Пустая() Тогда
    // Если банка нет в базе, его нужно либо загрузить, либо выдать ошибку
    Сообщить("Банк с БИК " + ТекстовыйБИК + " не найден в классификаторе!");
    Возврат;
КонецЕсли;

// 2. Создаем новый банковский счет
НовыйСчет = Справочники.БанковскиеСчета.СоздатьЭлемент();
НовыйСчет.Владелец = ВыбКонтрагент;
НовыйСчет.НомерСчета = НомерСчета;
НовыйСчет.Наименование = "Расчетный (БИК " + ТекстовыйБИК + ")";

// 3. Устанавливаем связь с банком
НовыйСчет.Банк = СсылкаНаБанк;

// 4. Критически важный момент: работа с флагом ручного изменения
// Устанавливаем Ложь, чтобы данные подтягивались из классификатора автоматически
НовыйСчет.РучноеИзменениеРеквизитовБанка = Ложь;

// 5. Для типовых конфигураций на БСП желательно вызвать заполнение текстовых полей
// Это гарантирует, что в списках и печатных формах данные будут видны сразу
НовыйСчет.НаименованиеБанка = СсылкаНаБанк.Наименование;
НовыйСчет.КоррСчет          = СсылкаНаБанк.КоррСчет;
НовыйСчет.ГородБанка        = СсылкаНаБанк.Город;

// 6. Записываем объект
Попытка
    НовыйСчет.Записать();
Исключение
    Сообщить("Ошибка при записи счета: " + ОписаниеОшибки());
КонецПопытки;

Почему важно использовать методы БСП?

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

Например, использование метода РаботаСБанками.НайтиБанкПоБИК(ТекстовыйБИК) может быть предпочтительнее простого НайтиПоКоду, так как этот метод может учитывать историю изменений БИК или предлагать загрузку из классификатора 1С через интернет-поддержку.

Разбор ситуации с флагом «Ручное изменение реквизитов»

Многие разработчики совершают ошибку, пытаясь программно «нажать» кнопку на форме. Помните: форма — это лишь средство визуализации. Если при открытии карточки БИК появляется только после переключения галочки РучноеИзменениеРеквизитовБанка, это значит, что при загрузке вы заполнили текстовое поле БИК (которое может быть просто реквизитом формы или скрытым текстовым полем), но не заполнили реквизит-ссылку Банк.

Посмотрим на логику системы:

  1. Если РучноеИзменениеРеквизитовБанка = Истина: Система отображает те данные, которые записаны непосредственно в справочнике БанковскиеСчета (строковые поля).
  2. Если РучноеИзменениеРеквизитовБанка = Ложь: Система игнорирует строки в счете и берет данные (БИК, название, город) по ссылке из справочника КлассификаторБанков.

Следовательно, при программной загрузке наиболее надежным способом является установка флага в Ложь и обязательное заполнение ссылки на КлассификаторБанков. Если же вы загружаете счет в иностранном банке, которого нет в классификаторе, тогда флаг устанавливается в Истина, а все данные банка записываются как обычные строки.

Выводы и рекомендации

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

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

← На главную