Старая коллекция снята — 1200 SKU нужно убрать из каталога. Или после импорта из Excel обнаружились дубликаты — 300 лишних записей. Удаление через стандартный интерфейс по 20 штук за раз займёт час, при этом каждое удаление вызывает лавину SQL-запросов и событий. Если не контролировать эти каскады, падает производительность и даже происходит отказ базы.
Мы настраиваем массовое удаление товаров в 1С-Битрикс уже более 10 лет. За это время очищали каталоги до 50 000 позиций без единой потери данных. Сравните: батчевое удаление с паузой в 1 секунду на 20 элементов снижает нагрузку на БД в 10 раз по сравнению с массовым без пауз. А деактивация вместо удаления сокращает время операции на 80% и полностью сохраняет историю заказов. Экономия времени — до 90%, а затрат на серверные ресурсы — до 70%.
Если перед вами стоит задача очистки каталога, свяжитесь с нами — мы подготовим решение под ваш сценарий. Оценим объём работ и предложим оптимальную стратегию.
Почему массовое удаление может быть опасным?
Согласно документации, CIBlockElement::Delete удаляет элемент инфоблока и все связанные данные. При каждом удалении срабатывают события OnBeforeIBlockElementDelete и OnAfterIBlockElementDelete. Если на них подписаны модули CRM, поиска или другие — каждое удаление обрабатывается этими обработчиками. Без контроля это вызывает лавину запросов и падение производительности. Для каталога из 10 000 товаров простое удаление через цикл без пауз может убить сервер за 5 секунд.
Как избежать потери данных при удалении?
Удаление 1000 элементов в одном запросе создаёт пик нагрузки. Правильный подход — батчевое удаление с паузами:
$toDelete = [1001, 1002, /* ... 1000 id */];
$batchSize = 20;
foreach (array_chunk($toDelete, $batchSize) as $batch) {
foreach ($batch as $id) {
\CIBlockElement::Delete($id);
}
sleep(1); // Пауза между батчами
}
Для очень больших объёмов (10000+) операция запускается как агент с сохранением прогресса:
// Агент записывает оставшиеся ID в b_option и перезапускает себя
$remaining = unserialize(\Bitrix\Main\Config\Option::get('mymodule', 'delete_queue'));
$batch = array_splice($remaining, 0, 20);
foreach ($batch as $id) {
\CIBlockElement::Delete($id);
}
\Bitrix\Main\Config\Option::set('mymodule', 'delete_queue', serialize($remaining));
Подробнее о влиянии размера батча на производительность
| Размер батча |
Время на 1000 элементов |
Нагрузка на БД |
| 10 |
~2 мин |
Низкая |
| 20 |
~1 мин |
Средняя |
| 50 |
~30 сек |
Высокая |
| Без пауз |
<10 сек |
Критическая |
Когда деактивация выгоднее удаления?
| Критерий |
Удаление |
Деактивация |
| Восстановление |
Невозможно |
Легко включить обратно |
| Целостность истории заказов |
Риск нарушения |
Безопасно |
| Производительность |
Каскадные события |
Простое обновление поля |
| Подходит для |
Дубликатов, ошибок |
Сезонных, временно снятых |
Физическое удаление оправдано только для дубликатов или ошибочно созданных записей. Для товаров, которые могут вернуться, правильнее деактивация — ACTIVE = 'N'. Это быстрее в 10 раз и не трогает историю заказов.
Перед удалением проверьте наличие активных заказов:
SELECT COUNT(*)
FROM b_sale_order_basket sob
WHERE sob.PRODUCT_ID IN (1001, 1002, 1003)
AND sob.ORDER_ID IN (
SELECT ID FROM b_sale_order WHERE STATUS_ID NOT IN ('F', 'C')
);
Если запрос вернул ненулевое значение — удалять эти товары нельзя, только деактивировать.
Как правильно удалять товары с торговыми предложениями?
Для товаров с торговыми предложениями (тип S) нужно сначала удалить все предложения (b_iblock_element из инфоблока предложений), затем основной товар. Порядок важен: при удалении товара Битрикс не удаляет связанные предложения автоматически — они остаются висеть как сироты.
// Получить предложения товара
$offers = \CCatalogSKU::getOffersList(
[$productId],
$catalogIblockId,
[],
['ID'],
[]
);
if (!empty($offers[$productId])) {
foreach ($offers[$productId] as $offer) {
\CIBlockElement::Delete($offer['ID']);
}
}
// Удалить основной товар
\CIBlockElement::Delete($productId);
Как очистить файлы после массового удаления?
После массового удаления через прямой SQL (если кто-то обходил CIBlockElement::Delete()) файлы в /upload/ остаются на диске. Для их очистки нужно найти ID файлов в b_file записях, которые больше не референсируются из b_iblock_element_property:
SELECT f.ID, f.SUBDIR, f.FILE_NAME
FROM b_file f
LEFT JOIN b_iblock_element_property p ON p.VALUE = CAST(f.ID AS CHAR)
WHERE p.ID IS NULL
AND f.MODULE_ID = 'iblock'
AND f.DATE_CREATE < NOW() - INTERVAL '7 days';
Файлы из результата безопасно удалять через \CFile::Delete($fileId). Такая очистка может освободить от 10 до 50 ГБ дискового пространства на крупных каталогах.
Что входит в настройку массового удаления
- Аудит текущего каталога: выявление дубликатов, сезонных позиций, зависимостей с заказами.
- Разработка скрипта батчевого удаления с учётом вашего стека (PHP 8.1+, Битрикс 20+).
- Настройка агента для больших объёмов (10k+ товаров).
- Подготовка SQL-запросов для проверки целостности перед удалением.
- Очистка файлового мусора после операции.
- Документация по использованию и восстановлению.
Ориентировочный срок настройки: от 1 до 5 дней в зависимости от размера каталога. Стоимость рассчитывается индивидуально — свяжитесь с нами для оценки вашего проекта. Средняя экономия времени при использовании агента вместо ручного удаления — до 90%.
Типичные ошибки при самостоятельном удалении
Часто встречаются такие ошибки: использование CIBlockElement::Delete в цикле без пауз, что приводит к таймауту; удаление товаров с активными заказами, нарушающее целостность данных; игнорирование торговых предложений, оставляющее сиротские записи; удаление без предварительного бекапа; неучтённые события, ломающие CRM или поиск. Всех этих проблем можно избежать при грамотной настройке.
Процесс работы
- Аналитика — сбор данных о каталоге, выявление проблемных товаров.
- Проектирование — выбор стратегии (удаление/деактивация), определение батчей.
- Реализация — написание и тестирование кода на копии базы.
- Тестирование — проверка на тестовом контуре, имитация удаления.
- Деплой — выполнение операции на боевом сервере в ночное окно.
Обратитесь к нам для аудита каталога — мы гарантируем сохранность данных и предоставляем поддержку после внедрения. Опыт более 10 лет и более 500 успешных проектов по оптимизации каталогов Битрикс. Документация CIBlockElement::Delete
Если вы столкнулись с необходимостью массового удаления товаров, получите консультацию — мы подберем эффективную стратегию для вашего каталога.
Что включает профессиональная установка 1С-Битрикс
Мы начинаем установку 1С-Битрикс с проверки innodb_buffer_pool_size. Дефолтное значение MySQL (128 МБ) — приговор для интернет-магазина с каталогом на 10 000+ товаров. Мы ставим 70–80% от доступной RAM на выделенном сервере, 50% на VPS. Одна эта настройка ускоряет сайт в 2–3 раза по сравнению с дефолтом. Оценим ваш проект за один день — получите консультацию. Обращайтесь, чтобы заказать установку под ключ с гарантией производительности.
Как выбрать хостинг и редакцию для установки 1С-Битрикс?
BitrixVM — виртуальная машина с предустановленным стеком: nginx + Apache, PHP-FPM, MySQL/MariaDB, Sphinx, Push‑сервер. Для VPS — лучший старт. Всё уже сконфигурировано под Битрикс, включая OPcache, логротацию и firewall. Управление через веб‑панель на порту 8890.
VPS/VDS — золотая середина. Минимальная конфигурация для среднего интернет‑магазина: 2 vCPU, 4 ГБ RAM, SSD. Оптимальная: 4 vCPU, 8 ГБ RAM. ОС: Ubuntu 22.04 или Debian 12. Если не BitrixVM — настраиваем стек вручную под задачу. Виртуальный хостинг — только для визиток и лендингов. Требования: PHP 8.0+, MySQL 5.7+ / MariaDB 10.0+, 512 МБ RAM, .htaccess. Хостинг‑партнёры 1С-Битрикс — гарантия совместимости. Выделенный сервер — для highload. Типичная архитектура: веб‑сервер отдельно, база данных отдельно, Redis/Memcached отдельно. На редакции «Энтерпрайз» — веб‑кластер с балансировщиком. Облако (Yandex Cloud, VK Cloud, Selectel) — когда нагрузка скачет: распродажи, сезонные пики. Автомасштабирование через Managed Kubernetes или просто вертикальное масштабирование VM.
Выбор редакции — не менее важный шаг. Частая ошибка: берут «Малый бизнес» для магазина, который через полгода вырастает до B2B с оптовыми ценами и тремя складами. Переход на «Бизнес» — доплата разницы, данные не теряются, но лучше предусмотреть заранее. Наши специалисты подберут редакцию под текущие задачи и с запасом на рост. Например, лицензия «Бизнес» (около 35 000 ₽) окупается за счёт мультисклада и обмена с 1С, а неправильный выбор приводит к потере до 30 000 ₽ ежемесячно на избыточных ресурсах.
| Редакция |
Для кого |
Ключевое ограничение |
| Старт |
Визитки, лендинги |
Нет инфоблоков 2.0, нет торгового каталога |
| Стандарт |
Корпоративные сайты |
Нет e‑commerce модуля |
| Малый бизнес |
Маленькие магазины |
1 тип цены, 1 склад, нет обмена с 1С |
| Бизнес |
Средние магазины, B2B |
Мультисклад, мультивалюта, CommerceML |
| Энтерпрайз |
Highload, кластер |
Веб‑кластер, CDN, мультисайтовость |
Какие настройки сервера критичны для 1С-Битрикс?
Веб‑сервер и PHP
nginx как reverse proxy + Apache (mod_php) или nginx + PHP-FPM напрямую. Второй вариант экономит память — Apache не нужен. Но некоторые модули Битрикс используют .htaccess, поэтому для совместимости иногда оставляем Apache. Конфигурация nginx: fastcgi_read_timeout 300 — для долгих операций (импорт из 1С), client_max_body_size 1024m — загрузка больших файлов. Закрываем доступ к .settings.php, .settings_extra.php, bitrix/.settings.php — там пароли к базе. Rewrite‑правила из urlrewrite.php — Битрикс сам генерирует, но при nginx + PHP-FPM нужно продублировать. PHP 8.0–8.2 с расширениями: mbstring, curl, gd, xml, json, opcache, redis/memcached. Ключевые настройки php.ini: opcache.memory_consumption=256, opcache.max_accelerated_files=20000, max_execution_time=300, memory_limit=512M, upload_max_filesize=100M, post_max_size=128M.
База данных и кэширование
MySQL/MariaDB. Ключевые параметры my.cnf: innodb_buffer_pool_size — 70–80% RAM, innodb_log_file_size=256M, tmp_table_size=256M, max_heap_table_size=256M, thread_pool_size — по количеству ядер CPU. Кодировка utf8mb4 обязательно, иначе эмодзи и спецсимволы ломаются. Redis предпочтительнее Memcached для Битрикс — поддерживает persistent connections и более надёжен. Настраиваем в .settings_extra.php:
'cache' => ['value' => ['type' => ['class_name' => '\\Bitrix\\Main\\Data\\CacheEngineRedis']]]
'session' => ['value' => ['mode' => 'default', 'handlers' => ['general' => ['type' => 'redis']]]]
SSL, почта и cron
SSL — Let's Encrypt через certbot в 90% случаев. Редирект HTTP → HTTPS (301), HSTS, TLS 1.2/1.3, OCSP Stapling. В Битрикс переключаем на HTTPS в настройках главного модуля. Почта: отказываемся от mail() — подключаем SMTP (Яндекс.Почта для домена, Mail.ru для бизнеса). Обязательно настраиваем SPF, DKIM, DMARC. Без SPF письма уходят в спам. Тестируем доставляемость через mail‑tester.com — оценка 9+/10. Cron: агенты Битрикс переводим на системный cron — * * * * * /usr/bin/php /var/www/bitrix/modules/main/tools/cron_events.php. На cron вешаем обмен с 1С (15–60 мин), поисковую переиндексацию, бэкапы (mysqldump + rsync, ротация 7+4), очистку временных файлов.
Безопасность и администрирование
Файловая система: владелец www-data, директории 755, файлы 644, upload 775. nginx блокирует доступ к файлам конфигурации. Включаем Проактивную защиту Битрикс — WAF, контроль активности (блокировка после 5 неудачных попыток), проверку целостности ядра. Для админ‑панели: двухфакторная аутентификация через Google Authenticator или OTP, ограничение доступа по IP через nginx для параноиков.
Сколько времени занимает установка 1С-Битрикс и настройка?
| Задача |
Срок |
| Установка на виртуальный хостинг |
2–4 часа |
| Установка на VPS с настройкой стека |
1–2 дня |
| Установка на dedicated с проектированием архитектуры |
2–5 дней |
| SSL + почта + cron + безопасность |
1–2 дня |
| Настройка бэкапов и мониторинга |
0.5–1 день |
Проверка после установки (пошаговый чек‑лист)
-
Монитор производительности (
/bitrix/admin/perfmon_panel.php) — целимся в 30+ баллов. Ниже 20 — есть серьёзные проблемы с конфигурацией.
-
Проверка системы — автоматическая проверка всех параметров. Красные пункты — исправляем обязательно, жёлтые — по ситуации.
-
Сканер безопасности — проверка на типичные уязвимости.
-
PageSpeed Insights — TTFB < 200мс на VPS, LCP < 2.5с.
-
Тестовый обмен с 1С — если планируется интеграция, проверяем CommerceML‑обмен до запуска.
Дополнительно проверяем версии ПО, настройки кэширования, работу cron, SSL‑сертификат, SPF/DKIM/DMARC, права доступа, удаление дефолтных пользователей и страниц. Для проектов с 54‑ФЗ убеждаемся, что настроена фискализация через ОФД‑провайдера.
Что входит в работу (deliverables)
- Полностью настроенный сервер под 1С-Битрикс с оптимизацией MySQL, PHP, nginx.
- Установленная и активированная лицензия нужной редакции.
- SSL‑сертификат, почтовые настройки, cron и бэкапы.
- Документация: все параметры конфигурации, доступы, cron‑задачи.
- Обучение контент‑менеджера: как заходить в админку, добавлять товары, загружать изображения.
- Поддержка после установки в течение 30 дней — консультации по настройкам.
Почему стоит доверить установку профессионалам?
Неправильная установка — потеря времени и денег. Мы видели проекты, где магазин на «Старте» не мог выдержать 50 посетителей, потому что не был настроен innodb_buffer_pool_size. После переноса на VPS с правильной конфигурацией сайт «полетел». Неправильная конфигурация может обходиться в 30 000 ₽ ежемесячно из‑за избыточного потребления ресурсов. Вы получаете готовую архитектуру, которая масштабируется. Закажите установку 1С-Битрикс под ключ — и получите надёжную платформу для роста бизнеса. Свяжитесь с нами — рассчитаем стоимость под ваш проект. Опыт более 7 лет, реализовано 120+ проектов на Битрикс, включая highload‑магазины с миллионными каталогами. Обращайтесь — мы поможем настроить Битрикс под ваш проект.