Для товаров с вариациями сложнее, нужно external_id вариации добавлять в XmlId после external_id основного товара через хэштег #. Пусть этим займутся разработчики.
Добавить productName тоже несложно по аналогии с XmlId как написал выше.
В том и дело, основные сложности с вариациями.
Предыдущий код кривой.
Вот нормальный.
-
app/addons/yml_export/Tygh/Ym/Offers/Base.php не трогаем.
-
app/addons/retailcrm/Tygh/Addons/Retailcrm/Ym/Offers/Simple.php
public function gatherAdditional($product)
{
parent::gatherAdditional($product);//$this->schema[] = 'purchasePrice'; // @fm $this->schema[] = 'xmlId'; $this->schema[] = 'productName'; $this->offer['attr'] = array_merge($this->offer['attr'], self::getRetailCrmOfferAttributes($product)); $this->offer['items'] = $this->getRetailCrmOfferItem($this->offer['items'], $product); return true;
}
…
public static function getRetailCrmOfferItem($offer_item, $product)
{
if (!empty($product[‘yml2_purchase_price’])) {
$offer_item[‘purchasePrice’] = $product[‘yml2_purchase_price’];
}
if (empty($offer_item['name'])) {
$offer_item['name'] = $product['product'];
}
if (empty($offer_item['productName'])) {
$offer_item['productName'] = $product['product'];
}
if (!empty($product['external_id'])) {
$offer_item['xmlId'] = $product['external_id'];
}
$param = array(
'attr' => array(
'name' => 'Артикул',
'code' => 'article'
),
'value' => $product['product_code']
);
$offer_item['param'][] = $param;
return $offer_item;
}
-
app/addons/retailcrm/Tygh/Addons/Retailcrm/Ym/Offers/Vendor.php
public function gatherAdditional($product)
{
parent::gatherAdditional($product);// @fm_mod //$this->schema[] = 'purchasePrice'; if (!in_array('name', $this->schema)) { $this->schema[] = 'name'; } if (!in_array('productName', $this->schema)) { $this->schema[] = 'productName'; } if (!in_array('xmlId', $this->schema)) { $this->schema[] = 'xmlId'; } $this->offer['attr'] = array_merge($this->offer['attr'], Simple::getRetailCrmOfferAttributes($product)); $this->offer['items'] = Simple::getRetailCrmOfferItem($this->offer['items'], $product); return true;
}
Будете героем недели, если еще покажете всем, как передавать верный айди при выгрузке заказа в retalCRM))
Вот тут было предположение:
app\addons\retailcrm\Tygh\Addons\Retailcrm\Converters\OrderConverter.php
$item = array(
‘initialPrice’ => $original_price,
‘quantity’ => (float) $product[‘amount’],
‘discount’ => $discount,
‘productName’ => $product[‘product’],
‘product_id’ => $product[‘product_id’],
‘offer’ => array(
‘externalId’ => $product[‘product_id’],
// @fm_mod
‘xmlId’ => $product[‘external_id’]
)
);
Работоспособно ли на настоящее время это решение? Или в свете вышедших обновлений уже не актуально? Т.к. попробовал у себя - нет 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;
}
Еще заметил неприятный момент: при создании заказа в RetailCRM, не срабатывает генерация купонов в CS-Cart… Кто-Нибудь знает как поправить?
По словам техподдержки, с версии 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С я начинаю бояться обновления до следующей версии…
Мой коллега ответил в вашем тикете в Help desk. Проблема была вызвана модификацией в файлах модуля RetailCRM в вашей установке
Добрый день.
Подскажите, пожалуйста, у кого реализована связка cs-cart - retailcrm - мойсклад? Расскажите об обработке заказа.
Остатки выгружаются из МС в cs-cart по commerceml, а также через icml в retailcrm. После размещения заказа на сайте он переносится в retailcrm и в МС. Где осуществляется смена статуса и отгрузки?
Меняется ли при этом статус автоматически в МС и cs-cart?
По докам RCRM: Интеграция сайта с МойСклад должна быть односторонней. То есть получаем остатки товаров из МС, но вот заказы отправляем только в RCRM.
RetailCRM <-> CS-Cart
МойСклад <- CS-Cart
RetailCRM <-> МойСклад
RCRM уже самостоятельо отправит заказы в МС.
В модуле интеграции RCRM - МС настройте соответствие статусов и там где-то есть пункт, в каком статусе создавать отгрузку.