Удаление дублей цен в 1С Битрикс

Удаление дублей цен в 1С Битрикс

11.03.2024
10
Узнайте, как удалить дублирующиеся записи цен в 1С Битрикс с помощью небольшого кода и SQL-запросов.

Описание проблемы

Когда в каталоге товаров существуют дублирующиеся цены, это может привести к неправильному отображению цен на сайте, к примеру для группы оптовых покупателей будет две цены и вывод в разных частях сайта будет отличаться. Кроме того, такие дубли могут вызывать проблемы связанные с ценами, например, сортировки или фильтрации товаров по цене.

Подготовка к удалению дублирующихся цен

Для начала посмотрите в таблице b_catalog_price наличие дублей цен у товара по PRODUCT_ID.
Перед тем, как перейти к удалению дубликатов цен, необходимо выполнить несколько подготовительных шагов. Во-первых, убедитесь, что у вас есть доступ к базе данных вашего сайта на 1С Битрикс. Во-вторых, создайте резервную копию базы данных, чтобы в случае возникновения проблем можно было восстановить данные.

Код для удаления дублирующихся цен

Для удаления дублирующихся цен в 1С Битрикс мы воспользуемся SQL-запросами и небольшим кодом на языке PHP. Вот пример кода, который вы можете использовать:

global $DB;

// Выполняем SQL-запрос для выборки всех записей из таблицы b_catalog_price, сортируя их по полю TIMESTAMP_X в порядке убывания
$res = $DB->Query('select * from b_catalog_price order by TIMESTAMP_X desc');

// Создаем пустой массив для хранения цен
$prices = [];

// Цикл для обхода каждой строки результата запроса
while ($price = $res->Fetch()) {
    // Проверяем, существует ли уже данная цена для данного товара и группы каталога в массиве $prices
    if (isset($prices[$price['PRODUCT_ID']][$price['CATALOG_GROUP_ID']])) {
        // Если цена уже существует, удаляем дублирующую запись из таблицы b_catalog_price
        $DB->Query('delete from b_catalog_price where ID = '.$price['ID']);
    } else {
        // Если цена не существует, добавляем запись в массив $prices, используя ID товара и ID группы каталога в качестве ключей
        $prices[$price['PRODUCT_ID']][$price['CATALOG_GROUP_ID']] = $price['ID'];
    }
}


Давайте разберем этот код по частям и рассмотрим, как он работает.

  1. Первая строка кода объявляет глобальную переменную $DB, которая предоставляет доступ к базе данных 1С Битрикс.

  2. Затем мы выполняем SQL-запрос для выборки всех записей из таблицы b_catalog_price, сортируя их по полю TIMESTAMP_X в порядке убывания. Это позволяет нам получить самые новые записи с ценами.

  3. Мы создаем пустой массив $prices, который будет использоваться для хранения уникальных цен.

  4. Далее следует цикл while, который обходит каждую строку результата запроса. Внутри цикла мы проверяем, существует ли уже данная цена для данного товара и группы каталога в массиве $prices.

  5. Если цена уже существует, мы удаляем дублирующую запись из таблицы b_catalog_price с помощью SQL-запроса delete.

  6. Если цена не существует, мы добавляем запись в массив $prices, используя ID товара и ID группы каталога в качестве ключей.

Таким образом, данный код позволяет удалить дублирующиеся цены из таблицы b_catalog_price в 1С Битрикс, оставив только уникальные записи.

Заключение

Описанный в данной статье метод с использованием SQL-запросов и небольшого кода на языке PHP поможет вам избавиться от дублей и актуализировать цены. Не забудьте выполнить подготовительные шаги и создать резервную копию базы данных перед удалением дублирующихся цен. Удачной оптимизации вашего каталога!