Как правильно использовать процедуру ПолучитьДанныеКлассификатора в 1С:БСП и избежать ошибок при поиске банков

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

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

Анализ проблемы: Процедура против Функции

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


// ОШИБОЧНЫЙ КОД
ИмяБанка = РаботаСБанками.ПолучитьДанныеКлассификатора(БИК, КоррСчет);

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

Правильный вызов процедуры ПолучитьДанныеКлассификатора

Для того чтобы получить данные о банке (ссылку на элемент справочника «Классификатор банков»), необходимо использовать третий параметр. Рассмотрим, как это сделать правильно по шагам:

  1. Подготовим переменную для хранения результата.
  2. Вызовем процедуру, передав эту переменную третьим аргументом.
  3. Проанализируем полученный результат.

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


ПеременнаяРезультат = Неопределено;
БИК = "044525225";
КоррСчет = "30101810400000000225";

// Вызываем процедуру, результат будет помещен в ПеременнаяРезультат
РаботаСБанками.ПолучитьДанныеКлассификатора(БИК, КоррСчет, ПеременнаяРезультат);

Если ЗначениеЗаполнено(ПеременнаяРезультат) Тогда
    // Если банк найден, в переменной будет СправочникСсылка.КлассификаторБанков
    НаименованиеБанка = ПеременнаяРезультат.Наименование;
Иначе
    Сообщить("Банк с такими реквизитами не найден в классификаторе");
КонецЕсли;

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


РаботаСБанками.ПолучитьДанныеКлассификатора(Объект.БИК, Объект.КоррСчет, Объект.Банк);

Проблема скрытых символов и неразрывных пробелов

Часто даже при правильном синтаксисе вызова процедура не находит банк. Проанализируем причину: данные, скопированные из электронных писем или документов, могут содержать скрытые символы, в частности неразрывные пробелы (Символы.НПП). Для платформы 1С строка "0445 25225" с неразрывным пробелом не равна строке "044525225".

Рекомендуется перед поиском всегда выполнять «очистку» входных данных. Выясним, как это сделать наиболее эффективно:


// Очистка БИК от неразрывных пробелов и обычных пробелов
ЧистыйБИК = СтрЗаменить(ВходнойБИК, Символы.НПП, "");
ЧистыйБИК = СтрЗаменить(ЧистыйБИК, " ", "");

// Еще более надежный способ через БСП (если доступен модуль ОбщегоНазначенияКлиентСервер)
ЧистыйБИК = ОбщегоНазначенияКлиентСервер.ТолькоЦифрыВСтроке(ВходнойБИК);

Использование функции ТолькоЦифрыВСтроке гарантирует, что в поиск уйдут только значащие цифровые символы, что исключает ошибки сопоставления ссылок.

Современная альтернатива: Функция СведенияБИК

Начиная с версий БСП 3.1 и выше, процедура ПолучитьДанныеКлассификатора считается устаревшей. Разработчикам рекомендуется переходить на использование функции СведенияБИК. Это гораздо удобнее, так как она работает именно как функция и возвращает структурированный результат.

Посмотрим на пример использования современного подхода:


ДанныеБанка = РаботаСБанками.СведенияБИК(НужныйБИК);

Если ДанныеБанка <> Неопределено Тогда
    // Функция возвращает структуру
    СсылкаНаБанк = ДанныеБанка.Ссылка;
    Название = ДанныеБанка.Наименование;
    Город = ДанныеБанка.Город;
    // Можно сразу заполнить реквизиты на форме
    Объект.НаименованиеБанка = Название;
КонецЕсли;

Преимущества использования функции СведенияБИК:

Резюме и рекомендации

Подводя итог, при работе с классификатором банков в 1С следует придерживаться следующих правил:

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

Соблюдение этих простых правил позволит вам писать стабильный код, устойчивый к ошибкам ввода данных пользователями и изменениям в версиях библиотеки БСП.

← На главную