Тип местоположения — это уровень в географической иерархии Битрикса: страна, регион, область, район, город, село. От того, как заведены и отсортированы типы, зависит, что покупатель увидит в фильтре доставки и найдёт ли система его населённый пункт в поиске.
Что такое тип местоположения
В модуле sale каждая запись справочника «Местоположения» привязана к типу — он говорит системе, какой уровень иерархии описывает объект: континент, страну, регион, область, район, город, посёлок, улицу. Сами местоположения хранятся в таблице b_sale_location, а справочник типов — в b_sale_location_type (названия типов на языках сайта — в b_sale_location_type_name).
Тип — это не просто подпись. По нему Битрикс строит вложенность (город внутри области, область внутри страны), формирует выпадающие списки в оформлении заказа и решает, на каком уровне показывать точки доставки. Управлять справочником можно в админке: Магазин → Настройки → Местоположения, вкладка со списком типов.
sale 15.0 действует «новый» механизм местоположений (D7, таблицы b_sale_location*). Старый вариант хранил данные в b_sale_location с плоской структурой — при миграции типы переносятся, но иерархия перестраивается заново.Справочник стандартных типов
После установки демо-данных или импорта официальной базы РФ Битрикс заводит набор предопределённых типов с фиксированными кодами (CODE). Код — стабильный идентификатор, по нему тип находят импорт и API, поэтому его не стоит менять руками.
| Код (CODE) | Тип | Пример |
|---|---|---|
COUNTRY | Страна | Россия |
COUNTRY_DISTRICT | Федеральный округ | Приволжский |
REGION | Регион / край | Краснодарский край |
SUBREGION | Область / район субъекта | Одинцовский район |
CITY | Город | Казань |
VILLAGE | Село / посёлок | Мирный |
STREET | Улица | Ленина |
Часть проектов использует только четыре уровня — страна, регион, город, село — и это нормально: лишние типы просто не заполняются данными и не мешают.
Иерархия и сортировка
Порядок типов задаётся полем сортировки SORT в b_sale_location_type. Чем меньше значение — тем «выше» уровень: у страны сортировка меньше, чем у города. Именно эта числовая шкала подсказывает системе, кто чей родитель, когда строится дерево.
Саму вложенность конкретных записей хранят поля LEFT_MARGIN и RIGHT_MARGIN (вложенные множества, nested sets) плюс PARENT_ID. Тип определяет, каким по счёту уровнем объект встанет в это дерево. Практический смысл сортировки:
- корректная последовательность выпадающих списков в форме заказа (сначала страна, потом регион, потом город);
- правильная группировка при выводе «хлебных крошек» местоположения;
- предсказуемое поведение импорта — новые записи подтягиваются к родителю нужного уровня.
Влияние на отображение и поиск
Тип напрямую управляет тем, что видит покупатель. В свойствах доставки и в компоненте выбора местоположения (sale.location.selector.*) можно ограничить выбор конкретными типами — например, разрешить указывать только города, скрыв улицы и сёла. Это делает поле адреса чище и уменьшает число ошибочных вводов.
Для поиска Битрикс держит отдельную поисковую таблицу b_sale_loc_search, куда попадают названия вместе с типом и родительской цепочкой. Поэтому в подсказке пользователь видит не просто «Мирный», а «Мирный, село, Архангельская область» — тип служит для устранения неоднозначности между одноимёнными пунктами.
- если тип у записи не проставлен, объект может не попасть в поисковый индекс и «пропадёт» из подсказок;
- ограничение по типам в компоненте ускоряет автодополнение, сужая выборку;
- после массового импорта или смены типов индекс нужно перестроить.
Добавление собственных типов
Стандартной иерархии хватает большинству магазинов, но при выгрузке из внешних систем иногда нужен свой уровень — например, «микрорайон» или «муниципальное образование». Добавить тип можно двумя путями.
Через админку: в разделе управления местоположениями откройте список типов и создайте новый, указав уникальный CODE, значение SORT (между соседними уровнями) и названия для каждого языка сайта.
Через API удобнее при автоматизации:
- добавить тип классом
\Bitrix\Sale\Location\TypeTable::add()с полямиCODE,SORTиNAME(массив по языкам); - привязать записи местоположений к новому типу через
\Bitrix\Sale\Location\LocationTable; - запустить переиндексацию, чтобы новый уровень попал в дерево и поиск.
MICRODISTRICT) — это соглашение Битрикса, оно упрощает сопоставление при повторных импортах.Практика и типичные ошибки
На реальных проектах проблемы с типами почти всегда сводятся к нескольким сценариям.
- Дубли уровней. После двух импортов из разных источников появляются два типа «Город» с разными кодами. Лечится сверкой
CODEперед загрузкой и объединением записей. - Сломанная сортировка. Регион с
SORTбольше, чем у города, — дерево строится вверх ногами. Проверяйте монотонность значений от страны к улице. - Записи без типа. Пустой тип выключает объект из поиска; после импорта стоит запросом убедиться, что незаполненных нет.
- Смена кода у стандартного типа. Ломает последующие обновления официальной базы РФ — коды лучше не трогать.
Перед крупными изменениями делайте выгрузку таблиц b_sale_location_type и b_sale_location — откатить справочник быстрее, чем восстанавливать дерево вручную.
Итог
Типы местоположений — это скелет географии магазина: они задают уровни иерархии, порядок в выпадающих списках и корректность поиска. Держите CODE стабильными, следите за монотонной сортировкой от страны к улице, проверяйте, что у каждой записи есть тип, и перестраивайте индекс после любых массовых изменений. Свои уровни добавляйте только когда стандартных семи действительно не хватает.
Если справочник местоположений разросся, обмен с 1С тянет чужую иерархию, а поиск городов подтормаживает, мы наводим порядок под ключ — от чистки дублей и настройки типов до интеграции с учётной системой и ускорения каталога. Обращайтесь, разберём вашу базу местоположений и сделаем её предсказуемой.
Частые вопросы
Где в админке настраиваются типы местоположений?
В разделе Магазин → Настройки → Местоположения, на вкладке со списком типов. Там можно создать, переименовать и отсортировать типы для нового механизма местоположений модуля sale.
Чем тип отличается от группы местоположений?
Тип задаёт уровень иерархии (страна, город, село) и участвует в построении дерева. Группа — это произвольный набор местоположений для доставки или ограничений, не связанный с уровнями.
Можно ли обойтись только страной, регионом и городом?
Да. Неиспользуемые типы просто остаются пустыми и не мешают работе. Многие магазины работают на трёх-четырёх уровнях без сёл и улиц.
Почему город не находится в поиске, хотя он есть в базе?
Чаще всего у записи не проставлен тип или не перестроен поисковый индекс. Проверьте поле типа и запустите переиндексацию местоположений.
Что произойдёт, если поменять код стандартного типа?
Обновления официальной базы РФ и повторные импорты перестанут сопоставлять уровни по коду и могут создать дубли. Код у стандартных типов менять не рекомендуется.
Как влияет поле SORT на иерархию?
Меньшее значение SORT означает более высокий уровень: у страны оно меньше, чем у города. Нарушение монотонности ломает вложенность дерева при построении.
Как добавить свой тип программно?
Через класс Bitrix\Sale\Location\TypeTable::add() с полями CODE, SORT и NAME по языкам, затем привязать записи и переиндексировать местоположения.
Нужно ли что-то делать после смены типов у записей?
Да, обязательно перестроить дерево и поисковый индекс местоположений. Без этого изменения не отразятся в выпадающих списках и подсказках адреса.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.