Y
Y
Yuriy2020-09-15 12:14:36
1C-Bitrix
Yuriy, 2020-09-15 12:14:36

BITRIX exchange of orders, goods crookedly fall into the order from 1C?

I will answer myself))

UDP1. The problem is that the site has 2 product catalogs for different sites. Catalogs use the same product XML_ID.

in file \bitrix\modules\sale\general\order_loader.php

method

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())


selects by XML_ID without binding to IBLOCK_ID, so this crap turns out, several product records from different IBLOCK_IDs.

in the same place a little lower and our 1C_Exchange in 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",
      );


You can solve it stupidly by setting IBLOCK_ID in getlist (), but such a thing will work until the first update.
or make it a little better to transfer the bitrix:sale.export.1c component to local and change its class there
$loader = new CSaleOrderLoader; //любой другой CSaleOrderLoaderModify, например

and then expand the CSaleOrderLoader class which is located here /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",
...
  }
}

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

Question earlier:

Tell me what could be the problem.
exchange of orders with 1C standard.

The site forms an order >> 1C takes this order to itself >> Fills this order with new positions >> 1C sends this order to the site

and that's what happens, some products are not detected.

5f608402cccab163954797.png

A crooked product added from 1C, in place of [External catalog code] for some reason, a 1C user login on the site, although there should be a product catalog ID (in XML it is filled in correctly and in the properties it is also correct)

5f6084fc5a5df762321479.png

A semi-curved product added from 1C (but at least it was defined as a product of the catalog)

5f608517cd58d961113047.png

but this product is added on the site, all the fields are filled in as needed

5f60854560a26997524696.png

That's what 1C transmits in XML

is a product that is crooked, everything seems to be normal in XML, the site does not understand it.

<Товар>
  <Ид>Ц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</Значение>
    </ЗначениеРеквизита>
  </ЗначенияРеквизитов>
</Товар>


Here in the same order is the code of a normal product that was added on the side of the site

<Товар>
  <Ид>Ц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</Значение>
    </ЗначениеРеквизита>
  </ЗначенияРеквизитов>
</Товар>


this is what happens in the database table b_sale_basket

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

in the table b_sale_basket_props goods that are added from 1C, there is no information, only those that were added on the site

, what could be the problem? typical exchange did not touch, works out of the box

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Almot77, 2021-05-29
@Almot77

The same trouble, And how did you win that type Catalog price and not the right one?
At us too the goods are not attached - its price is more exact.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question