Выгрузка Брендов Из 1С


#1

Всем привет. В первый раз настраиваю связку 1С Управление торговлей и CS-Cart. В 1С у каждого товара заполнены реквизиты "марка" и "изготовитель", однако загрузить их в CS-Cart не удается. Стандартный функционал механизма обмена на стороне 1С этого не предусматривает, тут нужно дописывать. С кодом номенклатуры такая же проблема, но с ней разобрался, добавил в 1С код, который в xml-файле выгрузки генерирует строки (отмечено красным):

<ЗначенияРеквизитов>
    <ЗначениеРеквизита>
        <Наименование>ВидНоменклатуры
        <Значение>вело
    
    <ЗначениеРеквизита>
        <Наименование>ТипНоменклатуры
        <Значение>Товар
    
    <ЗначениеРеквизита>
        <Наименование>Код
        <Значение>E0002003 
    
    <ЗначениеРеквизита>
        <Наименование>Полное наименование
        <Значение>вело Стелс Pilot 310 (г.Москва) 20", 1-ск., складной, длинные крылья, зад. ножн. тормоз, багажник, насос, звонок. (короткая база)
    

Теперь CS-Cart при настройке "Использовать в артикуле товара - Код номенклатуры" берет именно эти значения. А с брендами не могу разобраться. Подскажите, кто уже делал, что и как нужно писать в xml-файл, чтобы CS-Cart выдергивал оттуда бренды.


#2

Для того чтобы cscart загрузил бренды создайте их в 1С в виде свойств и в настройках модуля cscart укажите свойство, которое будет использоваться в качестве бренда. О настройках обмена вы можете прочесть в нашей инструкции http://www.cs-cart.ru/docs/4.3.x/manager/commerceml/index.html .


#3

Спасибо за ответ. В целом с этой инструкцией знаком, однако подробностей о том, как организовать выгрузку брендов, в ней не нашел. Я верно понимаю, что нужно в 1С нужно создать дополнительное свойство номенклатуры, в которое нужно записать бренды? А нельзя ли не дублировать то, что уже есть? Стандартные реквизиты "Марка" и "Изготовитель" в 1С уже имеются. Просто требуются некоторые подробности - как эта информация должна быть передана в файл выгрузки, чтобы CS-Cart ее подхватил?


#4

Если у вас из 1С выгружается тег "Изготовитель" (см. в файле import), то вы можете указать в модуле cscart "Значение изготовителя" для настройки "Значение используемое в качестве бренда", если данный тег не выгружается, то вам необходимо будет продублировать информацию в виде свойства или вносить изменения в модуль 1С, чтобы значения из реквизита "Изготовитель" выгружалось в виде свойства.

Уточните пожалуйста куда именно вы хотите загружать значения из реквизита "Марка"?


#5

Спасибо, что пытаетесь помочь!

Значение из 1С-реквизита "Марка" хотим выгружать в CS-Cart-реквизит "Бренд". Тега "Изготовитель" в файле import.xml нет. Пытался дописать выгрузку из 1С самостоятельно, при используемой настройке в CS-Cart "Значение, используемое в качестве бренда - Значение изготовителя". Вариант вставки в import.xml

<Изготовитель>Stels

не работает (CS-Cart не подхватывает), вариант

<Изготовитель>
    <Ид>023aa5a4-ad3e-11e3-941a-002590d8abfd
    <Наименование>Stels

с подвязкой глобального идентификатора объекта соответствующего справочника из 1С тоже не работает. Нужна более подробная информация по формату файла import.xml в этой части. Имеющейся на странице www.cs-cart.ru/docs/4.3.x/developer/1c/catalogxml.html#offers-xml к сожалению, недостаточно.


#6

При выборе "Значение изготовителя" у товара должен быть тег в следующем формате:

<Изготовитель>
    <Ид>b300d4b0-a905-11e4-96f1-f46d0428c3ee
    <Наименование>ROLSEN
    <ОфициальноеНаименование>ROLSEN

Если выбрана настройка "Свойство товара" с соответствующем свойством в поле "Наименование свойства для бренда", то у товара должно быть свойство в формате:

<ЗначенияСвойств>
    <ЗначенияСвойства>
        <Ид>28b6895a-24a9-11e0-aeec-0015e9b8c48d
        <Значение>Платье
    


#7

Оказывается, работает! Причем оба варианта, как с официальным наименованием, так и без него. Просто был не внимателен, проверяя в очередной раз результат выгрузки, и привычно увидев на странице характеристик товара в поле "Бренд" значение "Не выбран", решил, что не получилось. На самом деле ниже появилось новое поле с тем же наименованием - "Бренд" - и в нем стоят актуальные значения, выгруженные из 1С. При щелчке по полю открывается список брендов - все, которые выгружались, в нем присутствуют. После удаления демо-данных (вместе с относящимися к ним характеристикам) осталось одно поле "Бренд" - моё.

Видимо, CS-Cart создает разные поля под разные варианты настройки?

Спасибо за промощь, проблема решена.


#8

Да, если в cs-cart уже есть характеристика "Бренд", у которой external_id не совпадает с Ид из 1С, в cscart будет создана новая характеристика "Бренд".


#9

Да, если в cs-cart уже есть характеристика "Бренд", у которой external_id не совпадает с Ид из 1С, в cscart будет создана новая характеристика "Бренд".

Извиняюсь за нубский вопрос, а можно поменять характеристике "Бренды" это самый ID, с тем, чтобы свойства "Бренды" из 1С добавлялись в уже существующие на сайте Бренды?


#10

Да можно, но только через бд в таблице features


#11

Спасибо большое!

Но теперь свойство CS-Cart показывается только у синхронизируемых товаров.

Можно от этого избавиться? Чтобы не выставлять вручную "Показывать на: Все категории" после обмена с 1С.


#12

Для того чтобы категория у характеристик добавлялась вне зависимости от категории товара, найдите в коде добавление категорий в таблицу "categories_path" и попробуйте закомментировать код.


#13

Здравствуйте

app/addons/rus_exim_1c/Tygh/Commerceml/RusEximCommerceml.php

Комментировать нужно всю функцию?

public function addProductFeatures($data_features, $variants_data, $import_params)
{
    foreach ($data_features as $p_feature) {
        $variant_feature = array_merge($p_feature, $variants_data);

        if (!empty($variants_data['category_id'])) {
            $feature_categories = fn_explode(',', $this->db->getField("SELECT categories_path FROM ?:product_features WHERE feature_id = ?i", $p_feature['feature_id']));
            if (!in_array($variants_data['category_id'], $feature_categories)) {
                $feature_categories[] = $variants_data['category_id'];
                $feature_categories = array_diff($feature_categories, array(''));
                $this->db->query("UPDATE ?:product_features SET categories_path = ?s WHERE feature_id = ?i", implode(',', $feature_categories), $p_feature['feature_id']);
            }
        }

        $this->addFeatureValues($variant_feature);
    }
}

Или вот этот кусок кода?

        if (!empty($variants_data['category_id'])) {
            $feature_categories = fn_explode(',', $this->db->getField("SELECT categories_path FROM ?:product_features WHERE feature_id = ?i", $p_feature['feature_id']));
            if (!in_array($variants_data['category_id'], $feature_categories)) {
                $feature_categories[] = $variants_data['category_id'];
                $feature_categories = array_diff($feature_categories, array(''));
                $this->db->query("UPDATE ?:product_features SET categories_path = ?s WHERE feature_id = ?i", implode(',', $feature_categories), $p_feature['feature_id']);
            }
        }