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) показывает такую структуру:
a:8:{s:3:"sku";s:7:"D500-14";s:4:"name";s:10:"DORSET BOX";s:9:"available";i:1;s:5:"id_1c";s:36:"2f7e24d4-3bf5-462d-b6f9-e77957425c63";s:5:"stock";i:0;s:4:"sort";i:1;s:10:"product_id";s:5:"40643";s:2:"id";i:40643;}И если возникает такое, что $data не массив, то это bug плагина и должен был бы по идее уже у кого-то за столько времени проявиться. Но погуглив, похожих ситуаций я не нашел.