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 ответа

  • 1
    Syrnik.com 19 августа 2016 11:17 #
    По идее $data['stock'][0] на первом этапе выгрузки всегда null

    Судя по ошибке, на первом этапе $data — не массив. Ну или $data['stock'], но это врядли

  • 1
    Mumu 19 августа 2016 11:32 #

    Я тоже так сначала подумал. Но запись в файл 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 плагина и должен был бы по идее уже у кого-то за столько времени проявиться. Но погуглив, похожих ситуаций я не нашел.

Эта тема в архиве. Добавление комментариев к ней отключено.