أسعار مختلفة للمستودعات في مستودعات متعددة. صقل 1C- بيتريكس

كان هناك متجر على الإنترنت ومنصة b2b من شركة واحدة على نظام 1s-Bitrix. نمت الشركة وظهرت مستودعاتها وأضيفت مستودعات شريكة يجب عرضها. كانت هناك حاجة لعرض الأرصدة في العديد من المستودعات.

وما تخبرنا به Bitrix: يرجى الانتقال إلى مكتب تحرير Business وسيكون كل شيء رائعًا وعلى الفور. ذهبوا إلى مكتب التحرير واتضح أن القيمة المتعددة والمستودعات في 1C-Bitrix تعيش حياة منفصلة. الأول مطلوب لعرض أسعار مختلفة لمجموعات المستخدمين المختلفة ، والثاني لعرض الأرصدة في المستودعات المختلفة.

نحن بحاجة إلى سحب الأرصدة مع سعرها لكل مستودع ، لأن السعر في الشركاء وفينا قد يختلف باختلاف نفس المركز. اتضح أنه لم يكن هناك مثل هذه الوظائف العادية.

ثم جاءت الفكرة لإعادة صياغة النماذج القياسية وعلى جانب الموقع لعمل مجموعة من أسعار المستودعات.

أول شيء كان علي فعله هو إعادة إنشاء نماذج الكتالوج وقسم الكتالوج. تم إدراج مكون index.store.amount فيها:

1. تم عرض قائمة بالمخازن ذات الأسعار لبطاقة المنتج

مقتطف الرمز
if ($arResult['CATALOG_QUANTITY']!=0){ //         $APPLICATION->IncludeComponent("bitrix:catalog.store.amount","finnit_buy", array("ELEMENT_ID" => $arResult["ID"] //  ID  


2. بالنسبة لقائمة البضائع من خلال المكون ، تم تحديد سعر واحد فقط (إما أقل سعر أو الحد الأدنى لوقت التسليم).

مقتطف الرمز
 $APPLICATION->IncludeComponent( "bitrix:catalog.store.amount", "finnit_1sk", array( "ELEMENT_ID" => $arElement["ID"]//  ID  


لذلك لكل نوع ، تم إنشاء قالب ، إلى جانب هذا تم إنشاء عدد قليل من القوالب. على سبيل المثال ، قالب لعملية شراء سريعة تعرض المستودع الأمثل بسعر الشراء.

العمل على كتالوج المكون. store.amount ذهب في 3 مراحل.

1. المطابقة اليدوية في كود المستودع - السعر (مناسب مع عدد قليل من المستودعات). في هذه الحالة ، يشير الرمز إلى نوع السعر لمستودع معين.

مقتطف الرمز
 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. بعد أن بدأ توصيل المستودعات ، اتضح أن الخيار الأول غير مناسب وتقرر الاحتفاظ بحزم أسعار المستودعات في كتلة معلومات منفصلة.

قطة


مقتطف الرمز
 <?//      $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{}} } ?> 


وبالتالي ، فمن الممكن بالفعل الحفاظ على حجم كبير بما فيه الكفاية من المستودعات.

3. استخدام الحقول المخصصة مباشرة في المستودعات للمقارنة مع أنواع الأسعار.

لم يتم النظر في هذا الخيار في البداية. وفقط بعد افتتاح المتجر ، بعد تشيليابينسك ، كان من الضروري أيضًا الإشارة إلى وقت تسليم البضائع اعتمادًا على المستودع في سانت بطرسبرغ ، لهذا الغرض استخدموا الحقول المخصصة في المستودعات.

لقطة شاشة


أعتقد أن هذا الخيار هو الأمثل. وفي الوقت الحالي ، تم بالفعل نقل العديد من القوالب إلى نفس الخيار لمقارنة المستودعات والأسعار.

PS إذا كنت تعرف خيارًا أكثر ملاءمة - اكتب في التعليقات ، سأكون ممتنًا.

PPS إذا كان لديك تعليقات أو أسئلة الكتابة - سأجيب.

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


All Articles