Почему возникает ошибка "Неверно указан реквизит" при поиске банковского счета в 1С?

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

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

Причина 1: Обращение к неверному справочнику

Посмотрим на классический пример ошибочного кода:


НомерБИК = 042007835;
Объект.БанковскийСчетОрганизации = Справочники.БанковскиеСчета.НайтиПоРеквизиту("БИК", НомерБИК);

В конфигурации "Бухгалтерия предприятия 3.0" (как и в большинстве других типовых конфигураций 1С) у справочника БанковскиеСчета нет реквизита "БИК". То, что мы видим в карточке банковского счета на форме — это реквизит справочника Банки. В самом банковском счете хранится лишь ссылка на элемент справочника Банки, а уже внутри него лежит код БИК. Метод НайтиПоРеквизиту не умеет искать данные "через точку" в связанных таблицах, поэтому платформа логично сообщает, что такого реквизита не существует.

Причина 2: Неверный тип данных для БИК

Проанализируем вторую грубую ошибку в приведенном выше фрагменте кода. БИК задан как числовое значение: НомерБИК = 042007835;.

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

НомерБИК = "042007835";

Причина 3: Поиск по строке неограниченной длины

В ходе обсуждения разработчики часто пытаются искать элементы по наименованию или текстовому описанию. Рассмотрим важный технический нюанс платформы: метод НайтиПоРеквизиту системно не поддерживает поиск по строкам неограниченной длины.

Если реквизит имеет тип "Строка" и его длина не ограничена, поиск завершится неудачей или ошибкой. Если перед вами стоит задача поиска по такому полю, обязательно нужно использовать язык запросов 1С.

Причина 4: Особенности подчиненных справочников

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

Правильные способы поиска банковского счета

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

Способ 1: Поиск по номеру счета с указанием владельца

Если нам известен конкретный номер расчетного счета организации, мы можем использовать метод НайтиПоРеквизиту, передав в него владельца третьим параметром:


НомерСчета = "40702810400000000123";
ОрганизацияВладелец = Объект.Организация; // ссылка на организацию из документа
Объект.БанковскийСчетОрганизации = Справочники.БанковскиеСчета.НайтиПоРеквизиту("НомерСчета", НомерСчета, ОрганизацияВладелец);

Способ 2: Использование языка запросов (поиск по БИК банка и организации)

Если стоит задача найти счет организации в конкретном банке (зная его БИК), правильно будет использовать запрос. Посмотрим на пример кода:


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

Запрос.УстановитьПараметр("Организация", Объект.Организация);
Запрос.УстановитьПараметр("БИК", "042007835"); // Обязательно строка!

РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    Объект.БанковскийСчетОрганизации = Выборка.Счет;
КонецЕсли;

Подводим итоги

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