Перейти к содержимому


Фото
- - - - -

При выгрузке с 1С группировать варианты


  • Чтобы отвечать, сперва войдите на форум
3 ответов в теме

#1 artbe

artbe
  • Пользователь
  • 189 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 17.08.2018 - 06:42

Добрый день.

 

Штатно файл обработчик 1c_exchange.php грузит все товары по отдельности из xml файла.

 

В файле обработчика 1c_exchange.php есть код:

	if(empty($variant_id))
		$simpla->variants->add_variant($variant);
	else	
		$simpla->variants->update_variant($variant_id, $variant);

 

Код должен обновлять вариант товара, если нашел нужный вариант или добавить новый вариант товара.

 

НО данный код не срабатывает у меня. У меня всегда создаются новые товары (даже если создаю тестовый товар и в товаре указываю варианты и артикула). 

 

Т.е. например:

 

Чайник электрический UNIT синий

Чайник электрический UNIT белый

Чайник электрический UNIT зеленый

 

Все это по сути один товар, с разными вариантами, но разными артикулами. 

 

Делаю новый товар, например: Чайник электрический UNIT и делаю 3 варианта товара (синий, белый, зеленый и ставлю каждому из вариантов разные артикула). 

 

В результате при синхронизации все равно создаются новые товары. И на варианты товара не переносятся остатки и цены.

 

Понимаю, что надо делать проверку по полю sku, при проверке на варианты:

 

if(empty($variant_id) && !empty($variant_1c_id))
		{
			$simpla->db->query('SELECT id FROM __variants WHERE external_id=? AND product_id=?', $variant_1c_id, $product_id);
			$variant_id = $simpla->db->result('id');
		}
		elseif(empty($variant_id) && empty($variant_1c_id))
		{
			$simpla->db->query('SELECT id FROM __variants WHERE product_id=?', $product_id);
			$variant_id = $simpla->db->result('id');		
		}

 

 

 

И дальше обновлять варианты:

 

	if(empty($variant_id))
	{
		$variant->product_id = $product_id;
		$variant->stock = 0;
		$variant_id = $simpla->variants->add_variant($variant);
	}
	elseif(!empty($variant_id))
	{
		$simpla->variants->update_variant($variant_id, $variant);
	} 

 

Simpla штатная без допилов.

Но сломал уже голову. Кто сможет помочь в реализации, или натолкнуть в нужное направление.


Изменено: artbe, 17.08.2018 - 06:44


#2 Maksclub

Maksclub

    Помогаю с Симплой и c PHP

  • Фрилансер
  • 1 393 сообщений
  • Дизайн, Программирование, Верстка, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 17.08.2018 - 08:13

Покажите ваш offers.xml из 1С который прилетает

#3 artbe

artbe
  • Пользователь
  • 189 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 17.08.2018 - 08:35

Покажите ваш offers.xml из 1С который прилетает

 

Во вложении.

 

Дело не в offers.xml, а в обработчике.

 

Т.к. в обработчике надо делать условие, по типу: Если есть $variant->sku и он совпадает с $xml_product->Артикул - то обновлять остатки и цену у данного варианта.

 

Само поле Артикула, в файле import.xml. По умолчанию, оно без проблем грузится в одиночные товары (которые не имеет вариантов).



#4 phukortsin

phukortsin
  • Пользователь
  • 525 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 17.08.2018 - 09:50

Делаю новый товар, например: Чайник электрический UNIT и делаю 3 варианта товара (синий, белый, зеленый и ставлю каждому из вариантов разные артикула). 
В результате при синхронизации все равно создаются новые товары.

 
Очень сильно зависит от того, что означает "Делаю". Если создаете новый товар в админке вручную, а потом хотите, чтоб работало при обмене, то так зачастую не идет.
 
И вообще вопрос не простой, зависит от многого. Примитивным методом тыка вряд ли получится. По моим наблюдениям, в таких ситуациях в 90% причина совсем не в том месте, где ее обычно ищут методом тыка...
 
 

Дело не в offers.xml, а в обработчике.
Т.к. в обработчике надо делать условие, по типу...

 

Результат зависит и от обработчика и от файла. А если считаете, что все дело в условии, так пишите условие. Если после этого наладится, то, значит, Вы были правы...






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых