Unterschiedliche Preise für Lager in mehreren Lagern. Verfeinerung 1C-Bitrix

Auf dem 1s-Bitrix-System gab es einen Online-Shop und eine B2B-Plattform eines Unternehmens. Das Unternehmen wuchs und seine Lager erschienen und Partnerlager, die ausgestellt werden mussten, wurden hinzugefügt. In mehreren Lagern mussten Guthaben angezeigt werden.

Und was Bitrix uns sagt: Bitte gehen Sie zur Wirtschaftsredaktion und alles wird wunderbar und sofort. Sie gingen zur Redaktion und es stellte sich heraus, dass Multi-Value und Multi-Warehouse in 1C-Bitrix ein getrenntes Leben führen. Der erste wird benötigt, um unterschiedliche Preise für verschiedene Benutzergruppen anzuzeigen, und der zweite, um Salden in verschiedenen Lagern anzuzeigen.

Wir mussten die Salden mit ihrem Preis für jedes Lager abheben, da der Preis bei Partnern und bei uns um ein und dieselbe Position abweichen kann. Es stellte sich heraus, dass es keine solche reguläre Funktionalität gab.

Dann kam die Idee auf, Standardvorlagen neu zu erstellen und auf der Website eine Reihe von Lagerpreisen zu erstellen.

Als erstes musste ich die Vorlagen catalog.section und catalog.element wiederholen. Die Komponente catalog.store.amount wurde in sie eingefügt:

1. Für die Produktkarte wurde eine Liste der Lager mit Preisen angezeigt

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


2. Für die Liste der Waren über die Komponente wurde nur ein Preis ausgewählt (entweder der niedrigste Preis oder die minimale Lieferzeit).

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


Daher wurde für jede Art eine Vorlage erstellt, zusammen mit dieser wurden einige weitere Vorlagen erstellt. Zum Beispiel eine Vorlage für einen schnellen Kauf, die das optimale Lager mit einem Preis für den Kauf anzeigt.

Die Arbeit an der Komponente catalog.store.amount verlief in drei Schritten.

1. Manueller Abgleich im Lagercode - Preis (praktisch bei einer kleinen Anzahl von Lagern). In diesem Fall gibt der Code die Art des Preises für ein bestimmtes Lager an.

Code-Snippet
 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. Nachdem die Lager miteinander verbunden worden waren, erwies sich die erste Option als ungeeignet und es wurde beschlossen, die Lagerpreisbündel in einem separaten Informationsblock aufzubewahren.

Screenshot


Code-Snippet
 <?//      $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{}} } ?> 


Somit ist es bereits möglich, ein ausreichend großes Lagervolumen aufrechtzuerhalten.

3. Verwenden von benutzerdefinierten Feldern direkt in Lagern zum Vergleich mit Preisarten.

Diese Option wurde ursprünglich nicht in Betracht gezogen. Und erst nach der Eröffnung des Geschäfts nach Tscheljabinsk musste auch die Lieferzeit der Waren je nach Lager in St. Petersburg angegeben werden. Zu diesem Zweck wurden in Lagern benutzerdefinierte Felder verwendet.

Screenshot


Ich denke, diese Option ist die optimalste. Derzeit wurden bereits mehrere Vorlagen auf dieselbe Option übertragen, um Lager und Preise zu vergleichen.

PS Wenn Sie eine geeignetere Option kennen - schreiben Sie in die Kommentare, ich werde dankbar sein.

PPS Wenn Sie Kommentare oder Fragen haben, schreiben Sie - ich werde antworten.

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


All Articles