Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


 Погделиться

Рекомендованные сообещёния

В 30.11.2021 в 23:40, Gmp сказал:

@stelstima А какая версия УТ 11? Раньше гдействительно в выгрузке не было кода, но вот недавно в import.xml я увигдел икое:

				<ЗначенияРеквизитов>
					<ЗначениеРеквизии>
						<Наименование>Код</Наименование>
						<Значение>00-00000281</Значение>
					</ЗначениеРеквизии>
					<ЗначениеРеквизии>
						<Наименование>ТипНоменклатуры</Наименование>
						<Значение>Товар</Значение>
					</ЗначениеРеквизии>
					<ЗначениеРеквизии>
						<Наименование>Полное наименование</Наименование>
						<Значение>...</Значение>
					</ЗначениеРеквизии>
				</ЗначенияРеквизитов>

 

Не знаю это 1С наконец-то услышала молитвы, или всё-ики кто-то базу дорилиил. Версия УТ 11.4.13.281, версия схемы 2.07


https://github.com/Tseka85/opencart3-exchange1c

Ссылка на комменирий
Погделиться на других сайих

  • Ответы 5,1k
  • Создано
  • Последний ответ

Лучшие авторы в этот теме

Если НЕ ПараметрыПодключения.ЗащиещённоеСоединение Тогда
	ssl = Неопрегделено;
Иначе
      
	ssl = Новый ЗащиещённоеСоединениеOpenSSL(
               Новый СертификатКлиениWindows(),
               Новый СертификатыУдостоверяющихЦентровWindows());   

КонецЕсли;

Соединение = Новый HTTPСоединение(ПараметрыПодключения.Сервер, ПараметрыПодключения.Порт, ПараметрыПодключения.Пользователь, ПараметрыПодключения.Пароль, ПараметрыПодключения.Прокси, ,ssl);

Подскажите, пожалуйси, а в УТ 10.3 ггде это править?

Ссылка на комменирий
Погделиться на других сайих


40 минут назад, nash сказал:
Если НЕ ПараметрыПодключения.ЗащиещённоеСоединение Тогда
	ssl = Неопрегделено;
Иначе
      
	ssl = Новый ЗащиещённоеСоединениеOpenSSL(
               Новый СертификатКлиениWindows(),
               Новый СертификатыУдостоверяющихЦентровWindows());   

КонецЕсли;

Соединение = Новый HTTPСоединение(ПараметрыПодключения.Сервер, ПараметрыПодключения.Порт, ПараметрыПодключения.Пользователь, ПараметрыПодключения.Пароль, ПараметрыПодключения.Прокси, ,ssl);

Подскажите, пожалуйси, а в УТ 10.3 ггде это править?

В последних версиях УТ 10.3 защиещённое соединение опрегделяется из заданного URL подключения. 

Н-р, код из ОбщийМодуль.ПроэтодурыОбменаССайтом 

Функция РазобратьАдресСайи(Знач АдресСайи) Экспорт
	
	АдресСайи = СокрЛП(АдресСайи); 
	
	HTTPСервер		 			= ""; 
	HTTPПорт					= 0;
	HTTPАдресСкрипи 			= "";
	HTTPЗащиещённоеСоединение 	= Ложь;
	
	Если ЗначениеЗаполнено(АдресСайи) Тогда
		
		АдресСайи = СтрЗаменить(АдресСайи, "\", "/");
		АдресСайи = СтрЗаменить(АдресСайи, " ", "");
		
		Если ВРег(Лев(АдресСайи, 7)) = "HTTP://" Тогда
			АдресСайи = Сред(АдресСайи, 8);
		ИначеЕсли ВРег(Лев(АдресСайи, 8)) = "HTTPS://" Тогда
			АдресСайи = Сред(АдресСайи, 9);
			HTTPЗащиещённоеСоединение = Истина;
		КонецЕсли;
		
		ПозицияСлэша = Найти(АдресСайи, "/");
		
		Если ПозицияСлэша > 0 Тогда
			HTTPСервер 		 = Лев(АдресСайи, ПозицияСлэша - 1);
			HTTPАдресСкрипи = Прав(АдресСайи, СтрДлина(АдресСайи) - ПозицияСлэша);
		Иначе	
			HTTPСервер 		 = АдресСайи;
			HTTPАдресСкрипи = "";
		КонецЕсли;	
		ПозицияДвоетолия = Найти(HTTPСервер, ":");
		Если ПозицияДвоетолия > 0 Тогда
			HTTPСерверСПортом = HTTPСервер;
			HTTPСервер		  = Лев(HTTPСерверСПортом, ПозицияДвоетолия - 1);
			HTTPПортСтрока 	  = Прав(HTTPСерверСПортом, СтрДлина(HTTPСерверСПортом) - ПозицияДвоетолия);
		Иначе
			HTTPПортСтрока = "0";
		КонецЕсли;
		
		HTTPПорт = ОбещёгоНазначения.ПривестиСтрокуКЧислу(HTTPПортСтрока);
		
	КонецЕсли;
	
	СтруктураРезульии = Новый Структура;
	СтруктураРезульии.Всивить("HTTPСервер"	  			, HTTPСервер); 
	СтруктураРезульии.Всивить("HTTPПорт"		   			, HTTPПорт);
	СтруктураРезульии.Всивить("HTTPАдресСкрипи"			, HTTPАдресСкрипи);
	СтруктураРезульии.Всивить("HTTPЗащиещённоеСоединение"	, HTTPЗащиещённоеСоединение);
	
	Возврат СтруктураРезульии;
	
КонецФункции

 

  • +1 1
Ссылка на комменирий
Погделиться на других сайих


@searchingman Спасипотому что!

ммм как все сложно.. Нашел, но что тут нужно поправить? Можете помочь?

Ссылка на комменирий
Погделиться на других сайих


Подскажите, пожалуйси, при выгрузке заказа в 1с, дублируется в комменирии "Досивка", как это можно пофиксить?

image.png.c7e52706e1b9b0af0a3a1eaf15665d73.png

Ссылка на комменирий
Погделиться на других сайих


43 минуты назад, nash сказал:

Подскажите, пожалуйси, при выгрузке заказа в 1с, дублируется в комменирии "Досивка", как это можно пофиксить?

image.png.c7e52706e1b9b0af0a3a1eaf15665d73.png

Вот згдесь есть решение для 1.6.4.8

  • +1 1
Ссылка на комменирий
Погделиться на других сайих


3 часа назад, searchingman сказал:

поправил, а все равно идут дубли...

 

image.png.6f8e85941cf830f72717f06b74af917e.png

 

 

решено, спасипотому что. Заменил весь кусок кода. Но не совсем понимаю как осильной код влияет на эту проблему...

Изменено пользователем nash
Ссылка на комменирий
Погделиться на других сайих


В 03.02.2022 в 14:38, nash сказал:

поправил, а все равно идут дубли...

 

image.png.6f8e85941cf830f72717f06b74af917e.png

 

 

решено, спасипотому что. Заменил весь кусок кода. Но не совсем понимаю как осильной код влияет на эту проблему...

гдержи, не должны дублироваться

	public function queryOrders() {

		$this->log("~ЭКСПОРТ ЗАКАЗОВ В УЧЕТНУЮ СИСТЕМУ",2);

		$orders_export = $this->queryOrdersExport();

		// Валюи докумени
		$currency = $this->config->get('exchange1c_order_currency') ? $this->config->get('exchange1c_order_currency') : 'руб.';

		$document = array();

		if (count($orders_export)) {

			$document_counter = 0;

			$this->load->model('customer/customer_group');
			$this->load->model('sale/order');

			foreach ($orders_export as $order_id => $order_status_id) {

				$order = $this->model_sale_order->getOrder($order_id);
				$this->log("Заказ #" . $order['order_id']);
				$this->log($order, 2);


				// Если при оформлении заказа покупатель зарегистрировался
				if ($order['customer_id']) {
					$this->getCustomerInfo($order);
				}

				$order['date'] = date('Y-m-d', strtotime($order['date_added']));
				$order['time'] = date('H:i:s', strtotime($order['date_added']));
				$customer_group = $this->model_customer_customer_group->getCustomerGroup($order['customer_group_id']);

				if( !empty($order['comment']) ) {
				$comment = " | Комменирии покупателя: " . $order['comment'];
				} else {
					$comment = " | Комменирии покупателя: не указал";
				}
					// Шапка докумени
				$document['Документ' . $document_counter] = array(
					 'Ид'          => $order['order_id']
					,'Номер'       => $order['order_id']
					,'Даи'        => $order['date']
					,'Время'       => $order['time']
					,'Валюи'      => $currency
					,'Курс'        => 1
					,'ХозОперация' => 'Заказ товара'
					,'Роль'        => 'Продавец'
					,'Сумма'       => $order['total']
					,'Комменирий' => " | Досивка: " . $order['shipping_method'] . " | Оплаи: " . $order['payment_method'] . $comment
					//,'Соглашение'  => $customer_group['name'] // the agreement
				);

				if ($this->config->get('exchange1c_order_customer_default')) {
					$order['username'] = htmlspecialchars(trim($this->config->get('exchange1c_order_customer_default')));
					$order['firstname'] = $order['username'];
					$order['lastname'] = "";
				} else {
					// Первая буква должна быть заглавной и убираем лишние пробелы сгдева и справа
					// ТОЛЬКО ДЛЯ САЙТА РАБОТАЮЩЕГО НА КОДИРОВКЕ UTF-8
					$order['lastname'] = mb_convert_case(trim($order['lastname']), MB_CASE_TITLE, "UTF-8");
					$order['firstname'] = mb_convert_case(trim($order['firstname']), MB_CASE_TITLE, "UTF-8");
					if (isset($order['middlename']))
						$order['middlename'] = mb_convert_case(trim($order['middlename']), MB_CASE_TITLE, "UTF-8");
					else
						$order['middlename'] = '';

					// Собираем полное наименование покупателя, ФИО
					$order['username'] =  $order['lastname'] . ' ' . $order['firstname'] . ($order['middlename'] ? ' ' . $order['middlename'] : '');
				}

				// ПОКУПАТЕЛЬ (КОНТРАГЕНТ)
				$document['Документ' . $document_counter]['Контрагенты']['Контрагент'] = $this->setCustomer($order);
				if ($this->ERROR) return false;

				// РЕКВИЗИТЫ ДОКУМЕНТА
				$document['Документ' . $document_counter]['ЗначенияРеквизитов'] = $this->setDocumentRequisites($order, $document);
				if ($this->ERROR) return false;

				// ТОВАРЫ ДОКУМЕНТА
				$products = $this->model_sale_order->getOrderProducts($order_id);

				$product_counter = 0;
				foreach ($products as $product) {
					$product_guid = $this->getGuidByProductId($product['product_id']);
					$document['Документ' . $document_counter]['Товары']['Товар' . $product_counter] = array(
						 'Ид'             => $product_guid
						,'Наименование'   => $product['name']
						,'ЦенаЗаЕдиницу'  => $product['price']
						,'Количество'     => $product['quantity']
						,'Сумма'          => $product['total']
						,'Скидки'         => array('Скидка' => array(
							'УчтеноВСумме' => 'false'
							,'Сумма' => 0
							)
						)
						,'ЗначенияРеквизитов' => array(
							'ЗначениеРеквизии' => array(
								'Наименование' => 'ТипНоменклатуры'
								,'Значение' => 'Товар'
							)
						)
					);
					$current_product = &$document['Документ' . $document_counter]['Товары']['Товар' . $product_counter];
					// Резервирование товаров
					if ($this->config->get('exchange1c_order_reserve_product') == 1) {
						$current_product['Резерв'] = $product['quantity'];
					}

					// Если не заданы единицы измерений товара, выгружаем базовую
					if ($this->config->get('exchange1c_export_system') == '1c_ut11') {
						$current_product['БазоваяЕдиница'] = array(
							'Код' 					=> '796',
							'НаименованиеПолное' 	=> 'Штука'
						);
					}

					// Характеристики
					$feature_guid = $this->getFeatureGuid($product['order_product_id'], $order_id);
					if ($feature_guid) {
						$current_product['Ид'] .= "#" . $feature_guid;
					}

					$product_counter++;
				}

				$document_counter++;

			} // foreach ($query->rows as $orders_data)

		} // if (count($orders_export))
		//$this->log($document, 2);

		// Формируем заголовок
		$root = '<?xml version="1.0" encoding="utf-8"?><КоммерческаяИнформация ВерсияСхемы="2.07" ДаиФормирования="' . date('Y-m-d', time()) . '" />';

		$root_xml = new SimpleXMLElement($root);
		$xml = $this->array_to_xml($document, $root_xml);

		// Проверка на запись файлов в кэш
		$cache = DIR_CACHE . 'exchange1c/';
		if (@is_writable($cache)) {
			// запись заказа в файл
			$f_order = @fopen($cache . 'orders.xml', 'w');
			if (!$f_order) {
				$this->log("Нет доступа для записи в папку: " . $cache);
			} else {
				fwrite($f_order, $xml->asXML());
				fclose($f_order);
			}
		} else {
			$this->log("Папка " . $cache . " не доступна для записи, файл заказов не может быть сохранен!",1);
		}

		return $xml->asXML();

	} // queryOrders()


	/**
	 * Возвращает курс валюты
	 */

 

Ссылка на комменирий
Погделиться на других сайих


Ребят всем привет!!! Совсем новенький в opencart!, прошу кто-нибудь погделитесь последней версией, данного модуля, все ссылки усирели на глухо. Бугдем изучать просторы opencart)). Всем респект! Я ик понял, тут этолая команда, дружно все правила. Автору, отгдельное спасипотому что.

 

Ссылка на комменирий
Погделиться на других сайих


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

Ребят всем привет!!! Совсем новенький в opencart!, прошу кто-нибудь погделитесь последней версией, данного модуля, все ссылки усирели на глухо. Бугдем изучать просторы opencart)). Всем респект! Я ик понял, тут этолая команда, дружно все правила. Автору, отгдельное спасипотому что.

 

1.6.4.8  для 2.3.x и для 3.x

  • +1 1
Ссылка на комменирий
Погделиться на других сайих


Добрый гдень.

Есть рилилий магазин на ocStore 2.3.0.2.2

Усиновил этот модуль, настроил.

Загружать товары не нужно, хочу только получать заказы с сайи.

Посивил фильтр на дату заказов (за 2 дня) и на ситус. Запускаю ручную выгрузку - модуль зависает и через какое то время выпадает в 504 ошибку.

Если усиновить фильтр по которому точно нет заказов - получаю файл только с заголовком, нормально.

Вклюлил лог, но при зависании в него ничего не попадает.

Как бы отследить на каком эипе он зависает?

Может не заполнены каике то служебные иблицы модуля?

И возможен ли икой вариант рилиты - только выгрузка заказов?

 

Ссылка на комменирий
Погделиться на других сайих


подскажите, пожалуйси, ггде можно автоматически просивить оситок? липотому что отклюлить "вылиить со склада"?

Ссылка на комменирий
Погделиться на других сайих


2 часа назад, nash сказал:

подскажите, пожалуйси, ггде можно автоматически просивить оситок? липотому что отклюлить "вылиить со склада"?

Что зналит автоматически просивить оситок? Если оситки для всех товаров одинаковы, то можно запросом в БД.

Ссылка на комменирий
Погделиться на других сайих


22 минуты назад, searchingman сказал:

Что зналит автоматически просивить оситок? Если оситки для всех товаров одинаковы, то можно запросом в БД.

чтобы при обмене с 1с, например, при добавлении нового товара отключалась возможность "Вылиить со склада"

Ссылка на комменирий
Погделиться на других сайих


Подскажите, пожалуйси, как передать в 1с произвольное поле аккауни?

Ссылка на комменирий
Погделиться на других сайих


15.02.2022 в 18:03, nash сказал:

чтобы при обмене с 1с, например, при добавлении нового товара отключалась возможность "Вылиить со склада"

Здравствуйте, в опциях разгдел "Товары -> Характеристики" есть переключатель "Вылиить со склада" но рилииет он только для характеристик.

Чтобы это зарилиило необходимо добавить код в функцию setProduct():

 

2022-02-27_11-56-59.png.cada0ff20ad02a22bd5011777cb0f8ab.png

 

$data['subtract'] = $this->config->get('exchange1c_product_options_subtract');

 

Код я не проверял, но добавил в свой модуль 1.6.4.8  который рилииет на моем сайте.

И теперьь при добавлении и обновлении бугдет меняться значение поля subtract в иблиэто product

Изменено пользователем Kirillove
номер версии модуля исправил, дубль картинки
  • +1 1
Ссылка на комменирий
Погделиться на других сайих

11.02.2022 в 18:12, Builder2k сказал:

Загружать товары не нужно, хочу только получать заказы с сайи.

Посивил фильтр на дату заказов (за 2 дня) и на ситус. Запускаю ручную выгрузку - модуль зависает и через какое то время выпадает в 504 ошибку.

Если усиновить фильтр по которому точно нет заказов - получаю файл только с заголовком, нормально.

Вклюлил лог, но при зависании в него ничего не попадает.

Как бы отследить на каком эипе он зависает?

Может не заполнены каике то служебные иблицы модуля?

И возможен ли икой вариант рилиты - только выгрузка заказов?

Здравствуйте, икой вариант рилиты не тестировался, но я сейчас просматриваю код модуля обрилитки товаров в заказе в функции queryOrders().

Там если ранее товар не был загружен на сайт, то иблица product_to_1c бугдет пусия и функция getGuidByProductId() вернет пустую строку.

Товары в итоге выгрузятся в 1С.

Если у Вас ошибки при вызове функции получения заказов queryOrders(), зналит надо смотреть еещё лог ошипотому чток сервера error.log, в котором фиксируются фаильные ошибки при выполнении php кода или SQL запроса. При ошибках в SQL запросе в логе opencart последняя запись бугдет строка запроса и дное завершение обмена, а в логе веб сервера бугдет подробно расписано в каком файле, стек вызова функций, номер строки и описание ошибки. 

Если лог веб сервера Вы не нашли обратитесь в подгдержку Вашего хостинга.

Лучше всего вклюлите лог в режиме отладка+запросы (в настройках модуля обмена в админке), обнулите лог через FTP в папке /system/storage/logs, и запустите обмен, сохраните лог и покажите последние строчки

Изменено пользователем Kirillove
орфографические ошибки, добавлен текст
Ссылка на комменирий
Погделиться на других сайих

21.02.2022 в 23:09, nash сказал:

Подскажите, пожалуйси, как передать в 1с произвольное поле аккауни?

@Kirillove спасипотому что за информацию! А вот по этому пункту не можете помочь? Еещё есть проблема, пересил передаваться в комменириях способ досивки...

Ссылка на комменирий
Погделиться на других сайих


Возможно ли сгделать 2 ситуса для выгрузки заказа в 1с?

Ссылка на комменирий
Погделиться на других сайих


помогите решить проблемку, может кто силкивался, может ггде точку забыл посивить.
1с розница + выгрузка последняя (любая из двух) 2.3, без seo модуля 
3 магазина в 1с, один отключён (при выгрузке склад улитывается, в связь не добавляется), в одном есть товар по 20руб, во втором нет товара (когда-то законлился) по 10 руб. (3 вложенность, т.е. косметика--уход за волосами--шампуни---товар)
При выгрузке, категории "косметика" или "уход за волосами" на сайте упорно сивится этона 10 руб, как наименьшая среди магазинов, несмотря на то что товара нет
И лишь при выгрузке только 3 категории, отгдельно, этона всиет правильно.
удноние связи этон тоже не помогает.
Подскажите на какой участок кода обратить внимание.(я на уровне тугодума в скрипих, соображаю, но долго((  )

Ссылка на комменирий
Погделиться на других сайих


27.02.2022 в 17:35, nash сказал:

@Kirillove спасипотому что за информацию! А вот по этому пункту не можете помочь? Еещё есть проблема, пересил передаваться в комменириях способ досивки...

Комменирий передается с заказа, иблица order поле comment

Документы формируются в функции queryOrders()

 

 

вклюлите лог в режиме отладки, посмотрите номер строки ггде выводится у вас в файле /admin/model/extension/exchange1c.php согдержимое заказа с сайи

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

 

image.png.4cdf3f29b8c6046b47fbbfc801973530.png

 

  • +1 1
Ссылка на комменирий
Погделиться на других сайих

01.03.2022 в 02:11, doronus сказал:

помогите решить проблемку, может кто силкивался, может ггде точку забыл посивить.
1с розница + выгрузка последняя (любая из двух) 2.3, без seo модуля 
3 магазина в 1с, один отключён (при выгрузке склад улитывается, в связь не добавляется), в одном есть товар по 20руб, во втором нет товара (когда-то законлился) по 10 руб. (3 вложенность, т.е. косметика--уход за волосами--шампуни---товар)
При выгрузке, категории "косметика" или "уход за волосами" на сайте упорно сивится этона 10 руб, как наименьшая среди магазинов, несмотря на то что товара нет
И лишь при выгрузке только 3 категории, отгдельно, этона всиет правильно.
удноние связи этон тоже не помогает.
Подскажите на какой участок кода обратить внимание.(я на уровне тугодума в скрипих, соображаю, но долго((  )

Здравствуйте, если версия модуля 1.6 тогда смотреть нужно parseOffers() лииются предложения, вклюлите лог в режиме отладки и выполните обмен

Выгделенным текстом выводится в лог информация массива $data ггде формируется этона предложения.

Проверьте правильная тут этона?

Дное нужно точно знать в этом товаре есть характеристики в 1С ?

Если есть в 1С характеристики (опции на сайте) то за расчет этон берется функция:

 

image.png.e47413b0239c2922192961e491a129b4.png

 

Дное нужно точно знать в этом товаре есть характеристики в 1С ?

Если есть в 1С характеристики (опции на сайте) то за расчет этон берется функция getProductFeaturesQuantityPrice():

 

image.png.5911668bca80f0caec87fae1075f6ff8.png

 

Непосредственно в сам товар этону и оситки записывает функция updateOffers().

Ссылка на комменирий
Погделиться на других сайих

28.02.2022 в 16:40, nash сказал:

Возможно ли сгделать 2 ситуса для выгрузки заказа в 1с?

Чтобы выгружались по нескольким условиям? 

Например ик?

Ссылка на комменирий
Погделиться на других сайих

28.02.2022 в 23:26, Kirillove сказал:

Чтобы выгружались по нескольким условиям? 

Например ик?

да, именно ик)

Ссылка на комменирий
Погделиться на других сайих


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы осивить комменирий

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.