1С-Битрикс. Применение только одной, самой большой скидки на товар. Скидки битрикс
Купоны для скидки и промокоды 1С-Битрикс (1c-bitrix.ru) за июль – август 2018
- Главная
- Магазины и сервисы
- Услуги
- Купоны «1С-Битрикс»
«1С-Битрикс» (1c-bitrix.ru) – это компания, которая разрабатывает программные продукты для эффективного управления интернет-проектами и корпоративными порталами. Организация постоянно совершенствует качество разработок и выпускает обновления с дополнительными функциями, которые значительно упрощают деятельность клиентов.
Продукты отечественной компании отличаются высоким уровнем готовности решений для любых бизнес-задач. Перед релизом системы проходят многоэтапное тестирование, что значительно сокращает количество возможных ошибок в программах. Клиентам доступны разные способы оплаты продукции.
Желаете воспользоваться предложением популярной компании без больших финансовых вложений? Активируйте промокоды и купоны для скидки «1С-Битрикс» за июль – август 2018 года, и вы получите интересующие вас продукты на максимально выгодных условиях. Экономить всегда приятно, поэтому не пропустите новые купоны 1c-bitrix.ru!
Где вводить промокод?Поле для ввода промокода расположено во вкладке «Купить», а также в «Корзине» под общей суммой заказа.
Предложение действует до 31 июля 2018, 23:59
promokodus.com
Создание скидки на общую сумму покупки в Битрикс корзине
Функционал интернет-магазина, работающего под управлением 1С Битрикс, позволяет задавать множество условий скидок в корзине покупателя. Эти условия можно гибко настраивать и адаптировать под конкретный вид бизнеса.
Основные виды манипуляций которые приходится настраивать достаточно часто:
- Скидка на доставку при большом количестве набранных товаров
- Скидка на количество конкретного товара в корзине. При этом, другие товары, положенные вместе со "скидочным" не имеют скидки
- Скидка на конкретный товар, который идет по акции (правда не особо применимо в разрезе этого функционала, проще сделать через "Скидки на товар")
- Скидка на товары при оформлении доставки, конкретной службой доставки
- Скидка при самовывозе.
- Скидка при использовании конкретной платежной системы
- Скидка на общую сумму заказа.
Функционал достаточно обширен и позволяет реализовать любые фантазии и условия. Я расскажу на примере "Скидка 15% если товаров в корзине на сумму от 15001 до 20000 рублей"
Скидка на общую сумму покупки
Идем в админпанель, раздел "Магазин", подраздел "Скидки", пункт "Правила работы с корзиной":
Нажимаем "Добавить правило":
Откроется мастер настройки правила. Здесь минимально необходимо указать понятое название, так как, если таких условий будет много, Вы легко запутаетесь. Я назвал скидку как есть и не выставлял период активности, то есть данное правило навсегда с текущего момента:
Переходим на вкладку "Действия условия" и задаем действие которое должно произойти, в моем случае должно произойти "Изменение стоимости товаров в корзине"
И заполняем действие как на скриншоте. То есть мы пошагово составили "применить скидку 15% ко всем товарам соответствующим условиям"
А теперь необходимо создать условие при котором это действие будет срабатывать. Для этого переходим в поле ниже "Дополнительные условия". И выбираем из заготовок "Общая стоимость товаров":
Создаем два таких условия как на скриншоте. То есть мы ограничили суммы в рамки 15001 рубль и 20000 рублей. Если говорить человеческим языком, то получается следующее "Если в корзине набрано товаров от 15001 рубля до 20000 рублей, должна сработать скидка 15% на все товары":
Переходим на вкладку "Ограничения" и указываем пользователей, для которых будет доступно это условие. То есть можно применять только для авторизованных или для партнеров, а для всех остальных скидок не будет. В моем случае я выбрал все категории пользователей. Администратора выбирайте обязательно, так как Вам нужно будет проверить свою работу.
Все готово. Но держите за правило: всегда все проверять. Для этого переходим на сайт и кидаем в корзину товаров на сумму в рамках 15000/20000 рублей. Переходим в корзину и видим, что наша скидка применилась.
На всякий случай докладываем в корзину товаров на сумму превышающее наше условие, и видим, что скидка не сработала.
Все отлично, наша работа принесла результат. Если Вы не хотите ограничивать скидку в неких рамках. Например, нужно сделать так, чтобы скидка срабатывала от 15000 рублей и в бесконечность, просто не задаете второе условие, не нужно создавать еще одну скидку от 20000 и выше (конечно если она не отличается)
Автору на кофе и печеньки!- Через Яндекс деньги
- С банковской карты
- С мобильного
camouf.ru
1С-Битрикс. Применение только одной, самой большой скидки на товар
Как известно, в 1С-Битрикс множество разновидностей скидок. Есть и «скидки на товары», и «скидки на заказ», и «купоны скидок», и даже «накопительные скидки». Но вместе они иногда работают не так, как нам нужно.
Рассмотрим пример
В интернет-магазине есть 2 типа скидок:
- Скидка на товар.
- Скидка по дисконтной карте, реализованная через купоны.
При оформлении заказа необходимо учитывать бОльшую скидку. Как это сделать? Приоритеты и галочка «Прекратить дальнейшее применение скидок» здесь решением не являются. Например, скидка на товар 10%, а скидки по дисконтным картам от 5% до 20%.
То есть, если клиент кладет в корзину товар с 10% скидкой, вводит номер дисконтной карты (по ней скидка 20%) и карта не считается. Получается, применяется меньшая скидка.
Решим досадное недоразумение парочкой обработчиков событий.
CModule::IncludeModule('catalog'); AddEventHandler("catalog", "OnGetDiscount", array("WeProductDiscountHandler", "OnGetDiscount")); AddEventHandler("catalog", "OnGetDiscountResult", array("WeProductDiscountHandler", "OnGetDiscountResult")); class WeProductDiscountHandler{ protected static $productPrice = null; @return public function OnGetDiscount($intProductID, $intIBlockID, $arCatalogGroups, $arUserGroups, $strRenewal, $siteID, $arDiscountCoupons, $boolSKU, $boolGetIDS){ $curProductPrice = CPrice::GetBasePrice($intProductID, false, false, false); if($curProductPrice != false){ self::$productPrice = $curProductPrice; } return true; } @return public function OnGetDiscountResult(&$arResult){ if(is_array(self::$productPrice) && isset(self::$productPrice['PRICE']) && self::$productPrice['PRICE'] > 0){ $discounts = array(); foreach($arResult as $key_discount => $discount){ switch($discount['VALUE_TYPE']){ case CCatalogDiscount::TYPE_PERCENT: $discounts[$key_discount] = self::$productPrice['PRICE'] * ($discount['VALUE'] / 100); break; case CCatalogDiscount::TYPE_SALE: $discounts[$key_discount] = self::$productPrice['PRICE'] - $discount['VALUE']; break; case CCatalogDiscount::TYPE_FIX: $discounts[$key_discount] = $discount['VALUE']; break; default: break; } } if(!empty($discounts)){ $maxs_discounts = array_keys($discounts, max($discounts)); if(isset($maxs_discounts[0], $arResult[$maxs_discounts[0]]) && is_array($arResult[$maxs_discounts[0]])){ $neededDiscount = $arResult[$maxs_discounts[0]]; $arResult = array($neededDiscount); } } } self::$productPrice = null; } }www.olegpro.ru
Организация собственных скидок в Битрикс
Допустим, мы хотим разработать свою систему скидок, которая не укладывается в рамки Битрикса. Например, добавить региональную скидку, которая зависит от места доставки (для каждого места - своя скидка в процентах).
Штатная система скидок предполагает только скидки на товар и скидки на товарную группу.
В этом случае есть смысл хранить свои скидки в отдельно созданных таблицах, а часть бизнес-логики - переписать, делегируя функции скидок классу MyDiscount:
изменить цены и скидки при выводе в каталоге
менять скидку при добавлении в корзину своим обработчиком
хранить скидку на корзину в отдельной таблице (баг «пересчета» скидок)
Прежнюю систему скидок Битрикс необходимо удалить (иначе в некоторых местах скидки будут считаться дважды):
TRUNCATE b_catalog_discount; TRUNCATE b_catalog_discount_cond;Скидки в каталоге товаров
Создаем класс MyDiscount и программируем в нем бизнес-логику, которая выбирает скидки из отдельной таблицы. Новые цены и скидки перед выводом в каталоге можно изменить так:
$arResult["ITEMS"] = MyDiscount::setDiscount($arResult["ITEMS"]);Добавление скидки в корзину
Обработчик скидок корзины
Для корректной обработки заказа со своей схемой скидок в месте добавления в корзину следует назначить обработчик скидок.
Add2BasketByProductID($iProductID, $iQuantity, array('PRODUCT_PROVIDER_CLASS'=>'CCatalogProductProviderCustom'), $arProductParams);CCatalogProductProviderCustom - это унаследованный от CCatalogProductProvider класс-обработчик корзины:
class CCatalogProductProviderCustom extends CCatalogProductProvider { public static function GetProductData($arParams) { $arResult = CCatalogProductProvider::GetProductData($arParams); // получаем данные из родительского класса $product = CPrice::GetByID($arResult['PRODUCT_PRICE_ID']); // получаем данные о товаре $MyDiscount = new MyDiscount(); // наш класс для обработки скидок $arResult = $MyDiscount->setDiscountCartItem($arResult, $product['PRODUCT_ID']); // модифицируем данные return $arResult; // отдаем модифицированные результаты } public static function OrderProduct($arParams) { $arResult = CCatalogProductProvider::OrderProduct($arParams); $product = CPrice::GetByID($arResult['PRODUCT_PRICE_ID']); $MyDiscount = new MyDiscount(); $arResult = $MyDiscount->setDiscountCartItem($arResult, $product['PRODUCT_ID']); return $arResult; } }
Исправляем баг "пересчета" скидок
Существует проблема «пересчета» скидки: в корзине она рассчитывается на основе цены «до» и «после», а не передается. Поэтому на уровне сотых, иногда - десятых, скидка отличается от «начальной».
Чтобы решить проблему «пересчета» скидок, скидки следует хранить в отдельной таблице:
CREATE TABLE `external_basket_discount` ( `basket_id` int(11) unsigned NOT NULL, `product_id` int(11) unsigned NOT NULL, `my_discount` decimal(5,2) NOT NULL, PRIMARY KEY (`basket_id`,`product_id`) ) ENGINE=InnoDB;Добавим в класс MyDiscount три метода:
public function storeDiscount($PRODUCT_ID, $MY_DISCOUNT) { // установить скидку на товар в корзине $basket_id = (int) CSaleBasket::GetBasketUserID(); $product_id = (int) $PRODUCT_ID; $my_discount = (float) $MY_DISCOUNT; $query = "INSERT INTO `external_basket_discount` (`basket_id`, `product_id`, `my_discount`) VALUES ($basket_id, $product_id, '$my_discount') ON DUPLICATE KEY UPDATE `my_discount` = '$my_discount' "; $this->db->Query($query); } public static function extractCartItemDiscount($item) { // получить скидку на товар global $DB; $basket_id = (int) CSaleBasket::GetBasketUserID(); $product_id = (int) $item['PRODUCT_ID']; $query = "SELECT `my_discount` FROM `external_basket_discount` WHERE `basket_id` = $basket_id AND `product_id` = $product_id"; $results = $DB->Query($query); $results = $results->Fetch(); $ret = isset($results['my_discount']) ? $results['my_discount'] : ''; return $ret; } public static function clearDiscount() { // очистить скидки на товары в корзине global $DB; $basket_id = (int) CSaleBasket::GetBasketUserID(); $query = "DELETE FROM `external_basket_discount` WHERE `basket_id` = $basket_id"; $DB->Query($query); }storeDiscount - в методе MyDiscount::setDiscountCartItem()
extractCartItemDiscount - при выводе корзины
clearDiscount - после оформления заказа
pushorigin.ru