Добавление external_id в xml файл выгрузки YML-экспорт


#1

Итак, настроил выгрузку заказов и каталога из Cs Cart в RetailCRM через штатный модуль, но печалька в то, что СРМ должна прокидывать полученый заказ в Мой склад.
Ситуация такая, что и в cs cart и в СРМ каталог выгружается из МОЙ склад… Внешние коды (externalID) совпадают, но сам модуль YML-экспорт не включает в итоговый файл данное поле из товаров. Пытался разобраться сам в модуле, но не хватает знаний по проектированию. Не могу толком разобраться, что и откуда растет)))Кто-то может помочь или подсказать, как заставить модуль на программном уровне включать в оферы параметр товара external_id ?
Пример файла выгрузки:
%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%20%D0%BE%D1%82%202018-06-15%2015%3A06%3A41


#2

Ровно с тем же столкнулся, как раз сидел составлял ТЗ на правку этой особенности штатного модуля.
Может и так сами решим, посмотрю сейчас.

@ecomlabs, не подскажете, есть тут какое-то несложное решение?


#3

Если я правильно понял, вам нужно в файле

app/addons/yml_export/Tygh/Ym/Offers/Base.php

поправить функцию build и в $offer[‘attr’] добавить элемент productId


#4

ДА, я тоже сижу над этим файлом, но не могу током понять, как движуться данные и есть ли какие-то зависимости далее. Пробывал в модуле RetailCRM принудительно делать выборку из базы, но не сработало


#5

Запутали. При чем тут productId? У меня получилось так. Так или не так?


#6

Кручу-верчу и никак не могу в параметр передать external_id. Товарищи, помогайте младшеньким) Позялюсьта)


#7

ХЕ, я это сделал. Дайте на печеньку и расскажу всем как )))


#8

Да чего там, держи сразу печеньку :pretzel: )))


#9

Может откроете тайну. Как Вы это сделали?


#10
  1. Я сгенерировал каталог для retailCRM с помощью этого костыля https://github.com/retailcrm/moysklad-catalog
  2. В MySQL ной базе поправил у одного товара external_id сделал его таким же как и product_id
  3. В Моем складе у этого же товара прописал такой же внешний код
    Теперь проходит заказ только по этому товару. Вывод: нужно ковырять модуль обмена c RetailCRM, что бы товар в заказе был вязался по external_id. Либо каким-то образом первоначальной выгрузке товара из Моего склада в Cs-Cart присваивать external_id = product_id
    Разработчики, подскажите в каком направлении двигаться?

#11

Дайте кусок кода Ваш, который на скрине моем чуть выше. Бэк ап слетел. И потом выложу решение


#12

public function build($product)
{
$category_id = $product[‘category_id’];

    $available = 'true';
    if ($product['tracking'] == 'B' && $product['amount'] <= 0) {
        $available = 'false';
    }

    $offer = array(
        'attr' => array(
            'id' => $product['product_id'],
            'available' => $available
        ),
        'items' => array(
            'url' => $this->escapeUrl($product['product_url']),
            'price' => !empty($product['price']) ? fn_format_price($product['price']) : '0',
            'currencyId' => !empty($currency) ? $currency['currency_code'] : CART_PRIMARY_CURRENCY,
            'categoryId' => $category_id
        )
    );

Вы это хотели?


#13

Да. Сейчас поправлю код и будет всем счастье. Ждите


#14

Класс.
Тогда этого действия по правке внешнего кода недостаточно. Нужно еще и передачу заказа править


#15

Я про это и говорю. Я в PHP не силен, но похоже где то в файле app\addons\retailcrm\Tygh\Addons\Retailcrm\Converters\OrderConverter.php собака зарыта Обратите внимание на строки 137 - 139.


Cs-Cart Теперь Работает С Retail Crm
#16

И еще, пока не знаю как в RetaiCRM логи API посмотреть. Поэтому правильность прохода товара в заказе можно проверить путем его отрытия в заказе. Если товар не открывается значит в заказе товар не идетифицированный, то есть его нет в каталоге CRM. Пробовал менять в строке 139 наобум на external_id. В журнале личного кабинета обмена RetailCRM - мой склад написано
Обычно
Заказ №55 не выгружен. Товар id=163 (externalId=40413) не связан с системой МойСклад
При моем кривом изменении
Заказ №58 не выгружен. Товар id=166 (внутренний id=269698) не связан с системой МойСклад


#17

Кто-то знает из какого идентификатора retailcrm берет значение в свою переменную externalid?


#18

А у всех вообще YML для ритейла генерируется без ошибок?

У меня огромная простыня ошибок PHP вместо лога. Пробегаюсь по итоговому YML и вижу кучу задубливаний офферов, которые наполнены с ошибками.
Стоит PHP 7.1


#19

Ну, логи бы посмотреть, а так, это отдельную тему делать надо. Что в логах написано?


#20

Решение оказалось полурабочим т.к. id конфликтует где-то с кодом другим и не дает парсеру отработать. Запустил спайдера на эту ночь. Посмотрим, что накопает и завтра выясним. Рабочий кусок кода выложу только после успешного результата