Документация для разработчиков
Темная тема

Add

int
CSaleDiscount::Add(
	array arFields
);

Метод добавляет новую скидку на сумму заказа с параметрами из массива arFields. Нестатический метод.

Параметры вызова

ПараметрОписание
arFields Ассоциативный массив параметров скидки, ключами в котором являются названия параметров скидки, а значениями - значения параметров.

Допустимые ключи:
  • LID - идентификатор сайта;
  • NAME - название;
  • ACTIVE_FROM - дата и время начала действия в формате сайта (если не указано, то действует с момента создания);
  • ACTIVE_TO - дата и время окончания действия в формате сайта (если не указано, то ограничения по времени не имеет);
  • ACTIVE - флаг активности;
  • PRIORITY - приоритет применимости (чем выше, тем раньше применится);
  • SORT - сортировка в рамках одного значения приоритета (чем меньше, тем раньше применится в рамках одного приоритета);
  • LAST_DISCOUNT - флаг "Прекратить применение скидок". Если правило применилось и флаг стоит, все последующие скидки не будут использованы (независимо от того, совпадают их условия или нет);
  • LAST_LEVEL_DISCOUNT - флаг "Прекратить уровень". Аналогичен предыдущему, но отменяет только последующие правила с таким же приоритетом;
  • XML_ID - внешний код;
  • CONDITIONS - массив, описывающий дополнительные условия правила;
  • ACTIONS - массив, описывающий действия правила;
  • USER_GROUPS - массив групп пользователей, на которых распространяется правило (не может быть пустым);
  • CURRENCY - с версии 14.0 принудительно содержит валюту сайта;
  • PRICE_FROM - общая стоимость заказа, начиная с которой предоставляется эта скидка. Устаревшее поле с 14.0, значение жестко переопределяются при добавлении;
  • PRICE_TO - общая стоимость заказа, до достижения которой предоставляется эта скидка. Устаревшее поле с 14.0, значение жестко переопределяются при добавлении;
  • DISCOUNT_VALUE - величина скидки. Устаревшее поле с 14.0, значение жестко переопределяются при добавлении;
  • DISCOUNT_TYPE - тип величины скидки (P - величина задана в процентах, V - величина задана в абсолютной сумме). Устаревшее поле с 14.0, значение жестко переопределяются при добавлении;

  • Блок купонов:
  • COUPON_ADD - создать купоны одного типа при добавлении правила или нет (Y/N);
  • COUPON_COUNT - число создаваемых купонов;
  • COUPON - массив, описывающий купон:
    • TYPE - тип купона (Y - купон на одну позицию заказа, O - купон на один заказ, N - многоразовый купон);
    • ACTIVE_FROM - дата и время начала активности купона в формате сайта либо null;
    • ACTIVE_TO - дата и время окончания активности купона в формате сайта либо null;
    • MAX_USE - максимальное число использования купона (для многоразовых) либо 0.

Возвращаемые значения

Возвращается код добавленной скидки или false в случае ошибки.



Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
1
Алексей Белов
Сообщение не промодерировано, возможны ошибки и неточности.
Поскольку описание функции скудное, то можно подсмотреть, что передают сами разработчики Битрикс, выбрав все нужные параметры.
В файле /bitrix/modules/sale/admin/discount_edit.php в строке 302 имеется функция CSaleDiscount::Update($discountID, $arFields) и в строке 313 CSaleDiscount::Add($arFields). Перед ними можно добавить вывод $arFields и die() после вывода.
1
Андрей Кругликов
Сообщение не промодерировано, возможны ошибки и неточности.
ыавыаываыва
2
Андрей Кругликов
Сообщение не промодерировано, возможны ошибки и неточности.
а можно дописать статью до адекватного состояния? документация ОБЯЗАНА содержать описание ВСЕХ параметров и поведений. представьте что документация к php была бы написана так, как вы пишите документацию к битрикс. не получается представить, да? почему тысячи разработчиков должны суммарно тратить десятки тысяч часов потому, что вам лень нормально документацию писать? где описание параметра ACTIONS ? какие ключи в нем могут быть? как они между собой сочитаются? а параметр CONDITIONS? в следующий раз как возникнет вопрос по php, линуксу, или мак оси - полезьте в ядро почитайте, не гуглите. вы же нормальные разрабочики? читайте ядро
1
dapweb

Создание скидки на один или несколько товаров.

Код
\Bitrix\Main\Loader::includeModule('sale');

$DISCOUNT_VALUE = 40;//процент скидки
$arItemIds = [1, 2, 3];//Массив с ID элементов товаров

$arDiscountFields = [
   "LID" => SITE_ID,
   "SITE_ID" => SITE_ID,
   "NAME"=> "Скидка ".$DISCOUNT_VALUE."%",
   "DISCOUNT_VALUE" => $DISCOUNT_VALUE,
   "DISCOUNT_TYPE" => "P",
   "LAST_LEVEL_DISCOUNT" => "Y",
   "LAST_DISCOUNT" => "Y",
   "ACTIVE" => "Y",
   "CURRENCY" => "EUR",
   "USER_GROUPS" => [2],
   'ACTIONS' => [
      "CLASS_ID" => "CondGroup",
      "DATA" => [
         "All" => "AND"
      ],
      "CHILDREN" => [
         [
            "CLASS_ID" => "ActSaleBsktGrp",
            "DATA" => [
               "Type" => "Discount",
               "Value" => $DISCOUNT_VALUE,
               "Unit" => "Perc",
               "Max" => 0,
               "All" => "OR",
               "True" => "True",
            ],
            "CHILDREN" => [
               [
                  "CLASS_ID" => "ActSaleSubGrp",
                  "DATA" => [
                     "All" => "AND",
                     "True" => "True",
                  ],
                  "CHILDREN" => [
                     [
                        "CLASS_ID" => "CondIBElement",
                        "DATA" => [
                           "logic" => "Equal",
                           "value" => $arItemIds,
                        ]
                     ]
                  ]
               ]
            ]
         ]
      ]
   ],
   "CONDITIONS" =>  [
      'CLASS_ID' => 'CondGroup',
      'DATA' => [
         'All' => 'AND',
         'True' => 'True',
      ],
      'CHILDREN' => [
         [
            "CLASS_ID" => "CondBsktProductGroup",
            "DATA" => [
               "Found" => "Found",
               "All" => "OR",
            ],
            "CHILDREN" => [
               [
                  "CLASS_ID" => "CondIBElement",
                  "DATA" => [
                     "logic" => "Equal",
                     "value" => $arItemIds,
                  ]
               ]
            ]
         ],
      ],  
   ]
];
$iDiscountNumber = \CSaleDiscount::Add($arDiscountFields);
if(IntVal($iDiscountNumber) > 0)
   \Bitrix\Sale\Internals\DiscountGroupTable::updateByDiscount($DISCOUNT_ID, [2], "Y", true);//Обновить параметры для группы пользователей с ID = 2, только тогда скидка появляется в списке скидок в админке

******
Комментарий от разработчика: не вполне корректный пример, группы надо сразу передавать.
0
Дима Парфенов
В моем случае стояла задача -> 1 товар = 1 правило для корзины
Цитата

   //Собираем массив для CSaleDiscount:Add
$Conditions = array (
 'CLASS_ID' => 'CondGroup',
 'DATA' =>
 array (
   'All' => 'AND',
   'True' => 'True',
 ),
 'CHILDREN' =>
 array (
 ),
);

   $arSD = [
       "LID" => "s1",
       "NAME" => $code . "_skidka",
       "LAST_DISCOUNT" => "N",
       "MODIFIED_BY" => $USER->GetID(), // элемент изменен текущим пользователем
       "ACTIVE" => "Y",
       'ACTIONS' => [
           'CLASS_ID' => 'CondGroup',
           'DATA' => ['All' => 'AND'],
           'CHILDREN' => [
               [
                   'CLASS_ID' => 'ActSaleBsktGrp',
                   'DATA' => [
                       'Type' => 'Closeout', // фиксированная цена
                       'Value' => $newprice, // сама цена
                       'Unit' => 'CurEach', // для каждого товара
                       'Max' => 1,
                       'All' => 'AND',
                       'True' => 'True'
                   ],
                   'CHILDREN' => [
                       [
                           'CLASS_ID' => 'CondIBElement', // это я взял из документации по методу CCatalogDiscount::Add
                           'DATA' => [
                               'logic' => 'Equal', // только равно
                               'value' => [$PRODUCT_ID]  // коду продукта
                           ]
                       ]
                   ]
               ]
           ]
       ],
       "CONDITIONS"=>$Conditions,
       "USER_GROUPS" => array(2), // группы пользователей, можно просмотреть в настройки -> пользователи -> группы
       "CURRENCY" => "RUB"
   ];
   if ($newprice > 0) {
       addDiscount($arSD);
   }
function addDiscount($arFields)
{
   if ($ID = CSaleDiscount::Add($arFields))
       echo "new ID disctount {$ID}";
   else
       echo "error {$ID}";

}
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх