maxpoletaev / opencart-exchange1c

[deprecated] Data exchange with 1C for OpenCart
http://zenwalker.ru/lab/opencart-exchange1c
104 stars 91 forks source link

Передача статуса заказа #23

Closed Class365 closed 10 years ago

Class365 commented 10 years ago

При интеграции с OpenCart и формировании файла orders.xml не передаются статусы заказа. Возможно ли реализовать передачу статуса согласно протокола CommerceML? Результат xml файла следующий

<ЗначенияРеквизитов> <ЗначениеРеквизита> <Наименование>Статус заказа</Наименование> <Значение>В обработке</Значение> </ЗначениеРеквизита> </ЗначенияРеквизитов>

sgtpep commented 9 years ago

Не подскажете, тикет закрыт по причине исправления или по причине ненужности?

kharkevich commented 9 years ago

Вот так - http://i.imgur.com/Cb9UHsc.png

Class365 commented 9 years ago

Проблема решена своими силами. в admin/model/tool/exchange1c.php http://prntscr.com/5upb7p

//Статус $order_status = $this->model_sale_order->getOrderStatus($orders_data['order_id']);

                $document['Документ' . $document_counter]['ЗначенияРеквизитов'] = array(
                        'ЗначениеРеквизита'  => array(
                            'Наименование' => 'Статус заказа',
                            'Значение'=> $order_status,
                        )   

                    );   

и добавление в vqmod/xml/exchange1c.xml в конце

  <file name="admin/model/sale/order.php">
    <operation>
        <search position="replace"><![CDATA[public function getTotalOrdersByStoreId($store_id) {]]></search>
        <add><![CDATA[    public function getOrderStatus($order_id) {
    $order_status_id = $this->db->query("SELECT order_status_id FROM `" . DB_PREFIX . "order` WHERE order_id = '" . (int)$order_id . "'");
//    var_dump($order_status_id);
    $order_status = $this->db->query("SELECT name FROM `" . DB_PREFIX . "order_status` WHERE order_status_id = " . $order_status_id->row['order_status_id'] . " AND language_id = '" . (int)$this->config->get('config_language_id') . "'");

    return $order_status->row['name'];
}    

public function getOrderPay($order_id) {
    $pay_status = $this->db->query("SELECT payment_method FROM `" . DB_PREFIX . "order` WHERE order_id = '" . (int)$order_id . "'");

    return $pay_status->row['payment_method'];
}    

public function getOrderShipping($order_id) {
    $pay_status = $this->db->query("SELECT shipping_method FROM `" . DB_PREFIX . "order` WHERE order_id = '" . (int)$order_id . "'");

    return $pay_status->row['shipping_method'];
}    

public function getTotalOrdersByStoreId($store_id) {]]></add>
    </operation>
</file>
sgtpep commented 9 years ago

@Class365 Спасибо! Но "ЗначениеРеквизита" c наименованием "Статус заказа" никак не влияет на статус заказа в 1С (даже с заданием соответствий статусов в настройках обмена).

Много погуглил на этот счет. Пишут, что этот реквизит вообще игнорируется, а статус 1С выставляет на основе некоторых эвристик, которые экспериментально люди вывели. Но у меня воспроизвести их пока не получилось: http://dev.1c-bitrix.ru/community/forums/messages/forum26/topic54418/message290625/#message290625 http://1c.1c-bitrix.ru/support/forum/messages/forum26/topic45098/message330122/#message330122

Class365 commented 9 years ago

Странно. Этот тег присутствует в стандартной документации CommerceML http://v8.1c.ru/edi/edi_stnd/131/to.xml

Поэтому мы его обрабатываем. CRM, с которыми интегрирован Класс365, также передают этот параметр. http://class365.ru/internet-magaziny#imlist