[РЕШЕНО] Синхронизация с 1С

Приветствую, может быть кто-то пользовался дополнением mSync или просто знает как решить вот такую задачу. На сайте есть товары, они же есть в 1С. Из 1С надо получить и добавить к имеющимся товарам остаток и цену, соответственно сделать это нужно сохранив обратную синхронизацию. По умолчанию компонент просто выгружает товары на сайт, создавая точную копию каталога 1С. По советам разработчика данного дополнения написал вот такой плагин
case 'mSyncOnBeforeImportProduct':
	    $code = (string) $xml->Код; //тут я получаю код номенклатуры который на сайте указан как артикул	    
	    $uuid = $xml->Ид; //тут я получаю уникальный идентификатор из выгрузки
	    $where = '{"Data.article": "' . $code . '"}';  //тут пишу доп условие для выборки товаров 
      
	   $id = $modx->runSnippet('msProducts', array( //тут получаю id товара у которого артикул равен $code
	        'parents' => '9',
	        'where' => $where,
	        'returnIds' => '1',
	        'limit' => '1'
	        ));
	        
	    if($id){ //если такой id есть на сайте нужно создать объект mSyncProductData и через него как-то настроить привязку но ничего не работает с этого момента 
	         $mSyncObj = $modx->newObject('mSyncProductData');
	         $mSyncObj->set('uuid_1c', $uuid);
	         $mSyncObj->set('product_id', $id);	       
	        $mSyncObj->save();
	    }  
	    break;
Артур
04 декабря 2019, 16:40
modx.pro
398
0
Поблагодарить автора Отправить деньги

Комментарии: 1

Артур
20 декабря 2019, 18:40
0
В итоге рабочее решение состоит из двух плагинов
case 'mSyncOnBeforeImportProduct':
	    $code = (string) $xml->Код;
	    $uuid = (string) $xml->Ид;
	    
	   $product = $modx->getObject('msProductData', array('article' => $code));
       if (!$product) return;
       $id = $product->get('id');
      
       $mSyncObj = $modx->getObject('mSyncProductData', array('uuid_1c' => $uuid));
        if (!$mSyncObj ) {
            $mSyncObj = $modx->newObject('mSyncProductData');
            $mSyncObj->set('uuid_1c', $uuid);
        }
        $mSyncObj->set('product_id', $id);
        $mSyncObj->set('catagory_id', $parent_id);
        $mSyncObj->save();
        
        $values = & $modx->event->returnedValues;
        $values['data']['article'] = $code;
        
	    break;
	    
	case 'mSyncOnPrepareProduct':
	    $product = $modx->getObject('msProductData', array('article' => $data['article']));
        if (!$product) return;
        $values = & $modx->event->returnedValues;
        $values['parent'] = $product->get('parent');
        $values['data']['name'] = $product->get('pagetitle');
        
	    break;
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1