Проверка адреса в 1С БСП: почему улица может быть пустой и как работает алгоритм

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

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

Логика штатной проверки адреса в БСП

Рассмотрим фрагмент кода БСП, который вызывает вопросы при проверке обязательности заполнения элементов адреса:


Если Не ИсключатьПроверкуУлицыВАдресе(АдресРФ) Тогда

    Если ПустаяСтрока(Город) И ПустаяСтрока(НаселенныйПункт) И ПустаяСтрока(Улица) И НЕ ЗначениеЗаполнено(ДополнительныйЭлемент) Тогда
        ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, "Улица",
            НСтр("ru = 'Город или населенный пункт должен содержать название улицы.'"), 
            НСтр("ru = 'Улица'"));
    КонецЕсли;

КонецЕсли;

Из данного условия видно, что ошибка выдается только тогда, когда одновременно не заполнены Город, НаселенныйПункт, Улица и ДополнительныйЭлемент. Если же заполнено хотя бы одно из этих полей (например, заполнено поле Город), основное условие внутри Если не срабатывает, и ошибка не добавляется.

Почему улица может официально отсутствовать в адресе

Попытка жестко потребовать наличие улицы для каждого города или населенного пункта приведет к невозможности ввести множество реальных адресов. Выясним основные причины, почему поле Улица может оставаться пустым:

  1. Сельские населенные пункты: В небольших деревнях, поселках, хуторах или аулах часто нет уличной сети. Нумерация домов там идет непосредственно в привязке к самому населенному пункту (например, "деревня Иваново, дом 5").
  2. Специфическая градостроительная структура: В некоторых городах адресация исторически построена по микрорайонам или кварталам без использования улиц. Яркий пример — город Зеленоград (адреса вида "г. Зеленоград, корпус 401"), Иннополис, а также некоторые закрытые административно-территориальные образования (ЗАТО).
  3. Регионы-города: Города федерального значения (Москва, Санкт-Петербург, Севастополь) в классификаторе адресов выступают в роли регионов. Поэтому в структуре адреса поле Город может быть пустым, а поле Улица — заполненным.
  4. Объекты вне населенных пунктов и промзоны: Садовые товарищества (СНТ), промышленные площадки, автодороги и территории предприятий адресуются через дополнительные элементы или территории.

Роль функции ИсключатьПроверкуУлицыВАдресе

Ключевую роль в определении необходимости проверки улицы играет функция ИсключатьПроверкуУлицыВАдресе(). Разберем, как она работает.

Штатный механизм БСП проверяет адрес не просто по наличию текста в строковых полях, а по адресным сведениям классификатора ГАР (Государственного адресного реестра) / ФИАС. Функция возвращает Истина в следующих случаях:

  1. Для выбранного населенного пункта или города в классификаторе официально отсутствует уровень улиц.
  2. В составе адреса заполнен дополнительный элемент или территория (например, СНТ, массив, промзона).
  3. В настройках вида контактной информации отключена жесткая проверка по классификатору.

Таким образом, БСП сначала запрашивает классификатор: есть ли у данного объекта улицы? Если улиц нет или адрес относится к специальным территориям, дополнительная проверка обязательности улицы отключается.

Как правильно проверять адреса в собственных доработках

Если вам требуется выполнить программную проверку адреса в коде конфигурации, не стоит писать собственную составную логику с проверкой строк на ПустаяСтрока(). Это приводит к ошибкам при вводе нестандартных адресов.

Рекомендуется использовать штатные методы БСП, которые учитывают иерархию ГАР и идентификаторы объектов (GUID):

  1. Проверка через модуль работы с адресами: Для сервера используйте процедуры общего модуля РаботаСАдресами.ПроверитьАдрес или АдресныйКлассификатор.ПроверитьАдреса. Они анализируют структуру объекта и возвращают точный список ошибок согласно классификатору.
  2. Актуализация адресного классификатора: Убедитесь, что в информационной базе загружены актуальные сведения ГАР по нужному региону. Без загруженного классификатора программа не сможет узнать, есть ли у города или деревни улицы, и проверка может работать некорректно.
  3. Настройка видов контактной информации: В справочнике «Виды контактной информации» выберите нужный адрес (например, «Фактический адрес») и убедитесь, что включен флаг «Проверять по классификатору». Это обеспечит валидацию адреса непосредственно в форме ввода.
← На главную