Полуручная конвертация свойств в инфоблоках 1.0.

В данной статье рассматривается процесс полуручной конвертации свойств из строки в списки в Инфоблоках 1.0 в CMS Битрикс. Стоит заметить, что данный процесс возможен только в инфоблоках 1.0, так как в инфоблоках 2.0 значения при смене типа свойства не сохраняются. И да, в реальном проекте — описанные действия должны автоматизироваться (Например, можно обновлять свойства через АПИ Битрикса, а не через прямые запросы), но оптимизация процесса не является темой настоящей статьи.

В самом деле, весь процесс можно разделить на несколько шагов:

  1. Конвертация инфоблока в «инфоблоки 1.0»
  2. Смена типа свойства
  3. Заведение вариантов в поле типа «список»
  4. Отправка прямого запроса к БД через SQL-консоль битрикса
  5. Проверка результата

Конвертация инфоблока в «инфоблоки 1.0»

Для начала, в разделе инфоблок нужно изменить значения свойств на «В общей таблице». Делается это в пару кликов, но, имейте ввиду, что процесс может занять продолжительное время.

Смена типа свойства

Следующим (очень простым) шагом будет смена типа свойства. Делается это следующим образом:

В данном случае действительно всё просто. Можно переходить к следующему шагу:

Заведение вариантов в поле типа «список»

В строке со свойством нужно кликнуть кнопку с тремя точками (…), столбец «Изм.). Откроется всплывающее окно. Далее, следует прокрутить «в низ» всплывающего окна и вписать необходимые варианты. XML_ID создается автоматом, после сохранения.

Нажимаем «Сохранить» во всплывающем окне и «Применить» на списке свойств инфоблока. Снова открываем данное свойство и смотрим какие ID были присвоены элементам списка. Они скоро понадобятся.

Отправка прямого запроса к БД через SQL-консоль битрикса

На новой вкладке открываем SQL-консоль битрикса (Настройки > Инструменты > SQL запрос). И в форме запроса вводим примерно следующий запрос:

UPDATE b_iblock_element_property
SET VALUE = 7497,
VALUE_ENUM = 7497
WHERE IBLOCK_PROPERTY_ID = 6884
AND VALUE LIKE '%сть%';

UPDATE b_iblock_element_property
SET VALUE = 7498, VALUE_ENUM = 7498
WHERE IBLOCK_PROPERTY_ID = 6884 AND
VALUE LIKE '%ет%';

Где PROPERTY_ID — это значение ID свойства, VALUE и VALUE_ENUM — значение на которое меняется свойство, а VALUE LIKE  ‘%что-то%’ — это текущее значение свойства. Далее исполняем запрос и переходим к последнему шагу, проверке значений.

Проверка результата

Для проверки результата нужно открыть таблицу b_iblock_element_property в разделе «Таблицы» в админке битрикса (Настройки > Производительность > Таблицы). Далее следует добавить в фильтр возможность фильтрации по полю IBLOCK_PROPERTY_ID.

После чего мы вбиваем ID свойства и должны в результатах следующую картину:

То есть в поле VALUE должны быть только ID элементов списка. Никаких тестовых значений быть не должно.

В заключение, следует заметить, что данная заметка носит достаточно «общий» характер. Лучше, конечно же, обновлять свойства не через прямой запрос, а через API. Так меньше вероятность, что что-то пойдет не так. Хотя, в некоторых случаях, оправдан и вышеизложенный подход.