Найти в Дзене

Замена служб доставок в базе данных Битрикс

Не все собственники бизнесов готовы поддерживать свою лицензию на Битрикс в актуальном состоянии. Если раньше я это понимал и принимал, и сам говорил, что Битрикс достаточно обновлять раз в три года, то сейчас это не так. С 2022 года и Битрикс, и решения на основе Битрикса, например, от Аспро являются желанными целями для хакеров, чтобы добавить ваш сайт в какой-нибудь ботнет или разместить нежелательную, а то и противозаконную информацию. Сейчас я рекомендую обновлять системы на сайте не реже чем раз в три месяца. К сожалению, собственники сайтов иногда принимают такие риски. Кроме этого, я всегда считал, что неактивность лицензии не влияет на основную функциональность сайта, однако недавно обнаружил, что модули служб доставок СДЭК и DPD из маркета требуют для своей работы активную лицензию, а в противном случае выбрасывают исключение об ошибке службы доставки. Из этого вытекают две проблемы. 1. Невозможность оформить новый заказ. Решаемо, если отключить эти службы доставки через адми

Не все собственники бизнесов готовы поддерживать свою лицензию на Битрикс в актуальном состоянии. Если раньше я это понимал и принимал, и сам говорил, что Битрикс достаточно обновлять раз в три года, то сейчас это не так.

С 2022 года и Битрикс, и решения на основе Битрикса, например, от Аспро являются желанными целями для хакеров, чтобы добавить ваш сайт в какой-нибудь ботнет или разместить нежелательную, а то и противозаконную информацию. Сейчас я рекомендую обновлять системы на сайте не реже чем раз в три месяца.

К сожалению, собственники сайтов иногда принимают такие риски. Кроме этого, я всегда считал, что неактивность лицензии не влияет на основную функциональность сайта, однако недавно обнаружил, что модули служб доставок СДЭК и DPD из маркета требуют для своей работы активную лицензию, а в противном случае выбрасывают исключение об ошибке службы доставки.

Из этого вытекают две проблемы.

1. Невозможность оформить новый заказ. Решаемо, если отключить эти службы доставки через админку. Удалить нельзя, так как существуют уже оформленные заказы с использованием этих служб.

В конечном итоге решили вопрос, создав настраиваемую службу доставки, так как финальный расчет стоимости доставки все равно проводит менеджер магазина.

2. Невозможность работать со старыми заказами, которые оформлены с использованием этих служб. Выбрасывает исключение и в админке, и в клиентских компонентах.

Ошибка в клиентском компоненте
Ошибка в клиентском компоненте
Ошибка в админке
Ошибка в админке

Здесь принято решение – заменить отключенные автоматизированные службы доставки в базе данных на вновь созданные настраиваемые.

Информация о службах доставки хранится в таблицах базы данных b_sale_order (поле delivery_id), sale_order_delivery (поле delivery_id и XML_ID).

Для отладки возьмем заказы определенного покупателя – поле user_id в таблице b_sale_order:

SELECT * FROM b_sale_order WHERE user_id=?

Также необходимо получить данные в таблице sale_order_delivery

SELECT * FROM b_sale_order_delivery WHERE order_id=?

Финальный скрипт на PHP, в котором мы меняем две доставки с ID 460 на ID 530 и ID 45 на ID 529

global $DB;
$sql="SELECT ID, DELIVERY_ID FROM b_sale_order WHERE user_id=?";
$res = $DB->Query($sql);
$order=[];
while ($arRes=$res->Fetch())
{
$order[]=$arRes['ID'];
$order_id=$arRes['ID'];
$sqld="SELECT ID, ORDER_ID, DELIVERY_ID, XML_ID FROM b_sale_order_delivery WHERE order_id=".$order_id;
$resd = $DB->Query($sqld);
$delivery_id=0;
while ($arResd=$resd->Fetch())
{
if ($arResd['DELIVERY_ID']==460) $delivery_id=530;
if ($arResd['DELIVERY_ID']==45) $delivery_id=529;
print_r($arResd);
$sqldu="UPDATE b_sale_order_delivery SET DELIVERY_ID=".$delivery_id." WHERE order_id=".$order_id.";";
if ($delivery_id>0) $DB->Query($sqldu);
}
$sqlu="UPDATE b_sale_order SET DELIVERY_ID=".$delivery_id." WHERE id=".$order_id;
if ($delivery_id>0) $DB->Query($sqlu);
}
print_r($order);

Можно сделать еще проще и двумя запросами на чистом SQL поменять непосредственно из PHPMyAdmin.

Если у вас есть потребность по доработке вашего сайта на Битрикс, жду вашего комментария, письма или звонка.

Спасибо!