[arFilter_124] => Array
(
[UPDATED_1C] => N
[STATUS_ID] => Array
(
[0] => N
[1] => N
[2] => B
[3] => B
[4] => F
[5] => F
)
[>=DATE_UPDATE] => 07.05.2014 15:09:37
)
Не выгружаются именно новые заказы (статус N).
Проблема началась после обновления Битрикс с 14.0 до 14.5. 1С не обновлялась, да и за обмен отвечает кастомизированная компонента, созданная на основе 14.0.
У кого-нибудь есть такие же проблемы, или у меня одного такое счастье?
Ошибка наблюдается, если в пачке на выдачу должно быть более одного заказа. Тогда выгрузка прекращается по причине исчерпания лимита на один шаг. В старый компонентах на месте этого аргумента функции CSaleExport::ExportOrders2Xml вообще ничего, хотя в коде компоненты передается неопределенная переменная $exportCnt. В новой компоненте появился этот параметр + $version.
Увы, в коде есть ошибка. Если передать 0, или вообще не передать лимит по времени исполнения, то сама процедура его не определит. В коде видно, что задумка была (установить в секундах один год), да неправильно сделано и работать не будет (в общем-то уже не работает).
Лечится в старых версиях компоненты насильственной передачей большого количества секунд в этом параметре (я год и передал).
Кастомизировать заново новую не решился. Я не знаю что хочет серверная часть Битрикс от 1С для поддержки лимита времени исполнения. Поэтому все исполняю как и раньше за 1 шаг.
Вся беда в том, что если у нас в эту функцию приходит $time_limit = 0, как заметил Анатолий Кирсанов, $end_time у нас не задается, тоесть = NULL и тогда после выдачи первого заказа условие (time() > $end_time) выполняется и вызывается break;. Выход - добавить проверку на существование $end_time. Примерно на 720 строке в файле /bitrix/modules/sale/general/export.php заменить if(time() > $end_time) на if(isset($end_time) && time() > $end_time).