Структурируйте пожалуйста ваш код, чтобы не было скачущих отступов.
Что касается задачи, если $arProps['OPLATY_PO_SCHETAM']['VALUE'] у вас содержится массив идентификаторов то это тоже сработает.
То есть, если у вас он имеет вид:
$arProps['OPLATY_PO_SCHETAM']['VALUE'] = [
1,
2,
3,
4
];
То вам достаточно заменить ваш фильтр на
$arFilterOplataPoSchetam = array(
"IBLOCK_ID" => "89",
"ID" => $arProps['OPLATY_PO_SCHETAM']['VALUE'],
">=DATE_CREATE" => $minDate,
"<=DATE_CREATE" => $maxDate
);
Т.е. удалить "[0]"
Как только вы это сделаете, у вас вернется массив элементов, но в вашем коде в $arFieldsOplataPoSchetamDluaDolgNaDatu всегда будет 1 результат - последний.
Чтобы предотвратить это, нужно куда-то складывать результаты.
Например сделать так:
$debtsOnDate = [];
while ($obOplataPoSchetamDluaDolgNaDatu = $resOplataPoSchetamDluaDolgNaDatu->GetNextElement()) {
$debtsOnDate[] = $obOplataPoSchetamDluaDolgNaDatu->GetFields();
}
А после того как это сделаете можно еще и ускорить весь цикл (убрав лишние запросы):
while ( $debtOnDate = $resOplataPoSchetamDluaDolgNaDatu->GetNext() )
{
$debtsOnDate[] = $debtOnDate;
}
Ну и конечно же, если не предусматривается вывод пользователю (например нужен только подсчет), то можно заменить GetNext на Fetch метод.