Блог Горошко Андрея 1C-Битрикс Bitrix\Main\Update\Stepper: Обработка больших данных по шагам с прогресс-баром

Bitrix\Main\Update\Stepper: Обработка больших данных по шагам с прогресс-баром

Когда нужно обработать 100 000 элементов или импортировать огромный файл, обычный скрипт упадет с ошибкой max_execution_time.

Решение — выполнять задачу порциями (по шагам).

В Битрикс для этого есть стандартный и красивый механизм — Stepper.

Он не только управляет шагами, но и показывает пользователю прогресс-бар.

Шаг 1: Создание класса Степпера

Создайте класс, наследующий \Bitrix\Main\Update\Stepper. Он должен лежать в папке lib вашего модуля.

namespace My\Module;

use Bitrix\Main\Update\Stepper;

class MyImportStepper extends Stepper
{
    // Уникальный ID модуля
    protected static $moduleId = "my.module";

    /**
     * Основной метод, выполняющий один шаг
     * @param array $option Массив данных о текущем состоянии
     * @return bool true - продолжать, false - закончить
     */
    public function execute(array &$option)
    {
        // 1. Инициализация параметров при первом запуске
        if (empty($option["count"])) {
            $option["count"] = \My\Data::getCount(); // Общее кол-во элементов
            $option["steps"] = 0; // Текущий прогресс
        }

        // 2. Выполнение порции работы
        $limit = 50; // Обрабатываем по 50 штук за раз
        
        $items = \My\Data::getList([
            'limit' => $limit,
            'offset' => $option["steps"]
        ]);

        $processedCount = 0;
        while ($item = $items->fetch()) {
            // ... Тяжелая логика обработки элемента ...
            // \My\Processor::doWork($item);
            
            $processedCount++;
        }

        // 3. Обновление прогресса
        $option["steps"] += $processedCount;

        // 4. Условие завершения
        if ($processedCount < $limit) {
            // Данные кончились, удаляем задачу
            return false;
        }

        // Задача не закончена, продолжаем
        return true;
    }
}

Шаг 2: Запуск (регистрация) степпера

Чтобы запустить процесс, нужно «связать» степпер с модулем. Это делается один раз в месте старта (например, по нажатию кнопки).

// Где-то в контроллере или admin-скрипте
\My\Module\MyImportStepper::bind();

Битрикс создаст запись в таблице b_option и начнет выполнять execute() на хитах.

Шаг 3: Вывод прогресс-бара

Чтобы пользователь видел, что происходит, нужно вывести JS-виджет степпера. Обычно это делается на странице настроек модуля или списка элементов.

// В админ-части (prolog_admin_after уже подключен)

// Получаем HTML всех активных степперов для нашего модуля
$stepperHtml = \Bitrix\Main\Update\Stepper::getHtml("my.module");

echo $stepperHtml;

Битрикс сам проверит, есть ли активные задачи для my.module. Если есть — покажет красивую полоску прогресса с процентами. Если нет — выведет пустоту. JS сам будет дергать аяксом выполнение шагов, пока задача не завершится.

Особенности:

  • Stepper работает на хитах (через AJAX при открытой странице админки или через обычные хиты пользователей).
  • В массиве $option можно хранить любые данные между шагами (ID последнего элемента, счетчики ошибок и т.д.).

Вывод:
Stepper — это профессиональный способ реализации долгих фоновых процессов в интерфейсе.

Он обеспечивает стабильность (скрипт не падает), информативность (пользователь видит прогресс) и простоту реализации (не нужно писать свой JS для AJAX-запросов).

Stepper, Битрикс степпер, пошаговое выполнение, фоновые задачи, progress bar, импорт данных, долгие операции.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Сколько стоит внедрение многоскладовости и региональных цен на 1С-БитриксСколько стоит внедрение многоскладовости и региональных цен на 1С-Битрикс

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

Разработка B2B-кабинета с интеграцией системы электронного документооборота Диадок / СБИСРазработка B2B-кабинета с интеграцией системы электронного документооборота Диадок / СБИС

Разработка и внедрение профессионального B2B-портала и дилерского кабинета на 1С-Битрикс позволяет кардинально сократить издержки отдела оптовых продаж, перевести дилеров на самообслуживание 24/7 и исключить ошибки ручного ввода заказов. Услуга «Разработка

Добавить товар catalog.product.addДобавить товар catalog.product.add

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Добавить товар catalog.product.add», разберем архитектурные особенности и предоставим