При разработке и доработке механизмов ввода контактной информации в типовых конфигурациях 1С разработчики часто сталкиваются с проверкой корректности заполнения адресов. На первый взгляд может показаться, что если в адресе указан город или населенный пункт, то поле улицы обязательно должно быть заполнено. Однако штатный алгоритм Библиотеки Стандартных Подсистем (БСП) пропускает адреса без улицы. Проанализируем, почему заложена именно такая логика и как правильно организовать проверку адресов РФ.
Рассмотрим фрагмент кода БСП, который вызывает вопросы при проверке обязательности заполнения элементов адреса:
Если Не ИсключатьПроверкуУлицыВАдресе(АдресРФ) Тогда
Если ПустаяСтрока(Город) И ПустаяСтрока(НаселенныйПункт) И ПустаяСтрока(Улица) И НЕ ЗначениеЗаполнено(ДополнительныйЭлемент) Тогда
ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, "Улица",
НСтр("ru = 'Город или населенный пункт должен содержать название улицы.'"),
НСтр("ru = 'Улица'"));
КонецЕсли;
КонецЕсли;
Из данного условия видно, что ошибка выдается только тогда, когда одновременно не заполнены Город, НаселенныйПункт, Улица и ДополнительныйЭлемент. Если же заполнено хотя бы одно из этих полей (например, заполнено поле Город), основное условие внутри Если не срабатывает, и ошибка не добавляется.
Попытка жестко потребовать наличие улицы для каждого города или населенного пункта приведет к невозможности ввести множество реальных адресов. Выясним основные причины, почему поле Улица может оставаться пустым:
Город может быть пустым, а поле Улица — заполненным.Ключевую роль в определении необходимости проверки улицы играет функция ИсключатьПроверкуУлицыВАдресе(). Разберем, как она работает.
Штатный механизм БСП проверяет адрес не просто по наличию текста в строковых полях, а по адресным сведениям классификатора ГАР (Государственного адресного реестра) / ФИАС. Функция возвращает Истина в следующих случаях:
Таким образом, БСП сначала запрашивает классификатор: есть ли у данного объекта улицы? Если улиц нет или адрес относится к специальным территориям, дополнительная проверка обязательности улицы отключается.
Если вам требуется выполнить программную проверку адреса в коде конфигурации, не стоит писать собственную составную логику с проверкой строк на ПустаяСтрока(). Это приводит к ошибкам при вводе нестандартных адресов.
Рекомендуется использовать штатные методы БСП, которые учитывают иерархию ГАР и идентификаторы объектов (GUID):
РаботаСАдресами.ПроверитьАдрес или АдресныйКлассификатор.ПроверитьАдреса. Они анализируют структуру объекта и возвращают точный список ошибок согласно классификатору.