Дело в том, что при заказе товара не всегда создается профиль покупателя (если пользователь не регистрировался на сайте), а просто прописывается в заказе статично.
А при выгрузке в 1с создается контрагент, далее уже при следующем обновлении осуществляется поиск контрагента на сайте, а его там нет (ибо пользователь не регистрировался).
Решение:
в admin/model/extension/exchange1c.php
Удалить:
/**
* ver 2
* update 2017-04-05
* Контрагент
* Получает ID покупателя и адреса
*/
private function parseDocumentCustomer($xml, &$doc) {
if (!$xml) {
$this->ERROR = "parseDocumentCustomer() - Нет данных в XML";
return false;
}
$doc['customer_id'] = 0;
$doc['address_id'] = 0;
$customer_name = (string)$xml->Контрагент->Наименование;
$customer_name_split = explode(" ", $customer_name);
//$this->log($customer_name_split,2);
$lastname = isset($customer_name_split[0]) ? $customer_name_split[0] : "";
$firstname = isset($customer_name_split[1]) ? $customer_name_split[1] : "";
// поиск покупателя по имени получателя
if (!$doc['customer_id']) {
$query = $this->query("SELECT `address_id`,`customer_id` FROM `" . DB_PREFIX . "address` WHERE `firstname` = '" . $this->db->escape($firstname) . "' AND `lastname` = '" . $this->db->escape($lastname) . "'");
if ($query->num_rows) {
$doc['customer_id'] = $query->row['customer_id'];
$doc['address_id'] = $query->row['address_id'];
}
}
// поиск покупателя по имени
if (!$doc['customer_id']) {
$query = $this->query("SELECT `customer_id` FROM `" . DB_PREFIX . "customer` WHERE `firstname` = '" . $this->db->escape($firstname) . "' AND `lastname` = '" . $this->db->escape($lastname) . "'");
if ($query->num_rows) {
$doc['customer_id'] = $query->row['customer_id'];
}
}
if (!$doc['customer_id']) {
$this->ERROR = "parseDocumentCustomer() - Покупатель '" . $customer_name . "' не найден в базе";
return false;
}
$this->log("Покупатель в документе прочитан",2);
return true;
} // parseDocumentCustomer()
и
$this->parseDocumentCustomer($xml->Контрагенты, $doc);
if ($this->ERROR) return;
Перед этих сделать бэкап