Для правильной фильтрации доступных доставок в Битрикс можно использовать методы API компонента "sale.delivery".
Перед получением списка доставок по ID города и ID товара, необходимо установить эти значения.
Вот пример кода, позволяющий получить список доступных доставок по заданным параметрам:
```php
// Устанавливаем ID города и товара
$cityId = 123; // ID города
$productId = 456; // ID товара
// Получаем компонент "sale.delivery"
\Bitrix\Main\Loader::includeModule('sale');
$saleDelivery = new \Bitrix\Sale\Delivery\Services\Manager();
// Фильтруем доступные доставки по ID города и ID товара
$availableDeliveries = $saleDelivery->getByAllAvailableShipment($cityId);
// Проходим по каждой доступной доставке
foreach ($availableDeliveries as $delivery) {
// Получаем ID текущей доставки
$deliveryId = $delivery['ID'];
// Определяем, доступна ли доставка для заданного товара
$isDeliveryAvailableForProduct = $saleDelivery->isCompatible(array(), $productId, $deliveryId);
if ($isDeliveryAvailableForProduct) {
// Доставка доступна для заданного товара
// Делаем соответствующие действия
}
}
```
Таким образом, после выполнения данного кода, в переменной `availableDeliveries` будет содержаться массив с доступными доставками для заданного города, а в цикле `foreach` можно проводить дополнительную фильтрацию и выполнять необходимые действия для каждой доступной доставки.