Модификация плагина 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
Что-то грустно, никто не может помочь?
Если актуально пишите.