Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Модуль Модуль обмена для opencart v2.3 по стандарту CommerceML [Поддержка]


Recommended Posts

10 минут назад, stelstima сказал:

 

Сейчас так и сделано, но проблема в том, что нам нужны другие настройки, нам нужно выгружать все измененные заказы (кроме брошенных), без привязки к статусу и без смены статуса после выгрузки. Сейчас поставил "выгружать измененные", брошенные заказы выгружаются. Но не уверен последняя версия с вашими исправлениями или нет. 

Нам нужно это для синхронизации статусов между сайтом и 1с, и если на сайте в заказе вносятся корректировки, чтобы в 1с тоже изменялся заказ.

Надіслати
Поділитися на інших сайтах


не бесплатно

 

1с Розница 2.3
Сайт на OCstore 3.0
модуль на сайте - Обмен данными с 1C v8.x (Tesla-Chita)

 

Из 1С обмен товарами проходит без ошибок, в логах на сайте тоже все ок.
.xml на ftp приходят но не распаковываются автоматически.

 

Писал разработчику модуля,он ответил

 

Розница 2.3 не передаёт последний запрос на сайт .
Первый запрос, mode=checkauth -- авторизация
Второй запрос, mode=init -- запрос настроек для передачи
Третий запрос, mode=file + POST zip-файла. -- запрос на передачу файла для временного хранения
Последующие запросы, mode=import -- Импорт данных из файла xml

 

Помогите пожалуйста- отблагодарю
 

Надіслати
Поділитися на інших сайтах


6 часов назад, Oleg112233 сказал:

Розница 2.3 не передаёт последний запрос на сайт .

Не понял что автор имел ввиду, это значит что все "розницы" не умеют запускать обмен или что проблема в конкретно вашей базе?

Надіслати
Поділитися на інших сайтах


Модуль работает на версии CommerceML 2.07. Розница же работает скорее всего на версии CommerceML 2.08 и выше. Хотя в описании к модулю и написано, что он умеет понимать вплоть до CommerceML 2.10, но это не может быть правдой, т.к. начиная с версии CommerceML 2.08 уже обратно не совместимо с ранними версиями. У них разная структура, названия реквизитов .xml файла и 1С по-разному обрабатывает ответ с сайта. Во всяком случае для УТ 10.3 и модуле обмена данными Битрикс 4.0.5.1 (CommerceML 2.08) ситуация выглядит именно таким образом.

Надіслати
Поділитися на інших сайтах


17 часов назад, Gmp сказал:

Не понял что автор имел ввиду, это значит что все "розницы" не умеют запускать обмен или что проблема в конкретно вашей базе?

 

 

 

Не думаю что проблема именно в моей 1С

Змінено користувачем Oleg112233
Надіслати
Поділитися на інших сайтах


50 минут назад, CTPAX5000 сказал:

Модуль работает на версии CommerceML 2.07. Розница же работает скорее всего на версии CommerceML 2.08 и выше. Хотя в описании к модулю и написано, что он умеет понимать вплоть до CommerceML 2.10, но это не может быть правдой, т.к. начиная с версии CommerceML 2.08 уже обратно не совместимо с ранними версиями. У них разная структура, названия реквизитов .xml файла и 1С по-разному обрабатывает ответ с сайта. Во всяком случае для УТ 10.3 и модуле обмена данными Битрикс 4.0.5.1 (CommerceML 2.08) ситуация выглядит именно таким образом.

 

 

 У Меня 

 

 ВерсияСхемы=2.07

Надіслати
Поділитися на інших сайтах


29 minutes ago, Gmp said:

@d2boy Тут в теме упоминали что в некоторых конфигурациях 1С для Украины выгружается только главное изображение.

 

Спасибо, будем копать 1С, магазин в РФ

Надіслати
Поділитися на інших сайтах


17 hours ago, Oleg112233 said:

 

 

 У Меня 

 

 ВерсияСхемы=2.07

Это при выгрузке с сайта или при выгрузке из 1С? Попробуйте создать обмен в 1С с выгрузкой в локальную папку, и выложите сюда все что она отдает.

 

Только что посмотрел, в версии модуля 1.6.4.7 есть такая строчка

$product_feature_id = $this->addFeature($product_id, $data['feature_guid'], $data['ean'], $data['sku']);

Однако самой функции addFeature ни в одном файле модуля ПРОСТО НЕТ в наличии. Поэтому характеристики в OpenCart просто не попадают в базу данных. В версии модуля 1.6.4.5 есть такая функция, однако там логика поиска по характеристикам отличается от того, как задумано в 1.6.4.7. Кто разбирается немного в PHP - сможет вставить эту функцию, и, по идее, должно заработать. В моем проекте характеристики не  используются, поэтому я не имею возможности поэкспериментировать.

Вот код функции из версии 1.6.4.5:

	/**
	 * ver 3
	 * update 2017-12-20
	 */
	private function addFeature($product_id, $feature_guid, $ean = '', $sku = '') {

		$this->query("INSERT INTO `" . DB_PREFIX . "product_feature` SET `product_id` = " . $product_id . ", `guid` = '" . $this->db->escape($feature_guid) . "', `ean` = '" . $this->db->escape($ean) . "', `sku` = '" . $this->db->escape($sku) . "'");

		return $this->db->getLastId();

	} // addFeature()

Функция должна находиться в файле по пути admin\model\extension\exchange1c.php

Змінено користувачем CTPAX5000
  • +1 1
Надіслати
Поділитися на інших сайтах


On 11/6/2020 at 12:06 PM, stelstima said:

 

Сейчас так и сделано, но проблема в том, что нам нужны другие настройки, нам нужно выгружать все измененные заказы (кроме брошенных), без привязки к статусу и без смены статуса после выгрузки. Сейчас поставил "выгружать измененные", брошенные заказы выгружаются. Но не уверен последняя версия с вашими исправлениями или нет. 

 

Что бы выгружать все измененные заказы, кроме брошенных, нужно добавить фильтр по полю order_status_id в функцию public function queryOrdersExport(). Брошенные заказы имеют значение order_status_id=0.

			// Этот запрос будет использовать индексы поля date_modified
			$query = $this->query("SELECT `order_id`,`order_status_id` FROM `" . DB_PREFIX . "order` WHERE `date_modified` BETWEEN STR_TO_DATE('" . $from_date . "', '%Y-%m-%d %H:%i:%s') AND STR_TO_DATE('" . $to_date . "', '%Y-%m-%d %H:%i:%s')");

сюда добавить условие, что order_status_id<>0.

Функция находится в файле по пути admin\model\extension\exchange1c.php

 

Однако, я не совсем понимаю, зачем изменять заказы непосредственно в OpenCart, если можно эти обязанности возложить на 1С. Однако и в этом случае придется допиливать модуль обмена, поскольку у Автора логика выглядит следующим образом: Пришел заказ на сайт; выгрузили в 1С; изменили состав заказа в 1С (нет товара, или клиент решил заказать больше или меньше), выгрузили из 1С в ОС; получившуюся разницу в цене закинули в доставку. При этом состав товара, его количество в ОС уже не совпадает с данными в 1С. Поэтому в нашем случае, мы при загрузке обновленного заказа из 1С в ОС просто удаляем все товары из БД и записываем туда уже новые данные из файла обмена.

 

Так же, Что бы не вносить изменения в модуль обмена, можно использовать предложенный метод выгрузки заказов с определенным статусом после изменения в ОС, если вместе с изменениями заказу присваивать статус, указанный в настройках как выгружаемый.

 

Змінено користувачем CTPAX5000
  • +1 1
Надіслати
Поділитися на інших сайтах


9 часов назад, CTPAX5000 сказал:

Это при выгрузке с сайта или при выгрузке из 1С? Попробуйте создать обмен в 1С с выгрузкой в локальную папку, и выложите сюда все что она отдает.

 

Только что посмотрел, в версии модуля 1.6.4.7 есть такая строчка


$product_feature_id = $this->addFeature($product_id, $data['feature_guid'], $data['ean'], $data['sku']);

Однако самой функции addFeature ни в одном файле модуля ПРОСТО НЕТ в наличии. Поэтому характеристики в OpenCart просто не попадают в базу данных. В версии модуля 1.6.4.5 есть такая функция, однако там логика поиска по характеристикам отличается от того, как задумано в 1.6.4.7. Кто разбирается немного в PHP - сможет вставить эту функцию, и, по идее, должно заработать. В моем проекте характеристики не  используются, поэтому я не имею возможности поэкспериментировать.

Вот код функции из версии 1.6.4.5:


	/**
	 * ver 3
	 * update 2017-12-20
	 */
	private function addFeature($product_id, $feature_guid, $ean = '', $sku = '') {

		$this->query("INSERT INTO `" . DB_PREFIX . "product_feature` SET `product_id` = " . $product_id . ", `guid` = '" . $this->db->escape($feature_guid) . "', `ean` = '" . $this->db->escape($ean) . "', `sku` = '" . $this->db->escape($sku) . "'");

		return $this->db->getLastId();

	} // addFeature()

Функция должна находиться в файле по пути admin\model\extension\exchange1c.php

 

 

 

 

 

 

Вот что выгружает 1С

import0_1.xml offers0_1.xml

Надіслати
Поділитися на інших сайтах


В 10.11.2020 в 16:38, CTPAX5000 сказал:

 

Что бы выгружать все измененные заказы, кроме брошенных, нужно добавить фильтр по полю order_status_id в функцию public function queryOrdersExport(). Брошенные заказы имеют значение order_status_id=0.


			// Этот запрос будет использовать индексы поля date_modified
			$query = $this->query("SELECT `order_id`,`order_status_id` FROM `" . DB_PREFIX . "order` WHERE `date_modified` BETWEEN STR_TO_DATE('" . $from_date . "', '%Y-%m-%d %H:%i:%s') AND STR_TO_DATE('" . $to_date . "', '%Y-%m-%d %H:%i:%s')");

сюда добавить условие, что order_status_id<>0.

Функция находится в файле по пути admin\model\extension\exchange1c.php

 

Однако, я не совсем понимаю, зачем изменять заказы непосредственно в OpenCart, если можно эти обязанности возложить на 1С. Однако и в этом случае придется допиливать модуль обмена, поскольку у Автора логика выглядит следующим образом: Пришел заказ на сайт; выгрузили в 1С; изменили состав заказа в 1С (нет товара, или клиент решил заказать больше или меньше), выгрузили из 1С в ОС; получившуюся разницу в цене закинули в доставку. При этом состав товара, его количество в ОС уже не совпадает с данными в 1С. Поэтому в нашем случае, мы при загрузке обновленного заказа из 1С в ОС просто удаляем все товары из БД и записываем туда уже новые данные из файла обмена.

 

Так же, Что бы не вносить изменения в модуль обмена, можно использовать предложенный метод выгрузки заказов с определенным статусом после изменения в ОС, если вместе с изменениями заказу присваивать статус, указанный в настройках как выгружаемый.

 

 

Спасибо, попробуем сделать так.

По поводу изменения заказов. У нас опенкарт используется как фронтэнд для оформления заказов, не только тех, которые клиенты сами оформили на сайте, но и например менеджер туда же заводит заказы с вк/инстаграмма, и туда же сразу заводятся заказы с офлайн точки. Может спорное решение, но сделали так, чтобы у клиентов сохранялась их история покупок, плюс на готовых модулях реализовали всякие смс оповещения, отправку треков, что в 1с было бы сложнее. Заказы по ходу дела тоже изменяются в опенкарте, а в 1с автоматом меняется состав заказа. 1с используем только для администрирования (закуп, приходы, отчеты) и склад использует для инвентаризаций. 

Работа по такой схеме пока идет в тестовом режиме, если никаких подводных камней не всплывет, будет так и работать, или перейдем обратно полностью в 1с, а опенкарт только для заказов с сайта оставим.

Надіслати
Поділитися на інших сайтах


проблема такова что в товарах что в производителей , что сделать нужно... Получается когда товары или производители выгружаются на некоторых норм стоят " а в некоторых получается такая иероглифы выходят &QUOT; вместо " 

Помогите пожалуйста )

Надіслати
Поділитися на інших сайтах


56 минут назад, 26rus сказал:

проблема такова что в товарах что в производителей , что сделать нужно... Получается когда товары или производители выгружаются на некоторых норм стоят " а в некоторых получается такая иероглифы выходят &QUOT; вместо " 

Помогите пожалуйста )

я же вам уже предложил решение в теме которую вы создали. что не так?

Надіслати
Поділитися на інших сайтах


8 часов назад, Dimasscus сказал:

я же вам уже предложил решение в теме которую вы создали. что не так?

я не знаю как реализовать (( как??

Надіслати
Поділитися на інших сайтах


59 минут назад, 26rus сказал:

я не знаю как реализовать (( как??

вам в теме ответили. в шаблоне найдите переменную дескрипшен и перенесите в нужное вам место

Надіслати
Поділитися на інших сайтах


В 14.11.2020 в 05:58, 26rus сказал:

проблема такова что в товарах что в производителей , что сделать нужно... Получается когда товары или производители выгружаются на некоторых норм стоят " а в некоторых получается такая иероглифы выходят &QUOT; вместо " 

Помогите пожалуйста )

 

Вот тут это обсуждалось и вроде даже было решено, хоть не правильно. Но главное что заработало.

  • +1 1
Надіслати
Поділитися на інших сайтах


Спасибо за модуль

Но не понимаю как выгрузить товары с сайта в пустую базу 1с (ага, бывает и так)

И еще - при попытке вручную выгрузить заказы - вылетает с ошибкой 500

Это мне куда копать?

 

P.S. Не создалось поле middlename в таблице orders. Может поэтому? 

Змінено користувачем AlexGl
Надіслати
Поділитися на інших сайтах


1 час назад, AlexGl сказал:

Но не понимаю как выгрузить товары с сайта в пустую базу 1с (ага, бывает и так)

В этом модуле подобного функционала нет, т.к. в протоколе обмена с сайтом нет такой возможности (по крайней мере в стандартном).

Но, если товаров немного - вы можете набить их в заказ, выгрузить этот заказ, и новые товары появятся в 1С. В этом случае выгружаются только товары, без категорий, потому категории в 1С придется создать вручную, и вручную распихать товары по категориям.

Впрочем, если товаров не больше тысячи, сделать это реально, но придется потрудиться, а нажатием на одну кнопку.

 

Если нужно нажатием на одну кнопку - видел платные решения.

 

Еще как вариант, использовать стандартную внешнюю обработку загрузки из xls "ЗагрузкаДанныхИзТабличногоДокумента" - я такой пользовался в УТ 10.3 и КА1.1 (работает только на обычных формах). Разные умельцы с переменным успехом пытались адаптировать ее под платформу 8.3 и управляемые формы, но как показала практика - работает оно не всегда и не везде.

На новых конфигурациях типа УТ11 и КА2 мне удавалось запустить эту обработку с помощью некоторых "хаков" и загрузить номенклатуру предварительно выгруженную в эксель из опенкарта (но только если товары без опций), правда это было некоторое время назад (пару лет), как сейчас обстоят дела - не проверял, как-то не возникало такой необходимости.

Змінено користувачем Gmp
  • +1 2
Надіслати
Поділитися на інших сайтах


13 часов назад, Gmp сказал:

 

Вот тут это обсуждалось и вроде даже было решено, хоть не правильно. Но главное что заработало.

ну я там вставил 

$s = str_replace('"', '', $s);

и 

$s = html_entity_decode($s);

Ну проблема осталось :( кавычки вроде как бы и появились, ну в производителях товары все почему-то в этих иероглифах а не в новых!

Змінено користувачем 26rus
Надіслати
Поділитися на інших сайтах


вот так я делал ну без успешно это в производителях у меня у меня появляется если кавычки написать &QUOT; и в названиях товарах тоже самое....

	private function translit($s, $space = '-') {

		$s = html_entity_decode($s);
		$s = str_replace('"', '', $s);
		$s = (string) $s; // преобразуем в строковое значение
		$s = strip_tags($s); // убираем HTML-теги
		$s = str_replace(array('\n', '\r'), ' ', $s); // убираем перевод каретки
		$s = trim($s); // убираем пробелы в начале и конце строки
		$s = function_exists('mb_strtolower') ? mb_strtolower($s) : strtolower($s); // переводим строку в нижний регистр (иногда надо задать локаль)
		$s = strtr($s, array('а'=>'a','б'=>'b','в'=>'v','г'=>'g','д'=>'d','е'=>'e','ё'=>'e','ж'=>'j','з'=>'z','и'=>'i','й'=>'y','к'=>'k','л'=>'l','м'=>'m','н'=>'n','о'=>'o','п'=>'p','р'=>'r','с'=>'s','т'=>'t','у'=>'u','ф'=>'f','х'=>'h','ц'=>'c','ч'=>'ch','ш'=>'sh','щ'=>'shch','ы'=>'y','э'=>'e','ю'=>'yu','я'=>'ya','ъ'=>'','ь'=>''));
		$s = preg_replace('/[^0-9a-z-_ ]/i', '', $s); // очищаем строку от недопустимых символов
  		$s = preg_replace('/\s+/', ' ', $s); // удаляем повторяющие пробелы
		$s = str_replace(' ', $space, $s); // заменяем пробелы знаком минус
  		return $s; // возвращаем результат

	} // translit()

 

Змінено користувачем 26rus
Надіслати
Поділитися на інших сайтах


12 часов назад, Gmp сказал:

В этом модуле подобного функционала нет, т.к. в протоколе обмена с сайтом нет такой возможности (по крайней мере в стандартном).

Но, если товаров немного - вы можете набить их в заказ, выгрузить этот заказ, и новые товары появятся в 1С. В этом случае выгружаются только товары, без категорий, потому категории в 1С придется создать вручную, и вручную распихать товары по категориям.

 

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

Осталось победить ошибку 500. Не хочет выгружать заказы =(

 

Вообще ничего не понимаю - таблицы не созданы. Вручную все создавать - так я параметры таблицы не знаю, какие поля должны быть какими.

Змінено користувачем AlexGl
Надіслати
Поділитися на інших сайтах


15 часов назад, 26rus сказал:

Ну проблема осталось :( кавычки вроде как бы и появились, ну в производителях товары все почему-то в этих иероглифах а не в новых!

Я с этой проблемой столкнулся уже после общения тут на форуме, то что мы тут гадали - это ерунда. Проблема была ошибочном двойном экранировании вообще в других частях кода, но не могу вспомнить где именно.

 

14 часов назад, AlexGl сказал:

Осталось победить ошибку 500. Не хочет выгружать заказы =(

На днях может соберусь духом выложить сборку с очередными багфиксами, пару страниц назад я выкладывал версии с исправлениями известных ошибок (т.к. модуль который официальный - не рабочий). Нашел еще кучку косяков. Плохо что то что я выкладываю - теряется на страницах форума.

 

Цитата

Каждый раз когда захожу в модуль - пишет что он обновлен "Успешно обновлено до версии 1.6.4.7"

Это я тоже исправлял и выкладывал.

 

Змінено користувачем Gmp
  • +1 1
Надіслати
Поділитися на інших сайтах


  • dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка]

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.