Не работает обмен клиентами 1C битрикс и 1С
После установки обновлений на сайт 1С Битрикс и переходе с версии 7.2.1 на 7.4.33 перестал работать обмен с 1С. Не передаются клиенты, в логах выбивает ошибки:
Ответ сервера:
<pre>[Error]
Call to a member function setField() on null (0)
../public_html/local/modules/scalable/classes/general/scalable_sale_order_loader.php:2196
#0: CScalableSaleOrderLoader::finishYesterdayOrders()
../public_html/local/modules/scalable/classes/general/scalable_sale_order_loader.php:2168
#1: CScalableSaleOrderLoader->elementHandler(string, array)
#2: call_user_func_array(array, array)
../public_html/bitrix/modules/main/classes/general/xml.php:1188
#3: CXMLFileStream->startElement(string, string)
../public_html/bitrix/modules/main/classes/general/xml.php:1021
#4: CXMLFileStream->findNext()
../public_html/local/components/scalable/sale.export.1c/component.php:556
#5: include(string)
../public_html/bitrix/modules/main/classes/general/component.php:607
#6: CBitrixComponent->__includeComponent()
../public_html/bitrix/modules/main/classes/general/component.php:684
#7: CBitrixComponent->includeComponent(string, array, NULL, boolean)
../public_html/bitrix/modules/main/classes/general/main.php:1072
#8: CAllMain->IncludeComponent(string, string, array)
../public_html/bitrix/modules/scalable/admin/1c_exchange_scalable.php:29
#9: require_once(string)
../public_html/bitrix/admin/1c_exchange_scalable.php:3
----------
Код с файла scalable_sale_order_loader.php:2196
$r = $order->setField('STATUS_ID', 'F');
Содержимое файла и функции
function elementHandler($path, $attr)
{
$val = $attr[GetMessage("SALE_EXPORT_FORM_SUMM")];
if(strlen($val) > 0)
{
if(preg_match("#".GetMessage("SALE_EXPORT_FORM_CRD")."=(.);{0,1}#", $val, $match))
{
$this->sdp = $match[1];
}
}
self::setVersionSchema($attr[GetMessage("CC_BSC1_COM_INFO_VARSION")]);
$this->finishYesterdayOrders(); /*Errore 2168 строка //Scalable systems все старые согласованные заказы помечаем как выполненные*/
}
static protected function loadFromDb(array $filter)
{
return Internals\OrderTable::getList($filter);
}
public static function finishYesterdayOrders()
{
CModule::IncludeModule('sale');
$todayMidnight = new Bitrix\Main\Type\Date();
$arFilter = array(
'filter' => array(
array(
'@STATUS_ID' => array('P'),
'<DATE_UPDATE' => $todayMidnight //все согласованные заказы, редактировавшиеся последний раз до полуночи, превращаются в выполненые.
),
),
'select' => array('ID')
);
$listDB = self::loadFromDb($arFilter);
while ($orderID = $listDB->fetch())
{
$order = \Bitrix\Sale\Order::load($orderID);
$r = $order->setField('STATUS_ID', 'F');
if ($r->isSuccess())
{
$r = $order->save();
}
}
$arFilter = array(
'filter' => array(
array(
'@STATUS_ID' => array('N'),
'<DATE_UPDATE' => $todayMidnight //все нетронутые заказы, редактировавшиеся последний раз до полуночи, очищаются.
),
),
'select' => array('ID')
);
$listDB = self::loadFromDb($arFilter);
while ($orderID = $listDB->fetch())
{
$order = \Bitrix\Sale\Order::load($orderID);
$r = $order->setField('STATUS_ID', 'C');
if ($r->isSuccess())
{
$r = $order->save();
}
}
return '$this->finishYesterdayOrders();';
}
Помогите пожалуйста решить проблему, не могу найти решение, что не нравится обмену.
Источник: Stack Overflow на русском