Перейти к основному содержанию
`Ctrl`+`K`

# Обработка данных пакетами

Показывает подход для массового изменения большого объёма данных, когда обработка всех записей за один проход может привести к переполнению памяти. Записи выбираются и обрабатываются пачками, после каждой пачки выполняется `commit()`.

Место применения: `Сервис > Инструменты > Выполнить JEXL-скрипт`

Внимание

Перед использованием замените SQL-запрос, размер пачки и логику обработки на значения, подходящие для вашей задачи.

Тип: JEXL-скрипт

    // Обработка данных по пачкам
    var batchSize = 200;
    var nCount = 0;
    var nOffset = 0;

    var sqlText = `
    <запрос>
    `;

    while (true) {
      // offset не нужен, если после каждой пачки отдается commit в БД
      // и запрос исключает уже обработанные записи
      var listSQL = sql(sqlText + " offset " + nOffset + " limit " + batchSize).asList();

      // Условие выхода из цикла
      if (listSQL.isEmpty()) {
        break;
      }

      for (data : listSQL) {
        var ropPlacement = Bs_PlacementApi.load(data.id);
        Bs_PlacementApi.setObjAttrValue(ropPlacement, "idMonitorTrainLocationType", data.idtype);
        nCount += 1;
      }

      commit();
      nOffset += batchSize;
    }

    // Результат
    if (nCount == 0) {
      dialogs.showMessage("Исправлять нечего.");
    } else {
      dialogs.showMessage("Исправлено " + nCount + " записей.");
    }