if(empty($arrProd)){
      // 2 если URL не задан в файле, то транслитирируем его из названия товара.
      $product['url'] = !empty($product['url'])?$product['url']:preg_replace('~-+~','-',MG::translitIt($product['title'], 0));
      $product['url'] = str_replace(array(':', '/'),array('', '-'),$product['url']);
      $product['url'] = URL::prepareUrl($product['url'], true);
   
      if($_POST['identifyType'] == 'name'){
        if(empty($product['cat_id']) || $product['cat_id'] == 0){
          $alreadyProduct = $model->getProductByUrl($product['url']);
        }else{
          $alreadyProduct = $model->getProductByUrl($product['url'], $product['cat_id']);
        }
      }elseif(!empty($product['code'])){
        $res = DB::query('
          SELECT id, url
          FROM `'.PREFIX.'product`
          WHERE code = '.DB::quote($product['code'])
        );
     
        $alreadyProduct = DB::fetchAssoc($res);
     
        if(!$alreadyProduct){
          $res = DB::query('
            SELECT p.id, p.url
            FROM `'.PREFIX.'product` p
              LEFT JOIN `'.PREFIX.'product_variant` pv
                ON pv.product_id = p.id
            WHERE pv.code = '.DB::quote($product['code'])
          );
       
          $alreadyProduct = DB::fetchAssoc($res);
        }
     
        if(empty($alreadyProduct)){
          if($product['cat_id'] == 0){
            $alreadyProduct = $model->getProductByUrl($product['url']);
          }else{
            $alreadyProduct = $model->getProductByUrl($product['url'], $product['cat_id']);
          }
        }
      }
      // Если в базе найден этот продукт, то при обновлении будет сохранен ID и URL.
      if(!empty($alreadyProduct['id'])){
        $product['id'] = $alreadyProduct['id'];
        $product['url'] = $alreadyProduct['url'];
      }
   
      if(empty($_SESSION['csv_import_full']) && (empty($alreadyProduct['id']) || !empty($variant))){
        $_SESSION['csv_import_full'] = 'y';
        $this->formateMogutaCMS(self::$fullProduct, true);
        return;
      }else{
        unset($_SESSION['csv_import_full']);
      }
   
      // обновляем товар, если его не было то метод вернет массив с параметрами вновь созданного товара, в том числе и ID. Иначе  вернет true     
      $arrProd = $model->updateProduct($product);
    }
     
    $product_id = $product['id']?$product['id']:$arrProd['id'];
    $categoryId = $product['cat_id'];
    $productId = $product_id;
    $listProperty = $property;
    $arrProperty = $this->parseListProperty($listProperty);
    foreach($arrProperty as $key => $value){
      $type = 'string';
      $data = '';
      // Если характеристика сложная, то выделим параметры - тип, значение, наценки.
      if ($value[0]=='['&&$value[strlen($value)-1]==']'&&stristr($value, 'type')!== FALSE
        &&stristr($value, 'value')!== FALSE&&stristr($value, 'product_margin')!== FALSE) {
        if(preg_match("/type=([^&]*)value/", $value, $matches))  {
          $type = trim($matches[1]);
        }
        if(preg_match("/value=([^&]*)product_margin/", $value, $matches))  {
          $value_prop = trim($matches[1]);
        }
        if(preg_match("/product_margin=([^&]*)]/", $value, $matches))  {
          $data = trim($matches[1]);
        }
        $value = $value_prop;
      }
      $this->createProperty($key, $value, $categoryId, $productId, $type, $data);
    }
    if(!$variant){
      return true;
    }
    $var = $model->getVariants($product['id'], $variant);
    $varUpdate = null;
    if(!empty($var)){
      foreach($var as $k => $v){
        if($v['title_variant'] == $variant && $v['product_id'] == $product_id){
          $varUpdate = $v['id'];
        }
      }
    }
    // Иначе обновляем существующую запись в таблице вариантов.
    $varFields = array(   
      'price',
      'old_price',
      'count',
      'code',
      'weight',
      'activity',
      'currency_iso'
    );
    $newVariant = array(
      'product_id' => $product_id,
      'title_variant' => $variant,
    );
    if($img_var){
      $newVariant['image'] = $img_var;
    }
    if($_POST['schemeType'] != 'default'){
      foreach(self::$notUpdate as $id){
        $notUpdateFields[$id] = self::$fields[$this->typeCatalog][$id];
      }
    }     
    foreach($varFields as $field){
      if(isset($product[$field])){
        if(!in_array($field, $notUpdateFields)){
          $newVariant[$field] = $product[$field];
        }     
      }
    }
    $model->importUpdateProductVariant($varUpdate, $newVariant, $product_id);
    // Обновляем продукт по первому варианту.
    $res = DB::query('
      SELECT  pv.*
      FROM `'.PREFIX.'product_variant` pv
      WHERE pv.product_id = '.DB::quote($product_id).'
      ORDER BY sort
    ');
    if($row = DB::fetchAssoc($res)){
      if(!empty($row)){
        if($product['title']){
          $row['title'] = $product['title'];
        }     
     
        $row['id'] = $row['product_id'];
        unset($row['image']);
        unset($row['sort']);
        unset($row['title_variant']);
        unset($row['product_id']);
        $model->updateProduct($row);
      }
    }