Ниже приведена детальная инструкция по работе со структурой таблиц модуля «Информационные блоки» (ИБ) в 1С-Битрикс. Рассмотрим основные таблицы, их ключевые поля и способы применения. Материал будет полезен как разработчикам, только начинающим знакомство с 1С-Битрикс, так и тем, кто хочет глубже понять внутреннее устройство инфоблоков и уметь выполнять точечные операции через SQL.

1. Общая структура модуля «Информационные блоки»
Модуль «Информационные блоки» в 1С-Битрикс хранит данные в нескольких связанных таблицах. Основные:
- b_iblock – хранит общую информацию о каждом инфоблоке (название, код, настройки и т.п.).
- b_iblock_type – хранит типы инфоблоков (например, «catalog», «news» и другие).
- b_iblock_element – хранит элементы инфоблоков (записи, новости, товары и т. д.).
- b_iblock_section – хранит разделы (категории, рубрики) инфоблока.
- b_iblock_property – хранит описания пользовательских свойств (дополнительные поля элементов инфоблока).
- b_iblock_property_enum – хранит варианты значений для свойств типа «список».
- b_iblock_section_element – связывает элементы инфоблока с разделами.
Кроме того, для хранения значений свойств (например, в виде строк, чисел, списков) используются особые таблицы – b_iblock_element_prop_sXX и b_iblock_element_prop_mXX, где XX – это идентификатор инфоблока. При создании свойства с определёнными типами (строки, HTML-текст и т. д.) 1С-Битрикс создаёт соответствующие таблицы с суффиксами для хранения значений.
2. Таблица b_iblock
Таблица b_iblock содержит информацию обо всех созданных в системе инфоблоках.
Основные поля
- ID – уникальный идентификатор инфоблока.
- NAME – название инфоблока (например, «Каталог товаров»).
- CODE – символьный код (латиницей) для инфоблока (используется в ЧПУ и других местах).
- IBLOCK_TYPE_ID – тип инфоблока (ссылка на таблицу b_iblock_type).
- LID – код сайта, к которому привязан инфоблок.
- ACTIVE – флаг активности инфоблока (Y/N).
- SORT – порядковый номер для сортировки.
- LIST_PAGE_URL, DETAIL_PAGE_URL, SECTION_PAGE_URL – шаблоны URL страниц списка элементов, детальной страницы и страницы раздела соответственно.
- DESCRIPTION, DESCRIPTION_TYPE – описание инфоблока (может быть HTML).
Пример использования
Допустим, вам нужно через SQL быстро отключить (деактивировать) определённый инфоблок с ID = 3:
UPDATE b_iblock
SET ACTIVE = 'N'
WHERE ID = 3;
После этой операции инфоблок перестанет считаться активным в настройках, что может отключить его показ на сайте (зависит от логики шаблонов и компонентов).
3. Таблица b_iblock_element
Таблица b_iblock_element хранит собственно «элементы» (записи) выбранного инфоблока: новости, товары, статьи и т. п.
Основные поля
- ID – уникальный идентификатор элемента.
- IBLOCK_ID – идентификатор инфоблока (ссылка на b_iblock.ID).
- NAME – название элемента.
- CODE – символьный код элемента.
- ACTIVE – активность элемента (Y/N).
- ACTIVE_FROM, ACTIVE_TO – дата начала и конца активности.
- SORT – сортировка элемента.
- PREVIEW_TEXT, PREVIEW_TEXT_TYPE – анонс элемента, его тип (html/text).
- DETAIL_TEXT, DETAIL_TEXT_TYPE – детальный текст элемента, его тип (html/text).
- DATE_CREATE, TIMESTAMP_X – дата создания и дата последнего изменения.
- CREATED_BY, MODIFIED_BY – идентификаторы пользователей, создавших и изменивших элемент.
Пример использования
Выборка всех активных элементов из инфоблока с символьным кодом «catalog»:
SELECT be.ID, be.NAME
FROM b_iblock_element be
JOIN b_iblock bi ON be.IBLOCK_ID = bi.ID
WHERE bi.CODE = 'catalog'
AND be.ACTIVE = 'Y';
Особенность после события OnAfterIBlockElementUpdate
По замечанию из задания: после события OnAfterIBlockElementUpdate
у элемента инфоблока нет ключа IBLOCK_SECTION_ID, но при этом есть массив полей IBLOCK_SECTION. Это значит, что для получения данных о разделах, к которым относится элемент, нужно использовать либо свойство IBLOCK_SECTION
, либо отдельную таблицу b_iblock_section_element
, где хранится связь «элемент – раздел».
4. Таблица b_iblock_section
В этой таблице хранятся разделы инфоблоков.
Основные поля
- ID – идентификатор раздела.
- IBLOCK_ID – идентификатор инфоблока, к которому принадлежит раздел.
- NAME – название раздела.
- CODE – символьный код раздела.
- ACTIVE – активность (Y/N).
- SORT – сортировка раздела.
- DESCRIPTION, DESCRIPTION_TYPE – описание раздела, его тип (html/text).
- PICTURE – идентификатор файла-изображения для раздела (ссылка на b_file.ID).
- LEFT_MARGIN, RIGHT_MARGIN, DEPTH_LEVEL – служебные поля для деревообразной структуры разделов (Nested Sets).
- IBLOCK_SECTION_ID – идентификатор родительского раздела.
Важные нюансы
- В таблице b_iblock_section нет поля SECTION_PROPERTY. Иногда в документации или интерфейсе может появляться упоминание возможности «Показывать на странице редактирования элемента» (связано с привязкой разделов и свойств), однако физически колонки
SECTION_PROPERTY
в базе нет. - Как снять галку «Показывать на странице редактирования элемента» через SQL Если в админке существует раздел, «привязанный» к настройкам, и нужно его «отвязать» от конкретных свойств так, чтобы в форме редактирования элемента эти свойства/разделы не показывались, вы можете:
- Либо воспользоваться штатными средствами админки.
- Либо, по замечанию, удалить запись из b_iblock_section, полностью убрав таким образом раздел (если именно он несёт эту настройку).
b_iblock_section
физически убирает раздел из базы! Обычно это радикальная мера – убедитесь, что вы не удаляете нужную структуру разделов.
Пример использования
Выберите все активные подразделы раздела с ID = 10
:
SELECT ID, NAME
FROM b_iblock_section
WHERE IBLOCK_SECTION_ID = 10
AND ACTIVE = 'Y';
5. Таблица b_iblock_property
Содержит описание пользовательских свойств (характеристик) элементов, которые задаются в настройках инфоблока (например, «Цвет», «Вес», «Цена» и т. д.).
Основные поля
- ID – идентификатор свойства.
- IBLOCK_ID – идентификатор инфоблока.
- NAME – название свойства («Цвет», «Размер»).
- CODE – символьный код свойства («COLOR», «SIZE»).
- PROPERTY_TYPE – тип свойства (S – строка, N – число, L – список, F – файл, E – привязка к элементу и т. д.).
- MULTIPLE – флаг множественности (Y/N).
- SORT – индекс сортировки (число).
- ACTIVE – активность свойства (Y/N).
- USER_TYPE, USER_TYPE_SETTINGS – служебные поля, используемые для пользовательских типов свойств (например, «HTML-текст», «Привязка к Highload-блоку» и т. д.).
Пример использования
Поиск всех свойств инфоблока c ID = 7, которые являются списками (PROPERTY_TYPE = 'L'):
SELECT ID, NAME, CODE
FROM b_iblock_property
WHERE IBLOCK_ID = 7
AND PROPERTY_TYPE = 'L';
6. Таблица b_iblock_property_enum
Хранит значения для свойств, имеющих тип «Список».
Основные поля
- ID – идентификатор варианта значения свойства.
- PROPERTY_ID – ссылка на b_iblock_property.ID.
- VALUE – текстовое значение (например, «Красный», «Синий»).
- XML_ID – символьный идентификатор (может использоваться для обменов или фильтрации).
- SORT – индекс сортировки.
Пример использования
Для свойства «Цвет» (допустим, ID свойства = 15) получить все варианты значений:
SELECT ID, VALUE, XML_ID
FROM b_iblock_property_enum
WHERE PROPERTY_ID = 15
ORDER BY SORT;
7. Таблица b_iblock_section_element
Связывает элементы с разделами. Если элемент может находиться сразу в нескольких разделах, то в этой таблице будет несколько записей на каждый элемент.
Основные поля
- ID – идентификатор записи.
- IBLOCK_ELEMENT_ID – элемент (ссылка на b_iblock_element.ID).
- IBLOCK_SECTION_ID – раздел (ссылка на b_iblock_section.ID).
- ADDITIONAL_PROPERTY_ID – используется в некоторых сценариях, когда элемент является не «обычным» элементом, а значением свойства типа «привязка к разделам» или «привязка к элементам».
Пример использования
Выбрать все разделы, в которых лежит элемент с ID = 100:
SELECT s.ID, s.NAME
FROM b_iblock_section_element se
JOIN b_iblock_section s ON se.IBLOCK_SECTION_ID = s.ID
WHERE se.IBLOCK_ELEMENT_ID = 100;
8. Дополнительные таблицы свойств элементов
Как было упомянуто, в зависимости от структуры и типов свойств для каждого инфоблока могут создаваться отдельные таблицы:
- b_iblock_element_prop_sXX – хранит значения «простых» свойств (S, N и др.) в виде строк (в том числе HTML).
- b_iblock_element_prop_mXX – хранит значения множественных свойств.
Где XX
– это ID инфоблока. Например, если инфоблок имеет ID = 7, то таблицы будут называться b_iblock_element_prop_s7 и b_iblock_element_prop_m7.
Основные поля b_iblock_element_prop_sXX
- IBLOCK_ELEMENT_ID – ссылка на элемент.
- PROPERTY_
– колонки для хранения значения каждого свойства (для каждого свойства создаётся отдельная колонка с таким именем).
Основные поля b_iblock_element_prop_mXX
- ID – идентификатор записи.
- IBLOCK_ELEMENT_ID – ссылка на элемент.
- IBLOCK_PROPERTY_ID – ссылка на b_iblock_property.ID.
- VALUE, VALUE_NUM, VALUE_TYPE и т. д. – хранят само значение, которое может быть строкой, числом, HTML-текстом и т. д.
9. Резюме и основные рекомендации
- Аккуратно работайте с SQL-запросами. Вручную менять записи в этих таблицах рекомендуется только в крайних случаях, если по каким-то причинам стандартные средства не подходят.
- Учитывайте связи между элементами и разделами, свойствами и их значениями. 1С-Битрикс активно использует реляционные отношения, а также кэширование. После изменений напрямую в базе не забудьте очистить кэш.
- Нет поля SECTION_PROPERTY в таблице b_iblock_section. Не пытайтесь его искать или изменять.
- Снятие галки «Показывать на странице редактирования элемента» может быть реализовано удалением записи из b_iblock_section (если речь именно о разделе), но это радикальный способ, который удалит сам раздел.
- После события OnAfterIBlockElementUpdate не полагайтесь на
IBLOCK_SECTION_ID
, в массиве полей будетIBLOCK_SECTION
. Если нужна более детальная информация о разделах, используйте либо дополнительные механизмы (события, методы API), либо смотрите таблицуb_iblock_section_element
.
10. Полезные примеры для разработчиков
Ниже приведены несколько типовых SQL-запросов, которые могут пригодиться в работе.
Добавить элемент инфоблока (псевдокод через INSERT):
INSERT INTO b_iblock_element (IBLOCK_ID, NAME, ACTIVE, CODE, SORT, TIMESTAMP_X, DATE_CREATE, CREATED_BY, MODIFIED_BY)
VALUES (5, 'Новый товар', 'Y', 'new-product', 500, NOW(), NOW(), 1, 1);
После этого обычно нужно позаботиться о вставке значений свойств (в таблицы b_iblock_element_prop_s5
или b_iblock_element_prop_m5
).
Получить последние 10 изменённых элементов:
SELECT ID, NAME, TIMESTAMP_X
FROM b_iblock_element
ORDER BY TIMESTAMP_X DESC
LIMIT 10;
Удалить элемент (важно понимать, что при удалении из b_iblock_element
его свойства тоже нужно удалять вручную из соответствующих таблиц, либо использовать штатный API Bitrix):
DELETE FROM b_iblock_element
WHERE ID = 200;
Обновить свойство элемента (пример для таблицы b_iblock_element_prop_sXX):
UPDATE b_iblock_element_prop_s7
SET PROPERTY_18 = 'Новое значение'
WHERE IBLOCK_ELEMENT_ID = 100;
Здесь 7 – ID инфоблока, а 18 – ID свойства.
Проверить в каких разделах лежит конкретный элемент:
SELECT s.ID, s.NAME
FROM b_iblock_section_element se
INNER JOIN b_iblock_section s ON se.IBLOCK_SECTION_ID = s.ID
WHERE se.IBLOCK_ELEMENT_ID = 120;
Результат – список ID и названий разделов.
Вывод
Структура таблиц модуля «Информационные блоки» в 1С-Битрикс достаточно обширна и гибка. Понимание того, как хранится информация о типах, элементах, разделах, свойствах и их значениях, позволяет:
- Грамотно и безопасно решать задачи по миграции данных;
- Автоматизировать массовые операции (например, массовое обновление свойств);
- Быстрее разбираться в ошибках и корректировать их при необходимости «вручную».
Однако, прежде чем вносить изменения в таблицы напрямую, всегда оценивайте риски и по возможности используйте встроенные инструменты 1С-Битрикс (API, админку, компоненты). Это убережёт ваш проект от возможных ошибок целостности данных и непредвиденных последствий.