Экспорт товаров

Добрый день. Сейчас в списке экспортируемых полей по умолчанию у меня
Product code — Арт. и Language — Язык. Как сделать, чтобы по умолчанию экспорт шел по
external id — Код товара?

В этом случае я не смогу изменить артикулы, ведь выгрузка привязвается именно к ним. Мне нужно, чтобы вместо Product code — Арт. по умолчанию был external id — Код товара

По моему раньше, если в настройках модуля Commerce ML изменить Значение для связывания товаров, то менялись и поля экспорта по умолчанию. Сейчас пробовал - не меняются

Не припомним, чтобы раньше такое было. Всегда связка в экспорте/импорте была по Артикулу

в готовом файле удаляете артикул и настраиваете импорт по айди или не выставляете при импорте поле по артикулу а по айди

Пишет ОшибкаИмпортируемый файл должен содержать поля: Product code

Ну вот понадобилось мне пакетно изменить артикулы. Как это делать?

Есть минимум 2 способа :slight_smile:

  1. Где-то на маркете был модуль работы с проставлением артикулов.
  2. Создать контроллер и в нем скрипт.

p\s данный пример заполняет пустые артикулы
начиная с 00001, 00002 …

if ($mode == 'code_add') {

    $products = db_get_array("SELECT product_id, product_code FROM ?:products");

    $products_codes = db_get_fields("SELECT product_code FROM ?:products");
    $empty_codes  = $empty_codes_no = array();        
    
    foreach($products as $p){
        if(empty(trim($p['product_code']))){
            $empty_codes[$p['product_id']] = $p['product_code'];
        }else{
             $empty_codes_no[$p['product_id']] = $p['product_code'];
        }
    }
    
 
    foreach($empty_codes as $p_id => $code){
        
        $cd = str_pad($p_id, 5, '0', STR_PAD_LEFT);
       db_query("UPDATE ?:products SET product_code = ?s WHERE product_id = ?i", $cd, $p_id);
        
        fn_echo($cd);
        fn_echo('<br/>');

        
    }

    fn_echo('OK');
    exit;
}

Основываясь на этом, артикулы можно заменить на что угодно и потом работать с ними через экспорт/импорт.

Сделайте полный бэкап магазина и в файле app/schemas/exim/products.php попробуйте заменить

    'Product code' => array(
        'db_field' => 'product_code',
        'alt_key' => true,
        'required' => true,
        'alt_field' => 'product_id'
    ),

на

    'External ID' => array(
        'db_field' => 'external_id',
        'alt_key' => true,
        'required' => true,
        'alt_field' => 'product_id'
    ),
    'Product code' => array(
        'db_field' => 'product_code',
    ),

(!) не тестировано. есть шанс, что не заработает

1 лайк

А так если артикул пакетно, то просто прописываете модификатор при импорте и заменяете все.
Я вообще давно прошу, сделать внешний и внутренний артикул чтобы можно было импортить или по одному или по другому и это решило бы много вопросов, но разработчики пока морозятся, видимо сложный вопрос и сделают платный модуль после чекаута )

И я о том же. Была бы настройка, чтобы поменять связывание товара при экспорте/импорте с артикула на Product ID допустим, проблемы бы не было.

1 лайк

Новый импорт пока только начинаю осваивать, буду тестить

А что вообще представляют собой эти значения? Product code это артикул, его присваиваешь сам, external id выгружается из 1С. А Product id это что такое? просто порядковый номер, который генерит сам CS Cart?

В документации пишут
Идентификация (соответствие) данных между системой учета и CS-Cart производится:

С помощью тега <Ид> (в выгружаемом файле) и external_id (в базе данных CS-Cart).

Примечание

Ид == external_id

По наименованию (при поиске категорий и характеристик в базе данных).

Т.е если поменять артикул в 1с, он должен выгрузиться в CS Cart?

Протестировал. Изменение артикула в 1с не передается в ИМ. Я так понимаю влияет вот эта настройка http://joxi.ru/E2pEW0Pc9b1eZA. Видимо нужна настройка “новые товары, артикулы, количество цены всех товаров”? Полную выгрузку делать не хочу, наименования товара в 1С и админке не совпадают, собьется все

Да, product_id - это внутренний ID товара в БД CS-Cart

Не работает. При попытке зайти в экспорт выдает 500 ошибку

кавычку пропустил, пост поправил

Вот теперь заработало вроде. Спасибо

1 лайк