тогда давайте я вас просвещу :) и как в логике это должно работать
1. Доп. свойства товаров в 1С должны записываться в атрибуты опенкарта (кроме свойств Производитель, H1 и др. системные параметры)
2. Характеристики номенклатуры 1С - это как раз дополнительные параметры товаров (в опенкарте называются Опции) которые могут иметь свои остатки по складу, свои доп. наценки и т.п.) их как раз нужно выгружать в Опции опенкарта . (но это как правило редкость, я не часто встречаю организации которые ведут складской учет по характеристикам товаров)
вернемся к первому, как я вижу это в php , нарусуем сначала фнкцию:
/* cпарсим все свойства и реквизиты
функция выдает все свойства и реквизиты
в виде массива вида $ data[<ид_товара_1с>][<назва_свойства>] = Значение свойства */
private function parseElementsAndProperties($xml){
$arrayOfProperty = array();
$result = array();
$ids_propertys = array();
// сначала найдем иди свойств в классификаторе по их названию.
// Затем мы их обычно перепишет на нормальные названия
if (isset($xml->Классификатор->Свойства->СвойствоНоменклатуры)){
foreach($xml->Классификатор->Свойства->СвойствоНоменклатуры as $property){
$ids_propertys[(string)$property->Ид] = (string)$property->Наименование;
}
}
if (isset($xml->Каталог->Товары->Товар->ЗначенияРеквизитов->ЗначениеРеквизита)){
foreach($xml->Каталог->Товары->Товар as $product_el){
$product_id = (string)$product_el->Ид;
foreach($product_el->ЗначенияРеквизитов->ЗначениеРеквизита as $element){
$result[$product_id][(string)$element->Наименование] = (string)$element->Значение;
}
}
}
if (isset($xml->Каталог->Товары->Товар->ЗначенияСвойств->ЗначенияСвойства)){
foreach($xml->Каталог->Товары->Товар as $product){
$product_id = (string)$product->Ид;
if(isset($product->ЗначенияСвойств->ЗначенияСвойства)){
foreach($product->ЗначенияСвойств->ЗначенияСвойства as $property){
$arrayOfProperty = @json_decode(@json_encode($property),1);
//Находим по ид наше значение.
$result[$product_id][(string)$ids_propertys[(string)$arrayOfProperty['Ид']]] = (string)$arrayOfProperty['Значение'];
}
}
}
}
return $result;
}
теперь нам не нужно делать кучу case , а получить можно значение вот так
$PathToFile = DIR_CACHE . 'exchange1c/import.xml';
$object = simplexml_load_file($PathToFile);
$properties = $this->parseElementsAndProperties($object);
echo $properties[strval($data->Ид)]['Производитель'];
т.е. тут можно взять весь массив этих доп. свойств (атрибуты в опенкарте) и записать, но встает вопрос о последующей синхронизации этих атрибутов при обновлении товаров, для этого нам и понадобиться вспомогательная таблица product_to_1c_atribute