ifset и выгрузка из 1С
Добрый день!
Делаем импорт\экспорт из 1С. Используем стандартный плагин.
Выгрузка товаров из 1С прерывается, выдавая Warning: Cannot use a scalar value as an array in, указывая на файл /wa-apps/shop/lib/model/shopProductSkus.model.php строка 436.
Там строка:
$sku_count = self::castStock(ifset($data['stock'][0],''));
Было установлено, что падение происходит при выполнении ifset($data['stock'][0],'');
Сама функция ifset находится в /wa-system/helper/misc.php
function ifset(&$var, $def=null) { if (isset($var)) { return $var; } return $def; }
Если я правильно понял, то выгрузка производится в 2 этапа. На первом этапе в Shop-Script загружаются товары каталога. На втором - товарные предложения (т.е. цены, количество на складе и т.д.). Проблема возникает на первом этапе.
Но проблема пропадает и выгрузка проходит успешно, если мы либо убираем ifset и 436 строка приобретает вид:
$sku_count = self::castStock($data['stock'][0]);
Либо изменяем ifset, убирая передачу по ссылке
function ifset($var, $def=null)
1. В чем смысл проверки через ifset? По идее $data['stock'][0] на первом этапе выгрузки всегда null, независимо от заполненности в 1С. И зачем менять null на пустую строку?
2. По каким причинам может возникать описанное поведение? Куда еще стоит "копать", чтобы устранить проблему?
Эта тема в архиве. Добавление комментариев к ней отключено.
2 ответа
Судя по ошибке, на первом этапе $data — не массив. Ну или $data['stock'], но это врядли
Я тоже так сначала подумал. Но запись в файл serialize($data) показывает такую структуру:
И если возникает такое, что $data не массив, то это bug плагина и должен был бы по идее уже у кого-то за столько времени проявиться. Но погуглив, похожих ситуаций я не нашел.