Diferentes precios para almacenes en multi-almacén. Refinamiento 1C-Bitrix

Había una tienda en línea y una plataforma b2b de una compañía en el sistema 1s-Bitrix. La compañía creció y aparecieron sus almacenes y se agregaron los almacenes asociados que debían mostrarse. Era necesario mostrar saldos en varios almacenes.

Y lo que nos dice Bitrix: vaya a la oficina editorial de negocios y todo será maravilloso e inmediato. Fueron a la oficina editorial y resultó que el valor múltiple y el almacén múltiple en 1C-Bitrix viven una vida separada. El primero es necesario para mostrar diferentes precios para diferentes grupos de usuarios, y el segundo para mostrar saldos en diferentes almacenes.

Necesitábamos retirar los saldos con su precio para cada almacén, ya que el precio en los socios y en nosotros puede diferir en una misma posición. Resultó que no había tal funcionalidad regular.

Luego surgió la idea de rehacer plantillas estándar y en el lado del sitio para hacer un montón de precios de almacén.

Lo primero que tuve que hacer fue rehacer las plantillas catalog.section y catalog.element. El componente catalog.store.amount se insertó en ellos:

1. Se mostró una lista de almacenes con precios para la tarjeta de producto

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


2. Para la lista de productos a través del componente, solo se seleccionó un precio (ya sea el precio más bajo o el tiempo de entrega mínimo).

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


Entonces, para cada especie, se creó una plantilla, junto con esto se crearon algunas plantillas más. Por ejemplo, una plantilla para una compra rápida que muestra el almacén óptimo con un precio para realizar una compra.

El trabajo en el componente catalog.store.amount se realizó en 3 etapas.

1. Coincidencia manual en el código del almacén - precio (conveniente con un pequeño número de almacenes). En este caso, el código indica el tipo de precio para un almacén en particular.

Fragmento de código
 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. Después de que los almacenes comenzaron a conectarse, la primera opción resultó ser inadecuada y se decidió mantener los paquetes de precios de almacén en un bloque de información separado.

captura de pantalla


Fragmento de código
 <?//      $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{}} } ?> 


Por lo tanto, ya es posible mantener un volumen suficientemente grande de almacenes.

3. Uso de campos personalizados directamente en almacenes para la comparación con los tipos de precios.

Esta opción no se consideró inicialmente. Y solo después de la apertura de la tienda, más allá de Chelyabinsk, también fue necesario indicar el tiempo de entrega de los productos dependiendo del almacén en San Petersburgo, para este propósito utilizaron campos personalizados en los almacenes.

Captura de pantalla


Creo que esta opción es la más óptima. Y en este momento, varias plantillas ya se han transferido a la misma opción para comparar almacenes y precios.

PD: Si conoce una opción más adecuada, escriba en los comentarios, se lo agradeceré.

PPS Si tiene comentarios o preguntas, escriba: le responderé.

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


All Articles