Модификация плагина 1С (CommerceML)
В ходе подключения магазина к системе учета Мой Склад (МС) товар был загружен сопоставлен через внешние коды через выгрузку из магазина csv. Товары с 1 артикулом были загружены с внешним кодом код_товара, товары с несколькими артикулами были загружены как единичные с последующей дозагрузкой модификаций, для остновных артикулов внешний код модификации назначен код_товара, для остальных код_артикула, разумеется они были привязаны к товарам при загрузке через код_товара. Для обмена данными установлен плагин плагина 1С (CommerceML).
В настройках указаны варианты экспорта идентификаторов артикулов в составе заказа:
- Всегда полный формат из двух частей (для МойСклад)
abc#abc — формат для основного артикула товара (обе части идентификатора совпадают)
abc#def — формат для остальных артикулов (части идентификатора не совпадают)
- Компактный формат (для «1С»)
abc — формат для основного артикула товара (экспортируется только первая часть идентификатора)
abc#def — формат для остальных артикулов (экспортируются обе части идентификатора)
Был выбран 1й вариант, т.к. при 2м основной артикул товара с несколькими артикулами сопоставлялся не правильно. В ходе тестирования выяснилось, что в таком формате товары с множественными артикулами при загрузке заказов в МС определяются корректно получая внешний код формата код_товара#код_товара или код_товара#код_артикула, при загрузке заказов состоящих из простых товаров МС создает лишний артикул, т.к. получает внешний код формата код_товара#код_товара.
Предполагаю, что если плагин будет отдавать внешние коды товаров в заказе по первому варианту при наличии более 1го артикула у товара, а при наличии лишь 1го артикула по 2му, это решит проблему. Если я ошибаюсь, прошу поправить.
В результате разбора плагина в файле shopCml1cPluginBackendRun.controller.php по пути /wa-apps/shop/plugins/cml1c/lib/actions/backend/ найдены следующие функции, вероятно отвечающий за формирование внешнего кода:
стр. 6987
private function formatGuid($id, $extra_id = null) { static $strategy = null; if ($strategy === null) { $strategy = $this->pluginSettings('guid_format'); if (empty($strategy)) { $strategy = 'full'; } } if (strpos($id, '#')) { list($id, $extra_id) = explode('#', $id, 2); } if (empty($extra_id)) { $extra_id = $id; } if (($strategy === 'full') || ($id != $extra_id)) { $uuid = $id.'#'.$extra_id; } else { $uuid = $id; } return $uuid; }
стр. 7033
private static function getGuid($data, $default = null) { if (!is_array($data)) { return empty($data) ? $default : $data; } elseif (isset($data['id_1c'])) { return ifempty($data['id_1c'], $default); } elseif (isset($data['cml1c_id'])) { return ifempty($data['cml1c_id'], $default); } else { return $default; } }
Часть кода, вероятно отдающую информацию о товаре в заказе:
стр. 3671
private function writeOrderItem($product, $discount_rate, $tax, $rate = 1.0) { #prepare static $features = array(); if ($discount_rate > 0) { $product['discount'] = $discount_rate * $product['price']; } $product['total'] = $product['quantity'] * ($product['price'] - ifset($product['discount'], 0)); if (!empty($product['tax']) && empty($product['tax_included'])) { $product['total'] += $product['tax']; } #add element $this->writer->startElement('Товар'); if (!empty($product['_deleted_'])) { $this->writer->writeAttribute('Статус', 'Удален'); } $uuid = self::getGuid($product, '-'); $this->writer->writeElement('Ид', $this->formatGuid($uuid)); if (!empty($product['sku_code'])) { $this->writer->writeElement('Артикул', $product['sku_code']); }
Контакты
Дмитрий
sinitsadg@gmail.com
+79266155966
Эта тема в архиве. Добавление комментариев к ней отключено.
3 отклика
Готов помочь, пишите 79504438902@ya.ru или звоните 89504438902 , Скайп: staradmin2, Viber, WatsApp , Telegram, 89504438902
Что-то грустно, никто не может помочь?
Если актуально пишите.