Как использовать два итератора в одной сущности в Б24 для обработки двух разных множеств полей одновременно?

Как настроить итератор на перебор нескольких множественных полей при списании ТМЦ из списка в Bitrix облаке, где каждое множественное поле представляет собой различное добавленное значение карточки процесса?
  • 20 мая 2024 г. 11:31
Ответы на вопрос 2
Для использования двух итераторов в одной сущности в Битрикс24 для обработки двух разных множеств полей одновременно, вам нужно создать два отдельных цикла перебора полей с помощью функции CIBlockElement::GetProperty(). Например:

```php
$arFilter = array(
    'IBLOCK_ID' => $iblockId,
    'ACTIVE' => 'Y',
);

$res = CIBlockElement::GetList(array('ID' => 'ASC'), $arFilter);

while ($ob = $res->GetNextElement()) {
    $arFields = $ob->GetFields();
    $arProps = $ob->GetProperties();
    
    foreach ($arProps['PROPERTY_NAME_1']['VALUE'] as $value1) {
        // Обработка первого множественного поля
    }
    
    foreach ($arProps['PROPERTY_NAME_2']['VALUE'] as $value2) {
        // Обработка второго множественного поля
    }
}
```

Для настройки итератора на перебор нескольких множественных полей при списании ТМЦ из списка в Bitrix облаке, вы можете использовать аналогичный подход, но с учетом своей специфики данных и логики вашего процесса. Вам необходимо получить значения множественных полей из карточки процесса и обработать их в цикле. Например:

```php
$arFields = array(
    'IBLOCK_ID' => $iblockId,
    'ACTIVE' => 'Y',
);

$res = CIBlockElement::GetList(array('ID' => 'ASC'), $arFields);

while ($ob = $res->GetNextElement()) {
    $arFields = $ob->GetFields();
    $arProps = $ob->GetProperties();
    
    foreach ($arProps['PROPERTY_NAME_1']['VALUE'] as $value1) {
        // Обработка первого множественного поля
    }
    
    foreach ($arProps['PROPERTY_NAME_2']['VALUE'] as $value2) {
        // Обработка второго множественного поля
    }
}
```

Подставьте свои названия множественных полей вместо 'PROPERTY_NAME_1' и 'PROPERTY_NAME_2', а также добавьте необходимую логику обработки данных в каждом из циклов.
Для решения вашей задачи в Битрикс24, вам нужно использовать бизнес-процессы и итераторы для обработки множественных полей. Однако, стандартные возможности Битрикс24 могут быть ограничены в этом плане, и вам, возможно, придется использовать кастомные скрипты или вебхуки для достижения желаемого результата. 
Вот примерный подход к решению вашей задачи:

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

Использование итераторов:
В стандартных бизнес-процессах Битрикс24 итераторы могут работать только с одним множественным полем за раз. Поэтому вам нужно будет создать два итератора: один для поля с наименованиями и другой для поля с числами.

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

Получить данные из множественных полей.
Обработать данные (например, списать ТМЦ).
Вернуть результат обработки.
Пример кода на PHP для обработки множественных полей:

// Получение данных из множественных полей
$names = $_REQUEST['names']; // Массив наименований
$quantities = $_REQUEST['quantities']; // Массив количеств

// Проверка, что количество элементов в массивах совпадает
if (count($names) !== count($quantities)) {
    die('Ошибка: количество элементов в массивах не совпадает.');
}

// Обработка данных
foreach ($names as $index => $name) {
    $quantity = $quantities[$index];
    // Ваш код для обработки данных, например, списание ТМЦ
    // ...
}

// Возврат результата
echo json_encode(['status' => 'success']);

Этот скрипт можно вызвать через вебхук из бизнес-процесса Битрикс24.

Настройка вебхука в Битрикс24:
Создайте вебхук в разделе "Разработчикам" -> "Входящие вебхуки".
Настройте вызов вашего скрипта из бизнес-процесса, передавая необходимые данные.
Таким образом, вы сможете обрабатывать несколько множественных полей одновременно, используя кастомные скрипты и вебхуки.
Похожие вопросы