[I]"Это не баг, это фича"[/I] (С) Советы по эффективному маркетингу.
Версия 17.5.4 "main" и 17.0.32 "sale".
В дефолтном компоненте sale.order.ajax есть [URL=http://joxi.ru/Dr8PGQ7Tk0okXr]вот такая настройка[/URL]. Для тех, кто не открывает левые ссылки при чтении основной статьи: настройка "Когда рассчитывать доставки с внешними системами расчёта". Настройка имеет селект-поле выбора с 3 вариантами выбора:
[LIST]
[*]Не рассчитывать (вариант "угадай сам")
[*]Учитывать настройки доставки
[*]Рассчитывать сразу
[/LIST]Вторая опция (Учитывать настройки доставки) работает с обработчиками доставок, сконструированными с применением [S]высокотехнологичных[/S] методов d7. Это значит, что обработчик должен быть унаследован от базового класса Bitrix\Sale\Delivery\Services\Base и быть в пространстве имён Sale\Handlers\Delivery. Подробности в [URL=https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=8415]курсе[/URL]. Больше подробностей в классной [URL=https://mrcappuccino.ru/blog/post/delivery-handler-for-new-bitrix-sale-module]статье[/URL].
Модуль же ipol.sdek, который на скриншоте у [URL=https://dev.1c-bitrix.ru/community/webdev/user/218167/]Алексея[/URL], написан в соответствии с [S]Ветхим Заветом[/S] старым положением вещей и ядра. Без использования неймспейсов вообще, что можно посмотреть в include.php модуля.
В новом варианте описания обработчиков есть метод [I]isCalculatePriceImmediately()[/I][I]:bool[/I], который как раз и используется при отмеченной опции "Учитывать настройки доставки".
Ещё подробности для новой системы:
1) Если рассчитываемая внешними сервисами доставка стоит первой в списке, то в самом начале метод рассчёта ([I]calculateConcrete()[/I]) будет вызван трижды: при [I]initDelivery()[/I], для [I]recalculatePayment()[/I] и из [I]calculateDeliveries()[/I]. Поэтому в дополнительных рекомендациях к [URL=https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=8415]курс[/URL]у и есть непрозрачно-однозначный намёк на организацию кэширования. Также это повод переместить нерассчитываемые внешне службы, вроде самовывоза и статического рассчёта, в списке в самый верх.
2) Помимо написания непосредственно обработчика доставки можно написать к нему профили и дополнительные услуги. Как пример - СПСР. Комментариев в коде кот наплакал, но они уже есть!
3) Метод проверки совместимости isCompatible() вызывается до calculateConcrete(), что логично. Но если, например, нужно рассчитывать совместимость, исходя из полей ответа внешнего сервиса, то всегда можно вызвать в переопределяемом методе тот, что нужен. В некоторых случаях этим можно даже заменить ограничения служб доставки, связанные с внешними факторами.
[QUOTE]
Алексей написал:
На небольших ИМ эти бесполезные лишние запросы не критичны, а при высокой посещаемости, дают существенную нагрузку + выедают лимиты.[/QUOTE]
Если есть возможность и время, то возможно Вам поможет [URL=https://mrcappuccino.ru/blog/post/bitrix-d7-data-cache]кэширование[/URL].