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

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


Recommended Posts

В 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

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

Если НЕ ПараметрыПодключения.ЗащищенноеСоединение Тогда
	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.thumb.png.8026587659d856dd6de2c3732fd3de31.png

 

image.png.6f8e85941cf830f72717f06b74af917e.png

 

 

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

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


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

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

image.thumb.png.8026587659d856dd6de2c3732fd3de31.png

 

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с, например, при добавлении нового товара отключалась возможность "Вычитать со склада"

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


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

image.thumb.png.1747d089a3c0a908e204dfc9e5df5f01.png

Змінено користувачем 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 спасибо за информацию! А вот по этому пункту не можете помочь? Еще есть проблема, перестал передаваться в комментариях способ доставки...

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


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

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


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

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

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

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

 

image.thumb.png.77efba8c23cbac75fa1d0caf5a69d0a5.png

 

включите лог в режиме отладки, посмотрите номер строки где выводится у вас в файле /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с?

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

Например так?

image.thumb.png.369134611e79d250988eb7ed68e1cd3c.png

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

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

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

Например так?

image.thumb.png.369134611e79d250988eb7ed68e1cd3c.png

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

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


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

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

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

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

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

Вхід

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

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

Important Information

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