October 1, 2026
Антонова Елизавета

Инструкция как обрабатывать большие объемы данных наборами на Бипиуме

Оглавление

При небольшом количестве записей сценарий может обрабатывать данные одним массивом. Но когда каталог содержит тысячи записей, такой подход становится менее подходящим: увеличивается объем данных, который одновременно проходит через сценарий, а при дальнейшей фильтрации и обработке нагрузка возрастает.

В Бипиуме для таких задач можно построить сценарий, который получает записи небольшими наборами и последовательно проходит весь каталог. В этой инструкции разберем конструкцию на примере каталога «Объекты»: записи будут загружаться по 1000 штук, фильтроваться, добавляться в общий массив, а после завершения цикла использоваться для формирования отчета.

Определите размер набора данных

Первый шаг — определить, сколько записей сценарий будет получать за одну итерацию. В демонстрации используется значение 1000. Для этого создается переменная limit. Она хранит размер одной выборки и затем передается в компонент «Найти записи».

Вторая переменная — offset. Она определяет, с какой позиции начинать следующую выборку. В начале сценария ее значение равно 0.

Третья переменная — more. Она отвечает за продолжение цикла. В начале ей задается значение true, чтобы сценарий мог перейти к первой итерации.

Наконец, создается пустой массив data. Он будет использоваться для накопления результатов всех итераций.

Получайте записи по limit штук

После начальной настройки сценарий переходит к шлюзу, который проверяет значение more. Пока оно равно true, сценарий входит в цикл. Внутри цикла используется компонент «Найти записи». В нем указывается каталог «Объекты», количество записей — переменная limit, а начало выборки — offset. При первом запуске получается первая тысяча записей. Затем после завершения обработки offset увеличивается на 1000, и следующий запрос начинается уже с новой позиции. За счет этого сценарий не обращается ко всему каталогу одновременно.

Обрабатывайте текущий набор записей

Полученный массив сохраняется в переменную records. Далее он передается в компонент кода вместе с накопленным массивом data. На этом этапе можно выполнять необходимую обработку. В демонстрации используется фильтрация объектов: из текущей тысячи записей выбираются те, которые еще не имеют статуса «сдан» и стоимость которых меньше полутора миллиардов. Каждая запись, соответствующая условиям, добавляется в data.

Здесь records и data выполняют разные функции. Первый массив содержит только текущий набор, второй постепенно накапливает итоговый результат.

Добавляйте результаты каждой итерации в общий массив

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

Проверяйте окончание цикла

После обработки очередного набора необходимо определить, есть ли еще записи. Для этого количество элементов в records сравнивается со значением limit. Если сценарий получил ровно 1000 записей, more остается true: предполагается, что существует следующая порция. Если записей меньше 1000, значит, сценарий дошел до конца каталога и more становится false.

Например, при 3200 записях будут обработаны три полных набора по 1000 и последний набор из 200 записей. Именно размер последней выборки позволит сценарию завершить цикл.

Добавьте небольшую паузу между итерациями

В демонстрационном сценарии между проходами используется компонент таймера с паузой 0,1 секунды. Такая пауза используется для более стабильной работы циклической обработки. Сам принцип при этом не меняется: сценарий получает очередной набор, обрабатывает его, обновляет offset и переходит дальше. После выхода из цикла временная переменная records больше не нужна. Ее можно обнулить, поскольку весь требуемый результат уже находится в data.

Передайте накопленные данные в отчет

Когда все записи обработаны, массив data можно использовать в следующем компоненте. В демонстрации применяется компонент «Сгенерировать документ». Для него заранее создается шаблон с полями наименования компании, стоимости проекта, планируемой даты завершения и комментариев. Отдельная переменная count содержит количество записей в итоговом массиве. При передаче переменной внутрь строки используется конструкция с обратными кавычками и ${}. В результате в шаблон передаются data и count, после чего формируется готовый отчет.

Запускайте обработку через внешний запрос

Для запуска такого сценария в демонстрации используется внешний запрос. В его записи задаются URL-идентификатор и сценарий, который необходимо выполнить. После настройки сценарий можно вызвать по адресу: [Домен]/api/webrequest/[URL-идентификатор]

Это позволяет запускать обработку отдельно и контролировать ее выполнение. В демонстрации после запуска результат появляется в соответствующем поле записи.

Что получилось в демонстрации

Исходный каталог содержал 3000 записей. После прохождения всех наборов и применения фильтра в итоговый массив попало 1379 объектов. При этом сам отчет — только пример конечного действия. После цикла можно выполнять и другую обработку: изменять данные, передавать их дальше или использовать в другом сценарии. Основная конструкция остается неизменной: limit задает размер набора, offset перемещает сценарий к следующей порции, more определяет необходимость продолжения, а data хранит накопленный результат.

Демонстрация настройки: "Обработка больших объемов данных" ‍

October 1, 2026
Антонова Елизавета

Узнайте, подходит ли вам решение