Чтобы добавить XmlId в YML структуру нужно немного поправить пару файлов.
app/addons/yml_export/Tygh/Ym/Offers/Base.php
В функцию public function build($product) {}
добавить в массив $offer[‘items’] элемент ‘xmlId’ => $product[‘external_id’] вот так:
$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,
// @fm_mod
‘xmlId’ => $product[‘external_id’]
)
);
app/addons/retailcrm/Tygh/Addons/Retailcrm/Ym/Offers/Simple.php
расширить схему $this->schema[] = ‘xmlId’; вот так:
public function gatherAdditional($product)
{
parent::gatherAdditional($product);
app/addons/retailcrm/Tygh/Addons/Retailcrm/Ym/Offers/Vendor.php вот так:
public function gatherAdditional($product)
{
parent::gatherAdditional($product);
Для товаров с вариациями сложнее, нужно external_id вариации добавлять в XmlId после external_id основного товара через хэштег #. Пусть этим займутся разработчики.
public static function getRetailCrmOfferItem($offer_item, $product)
{
if (!empty($product[‘yml2_purchase_price’])) {
$offer_item[‘purchasePrice’] = $product[‘yml2_purchase_price’];
}
Работоспособно ли на настоящее время это решение? Или в свете вышедших обновлений уже не актуально? Т.к. попробовал у себя - нет external_id ни в выгрузке, ни в заказе.
Аналогично. Как я понял, $product[‘external_id’] выдает пустоту
Увы, моих скромных познаний в программировании на подробнее не хватает. @fevzi спаси нас
В общем в массиве $product не содержится значения external_id. Я пока смог придумать только костыль (работает):
Файл app/addons/retailcrm/Tygh/Addons/Retailcrm/Ym/Offers/Simple.php
Добавляем переменную $external_ids со значением, которое берется запросом из БД.
if (empty($offer_item['productName'])) {
$offer_item['ProductName'] = $product['product'];
}
$external_ids = db_get_fields('SELECT p.external_id FROM ?:products AS p WHERE product_id = ?i', $product['product_id']);
if (!empty($external_ids)) {
$offer_item['xmlId'] = $external_ids;
}
По словам техподдержки, с версии 4.9.1 в модуле экспорта больше не передается параметр <name>, если вы экспортируете товары по vendor.model (в экспорте есть поля <vendor> и <model>).
Без этого параметра в RetailCRM не будут подгружаться названия товаров, пропадут из всех док-ов.
Так что трижды подумайте перед обновлением
Вам уже ответили в Help Desk, что поле name будет выгружаться для типа vendor.model, в случае, если для прайс-листа стоит галочка Прайс-лист для retailCRM.
Однако, в 4.9.1 из-за ошибки в принципе невозможно выгрузить прайс лист. Данная ошибка уже исправлена и её исправление войдёт в 4.9.2
Выгрузка в retailCRM через модуль генерации YML конечно путает.
Да, это было очень логично и целесообразно с точки зрения трудозатрат реализовать подобным образом, т.к. ICML является расширением YML, но… слишком запутанно просто на ровном месте.
Я считаю, что не должен пользователь морочиться техническими тонкостями и вникать - из-за какого параметра всё пошло не так.
Нам всем максимум, что нужно - указать, какие директории включить/исключить в выгрузке.
Есть стандарт ICML, он очень прост. Хочется просто нажать кнопку и получить нормальный файл. Ну или чтобы он генерился по крону.
Это настолько простая задача (даже с учетом поддержки вариаций - нескольких товарных предложений для одного товара), что непонятно, почему до сих пор есть проблемы.
Если пользоваться еще и МойСклад/1С, то этот модуль вообще не имеет смысла. Проще считать, что его нет, и заказывать разработку на стороне.
На самом деле так.
Уже вышла 4.9.2SP3 и в ней экспортный файл идет без выгрузки названия файла.
В лучших традициях 1С я начинаю бояться обновления до следующей версии…
Подскажите, пожалуйста, у кого реализована связка cs-cart - retailcrm - мойсклад? Расскажите об обработке заказа.
Остатки выгружаются из МС в cs-cart по commerceml, а также через icml в retailcrm. После размещения заказа на сайте он переносится в retailcrm и в МС. Где осуществляется смена статуса и отгрузки?
Меняется ли при этом статус автоматически в МС и cs-cart?