Différents prix pour les entrepôts en multi-entrepôt. Raffinement 1C-Bitrix

Il y avait une boutique en ligne et une plate-forme b2b d'une entreprise sur le système 1s-Bitrix. L'entreprise a grandi et ses entrepôts sont apparus et des entrepôts partenaires qui devaient être affichés ont été ajoutés. Il était nécessaire d'afficher les soldes dans plusieurs entrepôts.

Et ce que Bitrix nous dit: veuillez vous rendre à la rédaction de Business et tout sera merveilleux et tout de suite. Ils sont allés à la rédaction et il s'est avéré que les multi-valeurs et les multi-entrepôts de 1C-Bitrix vivent une vie séparée. Le premier est nécessaire pour afficher différents prix pour différents groupes d'utilisateurs, et le second pour afficher les soldes dans différents entrepôts.

Nous devions retirer les soldes avec leur prix pour chaque entrepôt, car le prix chez les partenaires et chez nous peut différer d'une seule et même position. Il s'est avéré qu'il n'y avait pas une telle fonctionnalité régulière.

Puis l'idée est venue de refaire des modèles standard et du côté du site de faire un tas de prix d'entrepôt.

La première chose que je devais faire était de refaire les modèles catalog.section et catalog.element. Le composant catalog.store.amount y a été inséré:

1. Une liste des entrepôts avec prix a été affichée pour la fiche produit

Extrait de code
if ($arResult['CATALOG_QUANTITY']!=0){ //         $APPLICATION->IncludeComponent("bitrix:catalog.store.amount","finnit_buy", array("ELEMENT_ID" => $arResult["ID"] //  ID  


2. Pour la liste des marchandises via le composant, un seul prix a été sélectionné (soit le prix le plus bas soit le délai de livraison minimum).

Extrait de code
 $APPLICATION->IncludeComponent( "bitrix:catalog.store.amount", "finnit_1sk", array( "ELEMENT_ID" => $arElement["ID"]//  ID  


Ainsi, pour chaque espèce, un modèle a été créé, ainsi que quelques autres modèles ont été créés. Par exemple, un modèle pour un achat rapide qui affiche l'entrepôt optimal avec un prix pour effectuer un achat.

Le travail sur le composant catalog.store.amount s'est déroulé en 3 étapes.

1. Correspondance manuelle dans le code de l'entrepôt - prix (pratique avec un petit nombre d'entrepôts). Dans ce cas, le code indique le type de prix pour un entrepôt particulier.

Extrait de code
 if ($arProperty['ID'] == 29){//   $db_res = CPrice::GetList( array(), array("PRODUCT_ID" => $arParams['ELEMENT_ID'],"CATALOG_GROUP_ID" => '28')); // 28 -      if ($ar_res = $db_res->Fetch()){ if($min_price > (ceil(($ar_res["PRICE"] + ($ar_res["PRICE"]/100))/10)* 10)) $min_price = ceil(($ar_res["PRICE"] + ($ar_res["PRICE"]/100))/10)* 10; //            $amount = $arProperty["AMOUNT"]; //     $title = $arProperty["ID"]; //     ,      1        -      ID,     . } 


2. Après que les entrepôts ont commencé à être connectés, la première option s'est avérée inadaptée et il a été décidé de conserver les lots de prix d'entrepôt dans un bloc d'informations distinct.

capture d'écran


Extrait de code
 <?//      $arSelectEquals = Array("ID", "IBLOCK_ID"); $arFilterEquals = Array("IBLOCK_ID"=>18); //ID   $equals = CIBlockElement::GetList(Array(), $arFilterEquals, false, Array(), $arSelectEquals); while($equal = $equals->GetNextElement()){ $arPropsEquals = $equal->GetProperties(); if ($arProperty["ID"] == $arPropsEquals["SKLAD_ID"]["VALUE"]){//    $db_res = CPrice::GetList( array(), array("PRODUCT_ID" => $arParams['ELEMENT_ID'],"CATALOG_GROUP_ID" => $arPropsEquals["PRICE_ID"]["VALUE"])); if ($ar_res = $db_res->Fetch()){ if (!isset($ar_res["PRICE"])){ echo GetMessage('FINN_PRICE_MANAGER');//     }else{ //       $pricen = ceil( $ar_res["PRICE"] );//      $price_id = $ar_res["CATALOG_GROUP_ID"];//      $price_name = $ar_res["CATALOG_GROUP_NAME"];//      } //echo number_format( $pricen, 0, ',', ' ' ); $torgId = $ar_res["ID"]; //      $torgGId = $ar_res["CATALOG_GROUP_ID"];//      } } else{}} } ?> 


Ainsi, il est déjà possible de maintenir un volume suffisamment important d'entrepôts.

3. Utilisation de champs personnalisés directement dans les entrepôts pour comparaison avec les types de prix.

Cette option n'a pas été initialement envisagée. Et seulement après l'ouverture du magasin, après Chelyabinsk, il était également nécessaire d'indiquer le délai de livraison des marchandises en fonction de l'entrepôt de Saint-Pétersbourg, à cette fin, ils ont utilisé des champs personnalisés dans les entrepôts.

Capture d'écran


Je pense que cette option est la plus optimale. Et pour le moment, plusieurs modèles ont déjà été transférés vers la même option pour comparer les entrepôts et les prix.

PS Si vous connaissez une option plus appropriée - écrivez dans les commentaires, je vous en serai reconnaissant.

PPS Si vous avez des commentaires ou des questions écrivez - je répondrai.

Source: https://habr.com/ru/post/fr420071/


All Articles