Возможности кассового ПО Artix позволяют организовывать маркетинговые акции, используя функции для задания условий при работе с товарами. Товарами считаются товары в чеке, имеющие одинаковые коды и штрих-коды.

Опции товара

hasInventOptions – Наличие опции у товара

hasInventOptions([options]) – функция сработает, если товару назначена указанная опция.

Параметры функции:

  • options – опция товара. 

Опция - это признак товара, который задается при добавлении товара в базу, например, скоропортящийся, уцененный и т. д.

Пример
cf.hasInventOptions([u"уцененный"])
Скидка сработает, если товар имеет признак "уцененный". Скидка применяется на позицию.
Если в функцию передан список опций, то функция сработает как только будет обнаружено первое совпадение: < i признак из списка > = < j признак товара >.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

inventInCheckByOption – Наличие товара с опцией

inventInCheckByOption([options]) – функция сработает, если в чеке есть товар с указанной опцией.

Параметры функции:

  • options – опция товара.  

Опция - это признак товара, который задается при добавлении товара в базу, например, скоропортящийся, уцененный и т. д.

Пример
cf.inventInCheckByOption([u"уцененный"])
Скидка сработает на каждую позицию в чеке или на чек (в зависимости от объекта скидки), если в документе будет хотя бы один товар с признаком "уцененный".
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

inventQuantInCheckByOption – Количество товаров в чеке с указанной опцией 

inventQuantInCheckByOption(options)функция сработает, если количество товаров с указанными опциями равно (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • options – опции товара.
Пример
cf.inventQuantInCheckByOption([u"num"]) == 2. 
Скидка с данным условием сработает, если количество товаров в чеке с опцией "num" равно 2.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

inventSumInCheckByOption – Сумма товаров в чеке с указанной опцией  

inventSumInCheckByOption(options,withPartOfKit) – функция сработает, если сумма товаров с указанной опцией равна (<,>, <=, >=, !=) выбранному значению. 

Параметры функции:

  • options – опции товара;
  • withPartOfKit – параметр для учета товаров, являющихся частью комплекта (набора). При значении параметра withPartOfKit = True функция при подсчете количества позиций товара с опцией учитывает позиции, которые включены в набор. 
Пример
cf.inventSumInCheckByOption([u"num"],False) == 100 
Скидка с данным условием сработает, если сумма цен на все товары в чеке с опцией "num" равна 100. При подсчете количества товаров не учитываются товары, входящие в наборы.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

inventQuantInCheckWithAllOptions – Количество товаров в чеке со всеми указанными опциями 

inventQuantInCheckWithAllOptions(options,withPartOfKit) – функция сработает, если количество товаров с указанными опциями равна (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • options – опции товара;
  • withPartOfKit – параметр для учета товаров, являющихся частью комплекта (набора). При значении параметра withPartOfKit = True функция при подсчете количества позиций товара с опцией учитывает позиции, которые включены в набор. 
Пример
cf.inventQuantInCheckWithAllOptions([u"уценка",u"распродажа"],True) <= 4 
Скидка с таким условием сработает, если количество товаров в чеке с опциями "уценка" и "распродажа" меньше либо равно 4. При подсчете количества товаров учитываются товары, входящие в комплект.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

inventSumInCheckWithAllOptions – Сумма товаров в чеке со всеми указанными опциями 

inventSumInCheckWithAllOptions(options,withPartOfKit)функция сработает, если сумма товаров с указанными опциями равна (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • options – опции товара;
  • withPartOfKit – параметр для учета товаров, являющихся частью комплекта (набора). При значении параметра withPartOfKit = True функция при подсчете количества позиций товара с опцией учитывает позиции, которые включены в набор.
Пример
cf.inventSumInCheckWithAllOptions([u"num"],True) <= 100
Скидка с таким условием сработает, если сумма товаров в чеке с опцией "num" меньше либо равна 100, при этом учитываются товары, входящие в комплект.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

Код товара

inventInCheckByCode – Наличие в чеке товара с указанным кодом

inventInCheckByCode([code]) – функция сработает, если в чеке присутствует товар с указанным кодом.

Параметры функции:

  • code – код товара. 
Пример
cf.inventInCheckByCode([u"11"])
Если в чеке есть товар с кодом "11", то сработает скидка.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

inventSumInCheckByCode – Сумма товаров в чеке с указанным кодом

inventSumInCheckByCode(code) – функция сработает, если сумма товаров в чеке  с указанным кодом равна (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • code – код товара.
Пример
cf.inventSumInCheckByCode([u"102"]) >= 22.0 
Скидка с данным условием сработает, если сумма цен всех товаров в чеке с кодом 102 будет больше или равна 22.0.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

inventQuantInCheckByCode – Количество товара в чеке с указанным кодом 

inventQuantInCheckByCode(code) – функция сработает, если количество товара в чеке с указанным кодом равно (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • code – код товара.
Пример
cf.inventQuantInCheckByCode([u"102"]) == 2 
Скидка с данным условием сработает, если количество всех товаров в чеке с кодом 102 будет равно 2.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

hasInventAllCodes – Количество товаров в чеке с указанным кодом

hasInventAllCodes([codes], requiredCount) – функция сработает, если количество каждого из указанных товаров в чеке больше или равно указанному значению.

Параметры функции:

  • codes – список кодов товаров;
  • requiredCount – количество вхождений каждого товара в чек.
Пример
cf.hasInventAllCodes(["1","100"],2)
Скидка с данным условием сработает в том случае, если в чеке будет присутствовать 2 товара (или более) с кодом "1" и 2 товара (или более) с кодом "100".
При наличии в чеке 1 товара с кодом "1" и 2 товаров с кодом "100" скидка не сработает.

Функция учитывает количество товара, входящее в позицию.

Параметр requiredCount не обязателен, если его не указывать, то проверяется вхождение в чек по 1 единице каждого товара из списка.

Штрих-код товара

inventInCheckByBcode – Наличие в чеке товара с указанным штрих-кодом

inventInCheckByBcode([bcode]) – функция сработает, если в чеке присутствует товар с указанным штрих-кодом.

Параметры функции:

  • bcode – штрих-код товара. 
Пример
cf.inventInCheckByBcode([u"4607032142362"])
Скидка сработает, если в чеке имеется товар со штрих-кодом "4607032142362".
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.


inventSumInCheckByBcode – Сумма товаров в чеке с указанным штрих-кодом

inventSumInCheckByBcode(code) – функция сработает, если сумма товаров в чеке  с указанным штрих- кодом равна (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • bcode – штрих-код товара.
Пример
cf.inventSumInCheckByBCode([u"4607032142362"]) == 2.20 
Скидка с данным условием сработает, если сумма цен всех товаров в чеке с штрих-кодом 4607032142362 будет равна 2.20.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

inventQuantInCheckByBcode – Количество товаров в чеке с указанным штрих-кодом

inventQuantInCheckByBcode(bcode) – функция сработает, если количество товаров в чеке  с указанным штрих-кодом равно (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • bcode – штрих-код товара.
Пример
cf.inventQuantInCheckByBcode([u"4607032142362"]) == 2 
Скидка с данным условием сработает, если количество всех товаров в чеке со штрих-кодом 4607032142362 будет равно 2.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

Каталог

hasInventCatalogs – Товар входит в каталог

hasInventCatalogs(catalog) – функция сработает, если товар входит в указанный каталог.

Параметры функции:

  • catalog – код каталога. 

Каталог создается для объединения некоторого списка товаров, на которые планируется скидка.

Пример
cf.hasInventCatalogs([u"1"])
В данном случае скидка сработает на все товары, входящие в каталог в кодом 1.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

hasInventAllCatalogs – Товар входит во все каталоги

hasInventAllCatalogs(catalogs) – функция сработает, если товар входит во все указанные каталоги.

Параметры функции:

  • catalogs – список кодов каталогов. 
Пример
cf.hasInventAllCatalogs([u"1"], [u"2"])
Скидка сработает, если товар входит одновременно в каталоги с кодами 1 и 2.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

inventQuantInCheckByCatalog – Количество товаров в чеке с указанным каталогом

inventQuantInCheckByCatalog(catalog, withPartOfKit) – функция сработает, если количество товаров в чеке с указанным каталогом равно (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • catalog – код каталога;
  • withPartOfKit – параметр для учета товаров, являющихся частью комплекта (набора). При значении параметра withPartOfKit = True функция при подсчете количества позиций товара с опцией учитывает позиции, которые включены в набор. 
Пример
cf.inventQuantInCheckByCatalog([u"num"],True) == 1 
Скидка с данным условием сработает, если количество товаров в чеке с каталогом "num" равно 1. При подсчете количества позиций учитываются позиции с товарами, входящими в набор.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

inventSumInCheckByCatalog – Сумма товаров в чеке с указанным каталогом

inventSumInCheckByCatalog(catalog, withPartOfKit) – функция сработает, если сумма товаров в чеке с указанным каталогом равна (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • catalog – код каталога;
  • withPartOfKit – параметр для учета товаров, являющихся частью комплекта (набора). При значении параметра withPartOfKit = True функция при подсчете количества позиций товара с опцией учитывает позиции, которые включены в набор. 
Пример
cf.inventSumInCheckByCatalog([u"num"],True) != 100 
Скидка с данным условием сработает, если сумма товаров в чеке с каталогом "num" не равна 100. При подсчете количества позиций учитываются позиции с товарами, входящими в набор.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

inventQuantInCheckWithAllCatalogs – Количество товаров в чеке со всеми указанными каталогами

inventQuantInCheckWithAllCatalogs(catalog, withPartOfKit)функция сработает, если количество товаров в чеке со всеми указанными каталогами равно (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • catalog – код каталога;
  • withPartOfKit – параметр для учета товаров, являющихся частью комплекта (набора). При значении параметра withPartOfKit = True функция при подсчете количества позиций товара с опцией учитывает позиции, которые включены в набор.
Пример
cf.inventQuantInCheckWithAllCatalogs([u"num1, num2"],True) ==  2.00 
Скидка с данным условием сработает, если количество товаров в чеке, входящих одновременно в каталоги "num1" и "num2", равно 2. При подсчете количества позиций учитываются позиции с товарами, входящими в набор.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

inventSumInCheckWithAllCatalogs – Сумма товаров в чеке со всеми указанными каталогами

inventSumInCheckWithAllCatalogs(catalog, withPartOfKit)функция сработает, если сумма товаров в чеке со всеми указанными каталогами равна (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • catalog – название каталога;
  • withPartOfKit – параметр для учета товаров, являющихся частью комплекта (набора). При значении параметра withPartOfKit = True функция при подсчете количества позиций товара с опцией учитывает позиции, которые включены в набор.
Пример
cf.inventSumInCheckWithAllCatalogs([u"11"],True) <= 140 
Скидка с данным условием сработает, если сумма товаров из каталога 11 меньше либо равна 140, при этом учитываются товары, являющиеся частью комплекта.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

Группа товаров

inventQuantInCheckByGroup – Количество товаров с указанными группами

inventQuantInCheckByGroup(groups, withPartOfKit)функция сработает, если количество товаров с указанной группой в чеке  равно (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • groups – список кодов групп;
  • withPartOfKit – параметр для учета товаров, являющихся частью комплекта (набора). При значении параметра withPartOfKit = True функция при подсчете количества позиций товара с опцией учитывает позиции, которые включены в набор.
Пример
cf.inventQuantInCheckByGroup([u"1",u"2"],False) == 3
Скидка с таким условием сработает, если количество товаров, относящихся к группам "1" и/или "2" равно 3, при этом товары, являющиеся частью комплекта, не учитываются.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

inventSumInCheckByGroup – Сумма товаров с указанными группами

inventSumInCheckByGroup(groups, withPartOfKit) – функция сработает, если сумма товаров с указанной группой в чеке  равна (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • groups – список кодов групп;
  • withPartOfKit – параметр для учета товаров, являющихся частью комплекта (набора). При значении параметра withPartOfKit = True функция при подсчете количества позиций товара с опцией учитывает позиции, которые включены в набор.
Пример
cf.inventSumInCheckByGroup([u"1",u"2"],True) >= 100 
Скидка с данным условием сработает, если сумма товаров, относящихся к группам "1" и "2" больше либо равна 100, при этом учитываются товары, входящие в наборы.
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

hasInventGroup – Товар входит в указанную группу

hasInventGroup(group) – функция сработает, если товар входит в указанную группу.

Параметры функции:

  • group – коды группы товаров. 
Пример
cf.hasInventGroup([u"1"])
Скидка с таким условием сработает, если товар входит в группу с кодом 1.

Если в параметре функции указано несколько групп, то функция проверяет наличие у товара хотя бы одной из указанных групп, а также всех подгрупп, входящих в указанные группу.

При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

Другие

inventQuantInCheck – Количество товаров в чеке

inventQuantInCheck(uniteFractional)функция сработает, если количество товаров в чеке  равна (<,>, <=, >=, !=) выбранному значению.

Параметры функции:

  • uniteFractional – правила подсчета позиций весового товара.
    • При значении uniteFractional = True функция считает за единицу один весовой товар, даже если он был добавлен в чек несколькими позициями (объединяет при подсчете несколько позиций с одним весовым товаром в одну).
    • При значении uniteFractional = False функция считает за единицу каждый добавленный в чек весовой товар. 
Пример
cf.inventQuantInCheck(True) == 3
Скидка с таким условием сработает, если количество товаров в чеке равно 3. 
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

everyNextNumber – На каждый N-й товар в чеке

everyNextNumber(number, desc) – скидка сработает на каждый N-й товар в чеке.

Параметры функции:

  • number – номер позиции;
  • desc – сортировка товаров по цене.
    • При значении параметра desc = True скидка предоставляется на каждый N-й товар по убыванию цены.
    • При значении desc = False скидка предоставляется на каждый N-й товар по возрастанию цены.
Пример
Для того чтобы дать скидку на каждую 2-ю позицию в чеке на 5% необходимо в условие скидки добавить:
object["posnum"] in cf.everyNextNumber(2,True)
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

cheapGoodsWithOptions – На N товаров из M с признаком

cheapGoodsWithOptions(count, extops, rate, scount, toCheapest) – скидка сработает на N товаров из M с указанным признаком.

Для функции используется только суммовая расчетная ставка.

Параметры функции:

  • count – M товаров с признаком;
  • extopsпризнак, указывающий на то, что товар участвует в акции, задаваемой данной функцией. Является обязательным параметром;
  • rate – величина скидки в процентах;
  • scount – N количество товаров из M, к которым применяется скидка;
  • toCheapest – позиции, к которым будет применена скидка.
    • При значении параметра  toCheapest = True скидка применяется только к самым дешевым товарам.
    • При значении toCheapest = False скидка применяется ко всем товарам с опциями.

Функция разворачивает чек на позиции, выбирает все позиции с опциями, сортирует эти позиции по цене, выбирает scount из count товаров и рассчитывает скидку на товары. Скидка применяется ко всем товарам, участвующим в акции, или только к самым дешевым в соответствии с параметрами функции. 

Пример
Для того чтобы дать скидку в размере 50% на 2 товара из 3-х с признаком "num" необходимо:
создать условие object["posnum"] in cf.cheapGoodsWithOptions(3, [u"num"], 50, 2, False)
сделать расчетную скидку по сумме rf.cheapGoodsWithOptions(3, [u"num"], 50, 2, False)[object["posnum"]]
При задании акции необходимо учитывать, что воздействие функции применяется к позициям с товарами, входящими в набор.

Если в значении extops используются символы кириллицы, то при задании функции перед текстом необходимо ставить символ 'u'.

Например, rf.everyNextNumberOnGoods(6, [u'Акция "Скидка на 3 товара из 6"'], 50,3).

expensiveGoods – Скидка на самый дорогой товар дешевле N руб


expensiveGoods(countGoods, conditionSum, resultSum, ignorePosWithPriceEqualMin) – функция установит цену со скидкой на N товаров дешевле или равной пороговой суммы.

Для функции используется только суммовая расчетная ставка.

Параметры функции:

  • countGoods – количество товаров в чеке, на которые дается скидка;
  • conditionSum – пороговая цена для товара. Цена товара за 1шт/кг должна быть меньше пороговой или равна ей, тогда к товару будет применена скидка;
  • resultSum – цена товара, которую будет иметь товар после применения скидки;
  • ignorePosWithPriceEqualMin – игнорировать позицию с ценой равной минимальной цене.
    • При значении параметра ignorePosWithPriceEqualMin = True функция игнорирует товары, для которых цена равна минимальной цене (true значение по умолчанию).
    • При значении ignorePosWithPriceEqualMin = False функция будет учитывать товары, для которых цена равна минимальной цене. Чтобы на такой товар была дана скидка, необходимо в утилите администрирования Yuki включить опцию "Не учитывать минимальную цену".

Функция разбирает чек по товарам и сортирует их по цене. Выбирается countGoods товаров из самых дорогих товаров, имеющих цену ниже или равную conditionSum. Для выбранных товаров задается цена resultSum

Пример
Чтобы дать скидку на 2 самых дорогих товара в чеке дешевле 35 рублей и установить цену после скидки в 1 рубль необходимо:
создать условие object["posnum"] in cf.expensiveGoods(2, 35, 1, True)
сделать расчетную скидку по сумме rf.expensiveGoods(2, 35, 1, True)[object["posnum"]]

Функция не применяется для товаров, входящих в набор.

Если цена самого дорогого товара равна минимальной, то товар не будет учтен в скидке. Функция выберет следующий по цене товар после самого дорогого.

Если у товара при добавлении в чек была изменена цена:

  • применен модификатор,
  • цена товара была выбрана из списка,
  • в свойствах товара настроен обязательный ввод цены,

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

Если к товару было применено несколько скидок, то при расчете скидки на самый дорогой товар дешевле N рублей, используется первоначальная цена.

Перед применением скидки к весовому товару функция выбирает все позиции с весовым товаром, имеющим одинаковый штрих-код, и суммирует общий вес. Весовой товар считается за 1 товар. Скидка будет применена к 1 кг товара независимо от того, какое количество товаров в чеке задано в условиях функции, т.е. если в чеке 4 кг товара, то скидка будет применена только к 1 кг товара. Для весового товара функция проверяет цену за 1 кг, а не стоимость позиции. 
Пример поведения функции

В скидке задана функция с условиями:

  • количество товаров в чеке - 2
  • пороговая цена для товара - 35 рублей
  • цена товара после применения скидки - 1 рубль

Чек состоит из позиций:

  1. Картофель 0,5 кг*30 рублей = 15 рублей
  2. Картофель 1,5 кг*30 рублей = 45 рублей
  3. Молоко 2 шт*25 рублей = 50 рублей
  4. Хлеб 1 шт*36 рублей = 36 рублей

Функция выбирает следующий товар:

  1. Картофель
  2. Молоко
  3. Молоко
  4. Хлеб

Скидка будет применена к 1 кг картофеля и 1 шт молока.

В чеке будут выполнен следующий перерасчет:

  1. Картофель 0,5 кг * 30 рублей = 15 рублей
  2. Картофель 1,5 кг * 30 рублей - 29 рублей (скидка) = 16 рублей (0,5 кг * 30 рублей + 1 кг * 1 рубль = 16 рублей)
  3. Молоко 1 шт * 25 рублей - 24 рубля (скидка) = 1 рубль
  4. Молоко 1 шт * 25 рублей = 25 рублей
  5. Хлеб 1 шт * 36 рублей = 36 рублей

expensiveGoodsFromCatalogs – Скидка на самый дорогой товар из каталога(ов)

expensiveGoodsFromCatalogs(countGoods, conditionSum, resultSum, ignorePosWithPriceEqualMin) – функция установит цену со скидкой на N товаров из каталога(ов).

Для функции используется только суммовая расчетная ставка.

Параметры функции:

  • countGoods – количество товаров в чеке, на которые дается скидка;
  • conditionCatalogs – список каталогов для которых действует скидка. (Пример: [u"2"] или [u"1",u"2",u"4"]);
  • resultSum – цена товара, которую будет иметь товар после применения скидки;
  • ignorePosWithPriceEqualMin – игнорировать позицию с ценой равной минимальной цене.
    • При значении параметра ignorePosWithPriceEqualMin = True функция игнорирует товары, для которых цена равна минимальной цене (true значение по умолчанию).
    • При значении ignorePosWithPriceEqualMin = False функция будет учитывать товары, для которых цена равна минимальной цене. Чтобы на такой товар была дана скидка, необходимо в утилите администрирования Yuki включить опцию "Не учитывать минимальную цену".

Функция разбирает чек по товарам и сортирует их по цене. Выбирается countGoods товаров из самых дорогих товаров, входящих в каталог(и) conditionCatalogs. Для выбранных товаров задается цена resultSum

Пример
Чтобы дать скидку на 2 самых дорогих товара из каталога 2 и установить цену после скидки в 1 рубль необходимо:
создать условие object["posnum"] in cf.expensiveGoodsFromCatalogs(2, [u"2", u"3"], 1, True)
сделать расчетную ставку по сумме rf.expensiveGoodsFromCatalogs(2, [u"2", u"3"], 1, True)[object["posnum"]]

Функция не применяется для товаров, входящих в набор.

Если цена самого дорогого товара равна минимальной, то товар не будет учтен в скидке. Функция выберет следующий по цене товар после самого дорогого.

Если у товара при добавлении в чек была изменена цена:

  • применен модификатор,
  • цена товара была выбрана из списка,
  • в свойствах товара настроен обязательный ввод цены,

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

Если к товару было применено несколько скидок, то при расчете скидки на самый дорогой товар дешевле N рублей, используется первоначальная цена.

Перед применением скидки к весовому товару функция выбирает все позиции с весовым товаром, имеющим одинаковый штрих-код, и суммирует общий вес. Весовой товар считается за 1 товар. Скидка будет применена к 1 кг товара независимо от того, какое количество товаров в чеке задано в условиях функции, т.е. если в чеке 4 кг товара, то скидка будет применена только к 1 кг товара. Для весового товара функция проверяет цену за 1 кг, а не стоимость позиции. 
Пример поведения функции

В скидке задана функция с условиями:

  • количество товаров в чеке – 2.
  • каталоги для которых действует скидка – 2, 3.
  • цена товара после применения скидки – 1 рубль.

Чек состоит из позиций:

  1. Сок Манго 1 шт*100 рублей = 100 рублей (каталог 2).
  2. Сок Персик 1шт*85 рублей = 85 рублей (каталог 2).
  3. Молоко 2 шт*25 рублей = 50 рублей (каталог 1).
  4. Хлеб 1 шт*36 рублей = 36 рублей (каталог 1).
  5. Фанта 1 шт*92 рублей = 92 рублей (каталог 3).

Функция выбирает следующий товар:

  1. Сок Манго.
  2. Сок Персик.
  3. Фанта.

Скидка будет применена к товарам "Сок Манго" и "Фанта".

В чеке будут выполнен следующий перерасчет:

  1. Сок Манго 1 шт*100 рублей - 99 рублей (скидка) = 1 рубль.
  2. Сок Персик 1шт*85 рублей = 85 рублей.
  3. Молоко 2 шт*25 рублей = 50 рублей.
  4. Хлеб 1 шт*36 рублей = 36 рублей.
  5. Фанта 1 шт*92 рублей - 91 рубль (скидка) = 1 рубль.


everyNextNumberOnGoods – Скидка на каждый N-й товар не более M раз

everyNextNumberOnGoods(number, countLimit, percent, extops) – функция даст скидку на каждый N-й товар, имеющий дополнительные опции, не более M раз.

Для функции используется только суммовая расчетная ставка.

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

Воздействие функции применяется к итоговой цене товара с учетом применения скидок и бонусов, модификаторов и других изменений в чеке.

Воздействие функции не применяется к товарам, входящим в набор.

Параметры функции:

  • number – кратность товара, указывает на какой по счету товар будет применена скидка;
  • countLimitколичество вхождений, показывающее на сколько кратных повторений товара будет предоставлена скидка;
  • percentразмер скидки, выраженный в процентах;
  • extops – признак товара, участвующего в акции, может принимать любые значения, указывается в параметрах функции и дополнительных опциях товара.

Дополнительные опции товара:

  • extops – признак, указывающий на то, что товар участвует в акции, задаваемой данной функцией. Является обязательным параметром;

  • ddmultiplicity=ЗНАЧЕНИЕ – кратность товара, аналогична параметру number;
  • ddmaxcount=ЗНАЧЕНИЕ – количество вхождений, аналогично параметру countLimit;
  • ddpercent=ЗНАЧЕНИЕ – размер скидки, аналогичен параметру percent.

Дополнительные опции товара необходимо записывать в одну строку.

Параметры, указанные в товаре, имеют приоритет перед параметрами функции. Если в свойствах товара указан только признак товара, участвующего в акции, а другие опции отсутствуют, то при расчете скидки будут применены параметры функции. Если в свойствах товара задана только часть опций для расчета скидки, то недостающие значения также будут получены из параметров функции.

Функция разбирает чек на позиции, выбирает товары с признаками группирует их по штрих-коду. Скидка в X процентов дается на каждый N-й товар M раз. В чеке позиция со скидкой поднимается вверх списка идентичных товаров.

Пример
Чтобы дать скидку 50% на каждый 2-й товар с признаком deepdiscount, но ограничить предоставление скидки 4 вхождениями, необходимо:
создать условие object["posnum"] in cf.everyNextNumberOnGoods(2, 4, 50,["deepdiscount"])
сделать расчетную скидку по сумме rf.everyNextNumberOnGoods(2, 4, 50,["deepdiscount"])[object["posnum"]]
Скидка в этом случае сработает не более 4 раз (countLimit <= 4), т.е. будет применена к каждому 2, 4, 6 и 8 товару с признаком deepdiscount, ко всем последующим скидка не применяется. Следует учесть, что описанным образом скидка будет применена для товаров с одинаковым штрих-кодом. Если в чеке будет присутствовать 3 товара с признаком deepdiscount, но разными штрих-кодами, то скидка не будет применена ни разу.
Если в свойствах товара помимо признака deepdiscount будут заданы дополнительные опции ddmultiplicity=3, ddmaxcount=2, ddpercent=30, то в этом случае скидка в размере 30% (ddpercent=30) будет применена к каждому 3 товару (ddmultiplicity=3) не более 2 раз (ddmaxcount=2). Параметры функции будут игнорироваться при расчете.
Для весового товара скидка предоставляется на каждый заданный килограмм. Необходимо учитывать, что в дополнительных опциях товара параметр ddmultiplicity не может принимать дробные значения, т.е. нельзя сделать каждые 0,5 кг акционными. При работе с чеком скидка раскидывается на все позиции, в которых имеется такой товар, пропорционально их стоимости.

Если в значении extops используются символы кириллицы, то при задании функции перед текстом необходимо ставить символ 'u'.

Например, rf.everyNextNumberOnGoods(6, 4, 50, [u'Акция "Подарок к празднику"']).

Пример поведения функции

В скидке задана функция с условиями:

  • скидка срабатывает на каждый 2 товар
  • количество вхождений - 4
  • процент скидки - 50

Товар 1 (молоко) имеет признак deepdiscount, другие параметры для него не заданы.

Товар 2 (картофель) имеет признак deepdiscount и следующие дополнительные параметры:

  • ddmultiplicity=2
  • ddmaxcount=2
  • ddPercent=10

Чек состоит из позиций:

  1. молоко 3 пакета*20 рублей = 60 рублей
  2. картофель 2 кг*100 рублей = 200 рублей
  3. картофель 1,5 кг*100 рублей = 150 рублей
  4. картофель 0,3 кг*100 рублей = 30 рублей

Функция выбирает товары, имеющие признак deepdiscount, группирует его по штрих-кодам. Скидка будет применена на следующие товары:

  1. молоко 1 шт
  2. молоко 1 шт (50%)
  3. молоко 1 шт
  4. картофель 1 кг
  5. картофель 1 кг (10%)
  6. картофель 1 кг
  7. картофель 0,8 кг (скидка предоставлена не будет, т.к. значение дробное < 1 кг)

В чеке будут выполнен следующий перерасчет:

  1. молоко 3 пакета*50 рублей - 10 рублей (скидка) = 50 рублей
  2. картофель 2 кг*100 рублей - 5,26 рубля (скидка) = 194,74 рублей
  3. картофель 1,5 кг*100 рублей - 3,95 рубля (скидка) = 146,05 рублей
  4. картофель 0,3 кг*100 рублей - 0,79 рублей (скидка) = 29,21 рублей

Скидка на картофель равна 10% от стоимости 2-го килограмма и составляет 10 рублей, скидка распределена между позициями пропорционально их стоимости.

limitCount – Скидка на ограниченное количество товара в чеке

limitCount(maxCount, index) функция предоставит скидку равную разнице основной и индексной цены на ограниченное количество товара в чеке.

Для функции используется только суммовая расчетная ставка.

Параметры функции:

  • maxCount – количество товара в чеке, на которое будет предоставлена скидка. Может принимать целые и дробные значения, применяемые к штучному и весовому товару. При дробном значении параметра применяется к тому количеству товара, которое указано в параметре;
  • index – индекс дополнительной цены.

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

Без задания дополнительных ограничивающих условий скидка будет предоставлена на все товары в чеке, имеющие дополнительную цену с заданным индексом.

Функция может быть использована только для условий в скидках на позицию.

Пример
Чтобы предоставить N количества товара по скидке равной разнице основной и индексной цены, необходимо:
создать условие object['posnum'] in cf.limitCount(4,2)
создать расчетную скидку по сумме rf.limitCount(4,2)[object['posnum']]
Скидка в этом случае сработает на все товары, количеством до 4 единиц (шт или кг), и присвоит им скидку равную разнице основной цены и цены с индексом 2.

Функция не применяется для товаров, входящих в набор, и товаров, не имеющих дополнительной цены. Для весовых товаров скидка применяется на все товары до заданного количества.

Пример поведения функции

В скидке заданы условия:

1. Функция "Скидка на ограниченное количество товара в чеке" object['posnum'] in cf.limitCount(5, 1)

2. Условие для товарных позиций "Штрих-код товара равен" object["tmc"]["barcode"] in ["33333"]

Для товара 1 (мандарины) задана дополнительная цена с индексом 1, равная 70 рублям. Штрих-код мандаринов 33333.

Для товара 2 (елочные шары) задана дополнительная цена с индексом 1, равная 50 рублям. Штрих-код елочных шаров 44444.

Чек состоит из позиций:

  1. Елочный шар 1 шт*85 рублей = 85 рублей
  2. Елочный шар 5 шт*85 рублей = 425 рублей
  3. Мандарины 1,5 кг*100 рублей = 150 рублей
  4. Мандарины 3,2 кг*100 рублей = 320 рублей
  5. Мандарины 2 кг*100 рублей = 200 рублей

Функция "Скидка на ограниченное количество товара в чеке" выбирает товары, имеющие дополнительную цену с индексом 1. Под этот критерий подходят оба товара в чеке.

В условии "Штрих-код товара равен" выбирается только товар, имеющий штрих код 33333.

Обоим условиям соответствует только товар "Мандарины".

В чеке будет выполнен следующий перерасчет:

  1. Елочный шар 1 шт*85 рублей = 85 рублей
  2. Елочный шар 5 шт*85 рублей = 425 рублей
  3. Мандарины 1,5 кг*100 рублей - 45 рублей (скидка) = 105 рублей
  4. Мандарины 3,2 кг*100 рублей - 96 рублей (скидка) = 224 рубля
  5. Мандарины 2 кг*100 рублей - 9 рублей (скидка) = 191 рубль

В результате перерасчета скидка будет предоставлена только на 5 кг мандаринов.

cheapGoodsFromCatalog – На N товаров из M в каталоге

cheapGoodsFromCatalog(count, extops, rate, scount, toCheapest) – скидка сработает на N товаров из M в каталоге.

Скидка предоставляется только на позицию. Для функции используется только суммовая расчетная ставка.

Параметры функции:

  • count – M товаров из каталога;
  • extops – идентификаторы каталогов, товары из которых участвуют в акции;
  • rate – величина скидки в процентах;
  • scount – N количество товаров из M, к которым применяется скидка;
  • toCheapest – позиции, к которым будет применена скидка.
    • При значении параметра  toCheapest = True скидка применяется только к самым дешевым товарам.
    • При значении toCheapest = False скидка распределяется между всеми товарами из каталога.

Функция разворачивает чек на позиции, выбирает все позиции из каталога, сортирует эти позиции по цене, выбирает scount из count товаров и рассчитывает скидку на товары. Скидка применяется ко всем товарам, участвующим в акции, или только к самым дешевым в соответствии с параметрами функции. 

Пример
Для того чтобы дать скидку в размере 50% на 2 товара из 3-х, которые содержатся хотя бы в одном из каталогов с кодом 1 или 3 необходимо:
создать условие object["posnum"] in cf.cheapGoodsFromCatalog(3, [1,3], 50, 2, False)
сделать расчетную ставку по сумме rf.cheapGoodsFromCatalog(3, [1,3], 50, 2, False)[object["posnum"]]
При предоставлении скидки на весовые товары функция определяет 1 позицию весового товара, как 1 единицу штучного товара.

catalogGoods – Назначить на товар цену из каталога

Скидка предоставляется только на позицию. Для функции используется только суммовая расчетная ставка.

Параметры функции:

  • catalogGoods(catalogid) – на товар назначается цена из каталога;
  • catalogid – код (идентификатор) каталога.

Функция находит в чеке товары, входящие в каталог, и предоставляет для них скидку (надбавку), равную разнице между начальной ценой и ценой товара в каталоге. В результате применения функции цена товара становится равной цене в каталоге. Если цена товара в каталоге не задана, то функция не срабатывает.

Пример
Для того чтобы на товар, входящий в каталог 1, назначить цену, указанную в этом каталоге, необходимо:
создать условие object["posnum"] in cf.catalogGoods("1") 
сделать расчетную ставку по сумме rf.catalogGoods("1")[object["posnum"]]

progressiveDiscount – Прогрессирующая скидка

progressiveDiscount(minDiscount, maxDiscount, discountStep, catalogs) – на товары из каталога будет предоставлена прогрессирующая скидка (начислены баллы).

Скидка предоставляется только на позицию. Для функции используется только суммовая расчетная ставка. 

Параметры функции:

  • minDiscount – минимальное значение скидки (в процентах);
  • maxDiscount – максимальное значение скидки (в процентах);
  • discountStep – шаг, с которым рассчитывается размер скидки на каждый следующий товар;
  • catalogs – список каталогов, на товары из которых может быть предоставлена скидка.

Функция находит в чеке товары из каталог и предоставляет на них скидку с заданным шагом. При этом максимальная скидка будет предоставлена на товар с наименьшей стоимостью. Количество товаров со скидкой зависит от разницы пороговых значений скидки и заданного шага. 

Пример
Для того чтобы на 3 товара из каталога с кодом 6 была предоставлена скидка 10, 20 и 30% необходимо:
создать условие object["posnum"] in cf.progressiveDiscount(10, 30, 10, [u"6"]) 
сделать расчетную ставку по сумме rf.progressiveDiscount(10, 30, 10, [u"6"])[object["posnum"]]

Перед применением скидки к весовому товару функция выбирает все позиции с весовым товаром, имеющим одинаковый штрих-код, и суммирует общий вес. Весовой товар считается за 1 товар. Скидка будет применена к 1 кг товара независимо от того, какое количество товаров в чеке задано в условиях функции, т.е. если в чеке 4 кг товара, то скидка будет применена только к 1 кг товара. Для весового товара функция проверяет цену за 1 кг, а не стоимость позиции. 

Пример поведения функции

В скидке заданы условия:

  1. Функция "Прогрессивная скидка" object["posnum"] in cf.progressiveDiscount(10, 30, 10, [u"6"])
  2. Расчетная ставка rf.progressiveDiscount(10, 30, 10, [u"6"])[object["posnum"]]

В каталог с кодом 6 входят следующие товары:

  1. Торт "Наполеон", цена 260 рублей
  2. Торт "Прага", цена 250 рублей
  3. Торт "Черемуховый", цена 240 рублей
  4. Торт "Черничный", цена 230 рублей
  5. Торт "Шоколадный", цена 220 рублей
  6. Торт "Кремовый", цена 210 рублей

В чек входят все товары из каталога.

Функция "Прогрессивная скидка" 3 товара для предоставления скидки 10%, 20% и 30%. Подбор товаров выполняется таким образом, чтобы в чеке была предоставлена минимальная скидка.

В результате перерасчета чек будет выглядеть следующим образом:

  1. Торт "Наполеон" 1 шт*260 рублей = 260 рублей
  2. Торт "Прага" 1 шт*250 рублей = 250 рублей
  3. Торт "Черемуховый" 1 шт*240 рублей = 240 рублей
  4. Торт "Черничный" 1 шт*230 рублей - 23 рубля (скидка 10%) = 207 рублей
  5. Торт "Шоколадный" 1 шт*220 рублей - 44 рубля (скидка 20%) = 176 рублей
  6. Торт "Кремовый" 1 шт*210 рублей - 63 рубля (скидка 30%) = 147 рублей

В документ будет записано 6 скидочных воздействий, т.к. функция при подборе скидки проверяет возможность ее предоставления на все товары из указанного каталога.

personalDiscount – Персональная цена

personalDiscount() – на товары в чеке будет предоставлена персональная цена

Скидка предоставляется только на позицию. Для функции используется только суммовая расчетная ставка. 

Функция срабатывает при наличии в чеке карты покупателя при переходе в подытог или при добавлении карты в подытоге. Взаимодействие с другими скидками срабатывает по заданному правилу взаимодействия.

Пример
Для того чтобы на товары в чеке была предоставлена персональная цена необходимо:
создать условие object["posnum"] in cf.personalDiscount()
сделать расчетную ставку по сумме rf.personalDiscount()[object["posnum"]] 

Значения цен для каждого товара будут получены с сервиса персональных цен.

  • No labels