Модификация плагина 1С (CommerceML)

Бюджет: По договоренности

В ходе подключения магазина к системе учета Мой Склад (МС) товар был загружен сопоставлен через внешние коды через выгрузку из магазина csv. Товары с 1 артикулом были загружены с внешним кодом код_товара, товары с несколькими артикулами были загружены как единичные с последующей дозагрузкой модификаций, для остновных артикулов внешний код модификации назначен код_товара, для остальных код_артикула, разумеется они были привязаны к товарам при загрузке через код_товара. Для обмена данными установлен плагин плагина 1С (CommerceML).

В настройках указаны варианты экспорта идентификаторов артикулов в составе заказа:

  1. Всегда полный формат из двух частей (для МойСклад)

abc#abc — формат для основного артикула товара (обе части идентификатора совпадают)

abc#def — формат для остальных артикулов (части идентификатора не совпадают)

  1. Компактный формат (для «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 ответа

Откликнуться на заказ

Отклики на заказы могут добавлять только зарегистрированные эксперты и разработчики Webasyst. Стать экспертом.

Чтобы добавить комментарий, зарегистрируйтесь или войдите