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ódigoif ($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"]
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.
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.
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.