Preços diferentes para armazéns em vários armazéns. Refinamento 1C-Bitrix

Havia uma loja online e uma plataforma b2b de uma empresa no sistema 1s-Bitrix. A empresa cresceu e seus armazéns apareceram e foram adicionados os armazéns parceiros que precisavam ser exibidos. Havia uma necessidade de exibir saldos em vários armazéns.

E o que a Bitrix nos diz: Por favor, vá ao escritório editorial de negócios e tudo será maravilhoso e imediatamente. Eles foram à redação e descobriram que o valor múltiplo e o armazém múltiplo no 1C-Bitrix vivem uma vida separada. O primeiro é necessário para exibir preços diferentes para diferentes grupos de usuários e o segundo para exibir saldos em diferentes armazéns.

Precisávamos retirar os saldos com seu preço para cada armazém, pois o preço nos parceiros e em nós pode diferir em uma mesma posição. Descobriu-se que não havia essa funcionalidade regular.

Então surgiu a idéia de refazer modelos padrão e no site para gerar um monte de preço de armazém.

A primeira coisa que precisei fazer foi refazer os modelos catalog.section e catalog.element. O componente catalog.store.amount foi inserido neles:

1. Uma lista de armazéns com preços foi exibida para o cartão do produto

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


2. Para a lista de mercadorias por meio do componente, apenas um preço foi selecionado (o preço mais baixo ou o tempo de entrega mínimo).

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


Assim, para cada espécie, um modelo foi criado, juntamente com mais alguns modelos. Por exemplo, um modelo para uma compra rápida que exibe o armazém ideal com um preço para fazer uma compra.

O trabalho no componente catalog.store.amount foi realizado em 3 etapas.

1. Correspondência manual no código do armazém - preço (conveniente com um pequeno número de armazéns). Nesse caso, o código indica o tipo de preço para um armazém específico.

Snippet 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. Depois que os armazéns começaram a ser conectados, a primeira opção acabou sendo inadequada e foi decidido manter os pacotes de preços de armazém em um bloco de informações separado.

captura de tela


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


Assim, um volume suficientemente grande de armazéns já pode ser mantido.

3. Usando campos personalizados diretamente nos armazéns para comparação com os tipos de preço.

Esta opção não foi inicialmente considerada. E somente depois que a loja abriu, depois de Chelyabinsk, também foi necessário indicar o tempo de entrega das mercadorias, dependendo do armazém em São Petersburgo, para esse fim, eles usaram campos personalizados nos armazéns.

Captura de tela


Eu acho que essa opção é a melhor. No momento, vários modelos já foram transferidos para a mesma opção para comparar armazéns e preços.

PS Se você souber uma opção mais adequada - escreva nos comentários, ficarei grato.

PPS Se você tiver comentários ou perguntas, escreva - eu responderei.

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


All Articles