yous
@yous

BITRIX обмен заказами, товары криво попадают в заказ из 1С?

отвечу сам себе))

UDP1. проблема заключается в том, что на сайте 2 каталога товаров для разных сайтов. Каталоги используют одинаковый XML_ID товара.

в файле \bitrix\modules\sale\general\order_loader.php

метод

function prepareProduct4Basket($itemID, $arItem, $orderId, $orderInfo)
	{
		$arFields = array();

		$products = array();
		$productType = array();
		$arIBlockElement = array();

		if(CModule::IncludeModule("iblock"))
		{
			$dbIBlockElement = CIBlockElement::GetList(array(), array("XML_ID" => $itemID, "ACTIVE" => "Y", "CHECK_PERMISSIONS" => "Y"), false, false, array("ID", "IBLOCK_ID", "XML_ID", "NAME", "DETAIL_PAGE_URL"));
			while($arElement = $dbIBlockElement->Fetch())


выбирает по XML_ID без привязки к IBLOCK_ID, вот и получается такая хрень, несколько записей товара из разных IBLOCK_ID.

там же чуть ниже и наш 1C_Exchange в CATALOG_XML_ID

if(empty($arFields))
		{
			$arFields = array(
					"ORDER_ID" => $orderId,
					"PRICE" => $arItem["PRICE"],
					"CURRENCY" => $orderInfo["CURRENCY"],
					"QUANTITY" => $arItem["QUANTITY"],
					"LID" => $orderInfo["LID"],
					"DELAY" => "N",
					"CAN_BUY" => "Y",
					"NAME" => $arItem["NAME"],
					"MODULE" => "1c_exchange",
					"PRODUCT_PROVIDER_CLASS" => false,
					"CATALOG_XML_ID" => "1c_exchange",
					"PRODUCT_XML_ID" => $itemID,
					"IGNORE_CALLBACK_FUNC" => "Y",
					"VAT_RATE" => $arItem["VAT_RATE"],
					"DISCOUNT_PRICE" => $arItem["DISCOUNT_PRICE"],
					"CUSTOM_PRICE" => "Y",
			);


Решить можно тупо задав IBLOCK_ID в getlist() но такая штука будет работать до первого обновления.
или сделать чуть лучше перенести компонент bitrix:sale.export.1c в local и там изменить ему класс
$loader = new CSaleOrderLoader; //любой другой CSaleOrderLoaderModify, например

и потом расширить класс CSaleOrderLoader который находится здесь /bitrix/modules/sale/general/order_loader.php

class CSaleOrderLoaderModify extends CSaleOrderLoader
{
	function prepareProduct4Basket($itemID, $arItem, $orderId, $orderInfo)
	{
...

// меняем его как нам нужно
//например указываем IBLOCK_ID или вообще дописываем в orders.xml новые поля и берем от туда BLOCK_ID

$dbIBlockElement = CIBlockElement::GetList(array(), array("XML_ID" => $itemID,"IBLOCK_ID"=>$XML_BLOCK_ID, "ACTIVE" => "Y",
...
	}
}

-------------------------------------------------------------------------

Вопрос ранее:

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

Сайт формирует заказ >> 1С забирает этот заказ к себе >> Наполняет этот заказ новыми позициями >> 1С отправляет этот заказ на сайт

и вот что получается, некоторые товары не определяются.

5f608402cccab163954797.png

Кривой товар добавленный из 1С, на месте [Внешний код каталога] почему-то логин пользователя 1С на сайте, хотя должен быть идентификатор каталога товаров (в XML заполнен правильно и в свойствах тоже правильно)

5f6084fc5a5df762321479.png

Полукривой товар добавленный из 1С (но он хотя бы определился как товар каталога)

5f608517cd58d961113047.png

а вот этот товар добавленный на сайте, у него все поля заполнены как нужно

5f60854560a26997524696.png

Вот что передаёт 1С в XML

это товар который кривой, всё вроде норм в XML, сайт его не понимает.

<Товар>
	<Ид>Ц0000007725</Ид>
	<ИдКаталога>aspro_mshop_catalog_s2</ИдКаталога>
	<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
	<Единица>
		<Ид>796</Ид>
		<НаименованиеКраткое>шт</НаименованиеКраткое>
		<Код>796</Код>
		<НаименованиеПолное>Штука</НаименованиеПолное>
	</Единица>
	<Коэффициент>1</Коэффициент>
	<ЦенаЗаЕдиницу>133</ЦенаЗаЕдиницу>
	<Количество>24</Количество>
	<Сумма>3192</Сумма>
	<Налоги>
		<Налог>
			<Наименование>НДС</Наименование>
			<УчтеноВСумме>true</УчтеноВСумме>
			<Сумма>532</Сумма>
			<Ставка>20</Ставка>
		</Налог>
	</Налоги>
	<ЗначенияРеквизитов>
		<ЗначениеРеквизита>
			<Наименование>ВидНоменклатуры</Наименование>
			<Значение>Товар</Значение>
		</ЗначениеРеквизита>
		<ЗначениеРеквизита>
			<Наименование>ТипНоменклатуры</Наименование>
			<Значение>Товар</Значение>
		</ЗначениеРеквизита>
		<ЗначениеРеквизита>
			<Наименование>СвойствоКорзины#CATALOG.XML_ID</Наименование>
			<Значение>aspro_mshop_catalog_s2</Значение>
		</ЗначениеРеквизита>
		<ЗначениеРеквизита>
			<Наименование>СвойствоКорзины#PRODUCT.XML_ID</Наименование>
			<Значение>Ц0000007725</Значение>
		</ЗначениеРеквизита>
		<ЗначениеРеквизита>
			<Наименование>CATALOG.XML_ID</Наименование>
			<Значение>aspro_mshop_catalog_s2</Значение>
		</ЗначениеРеквизита>
		<ЗначениеРеквизита>
			<Наименование>PRODUCT.XML_ID</Наименование>
			<Значение>Ц0000007725</Значение>
		</ЗначениеРеквизита>
	</ЗначенияРеквизитов>
</Товар>


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

<Товар>
	<Ид>Ц0000027053</Ид>
	<ИдКаталога>aspro_mshop_catalog_s2</ИдКаталога>
	<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
	<Единица>
		<Ид>796</Ид>
		<НаименованиеКраткое>шт</НаименованиеКраткое>
		<Код>796</Код>
		<НаименованиеПолное>Штука</НаименованиеПолное>
	</Единица>
	<Коэффициент>1</Коэффициент>
	<Скидки>
		<Скидка>
			<Наименование>Скидка на товар</Наименование>
			<Сумма>13.2</Сумма>
			<УчтеноВСумме>true</УчтеноВСумме>
		</Скидка>
	</Скидки>
	<ЦенаЗаЕдиницу>66</ЦенаЗаЕдиницу>
	<Количество>1</Количество>
	<Сумма>52.8</Сумма>
	<Налоги>
		<Налог>
			<Наименование>НДС</Наименование>
			<УчтеноВСумме>true</УчтеноВСумме>
			<Сумма>8.8</Сумма>
			<Ставка>20</Ставка>
		</Налог>
	</Налоги>
	<ЗначенияРеквизитов>
		<ЗначениеРеквизита>
			<Наименование>ВидНоменклатуры</Наименование>
			<Значение>Товар</Значение>
		</ЗначениеРеквизита>
		<ЗначениеРеквизита>
			<Наименование>ТипНоменклатуры</Наименование>
			<Значение>Товар</Значение>
		</ЗначениеРеквизита>
		<ЗначениеРеквизита>
			<Наименование>СвойствоКорзины#CATALOG.XML_ID</Наименование>
			<Значение>aspro_mshop_catalog_s2</Значение>
		</ЗначениеРеквизита>
		<ЗначениеРеквизита>
			<Наименование>СвойствоКорзины#PRODUCT.XML_ID</Наименование>
			<Значение>Ц0000027053</Значение>
		</ЗначениеРеквизита>
		<ЗначениеРеквизита>
			<Наименование>CATALOG.XML_ID</Наименование>
			<Значение>aspro_mshop_catalog_s2</Значение>
		</ЗначениеРеквизита>
		<ЗначениеРеквизита>
			<Наименование>PRODUCT.XML_ID</Наименование>
			<Значение>Ц0000027053</Значение>
		</ЗначениеРеквизита>
	</ЗначенияРеквизитов>
</Товар>


вот что происходит в БД таблица b_sale_basket

5f60890bed13e478673519.png
5f608911b381b193030772.png
5f608917e3cb7093914695.png

в таблице b_sale_basket_props товары которые добавлены из 1С информация отсутствует, только те что были добавлены на сайте

в чем может быть проблема? типовой обмен не трогался, работает из коробки
  • Вопрос задан
  • 796 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Almot77
Такая же беда, А как победили что тип Цена каталога а не нужная ?
У нас тоже не привязывается товар - точнее его цена.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы