• Ласкаво просимо на Спільнота для обміну досвідом між користувачами програм УкрБланк, УкрСклад, УкрЗарплата.
 

SQL дисконт по товару

Автор Vad, Липень 28, 2015, 17:39:13

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

admin

Это перенаправленное письмо:
От: УкрСклад
Кому: Дмитрий В
Дата: 21 серпня 2017 р., 15:57:39
Тема: Акция 1+1=3

===8<==============Оригинал текста письма===============
Приветствую Вас,

21.08.2017 в 10:13, Вы писали:

ДВ> Здравствуйте еще раз,
ДВ> в продолжении телефонного разговора, подскажите, пожалуйста, как
ДВ> реализовать акцию, например есть позиция - пиво 1, при покупке
ДВ> двух литров этой позиции 3й литр был в подарок (за 1 коп)? Также,
ДВ> нужно это делать только под ограниченный список позиций, а не на весь ассортимент.

В меню Справочники : Дисконты :

  -- если кол-во товара (33115, 758) больше 2 использовать на третий товар цену 1 копейка
  IF(in_tovar_id IN (33115, 758) AND :in_tovar_kolvo >= 3) THEN
    tovar_znig_proc = ( (((in_tovar_cena-0.01)))/(in_tovar_cena*in_tovar_kolvo) )*100;

  -- если кол-во товара (33115, 758) больше 2 использовать на КАЖДЫЙ третий товар цену 1 копейка
  IF(in_tovar_id IN (33115, 758) AND in_tovar_kolvo >= 3) THEN
    tovar_znig_proc = ( ((in_tovar_cena-0.01)*TRUNC(in_tovar_kolvo/3))/(in_tovar_cena*in_tovar_kolvo) )*100;


--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========

admin

#16
Это перенаправленное письмо:
От: УкрСклад
Кому: Дмитрий В
Дата: 25 вересня 2017 р., 11:04:59
Тема: Акция -25% на 1 литр пива

===8<==============Оригинал текста письма===============
Приветствую Вас,

21.09.2017 в 13:24, Вы писали:

ДВ> Добрый день,
ДВ> Подскажите, пожалуйста, как нам прописать в программе следующую акцию:
ДВ> Есть несколько акционных позиций (например, 3 вида пива) нам
ДВ> нужно, чтобы на 1 литр одной из позиций, даже если в чеке будут
ДВ> все 3 позиции, была скидка 25% и только на 1 литр, даже если этой позиции будет больше в чеке.


ДВ> Также, нужно, чтобы эта акция активировалась по штрих-коду,
ДВ> например, как карта клиента либо же другим способом, какие еще возможны?

В меню Справочники : Дисконты : SQL дисконт по товару, используйте
след. скрипт:

  IF(client_id IN (25,26)) THEN
  BEGIN
    SELECT
      FIRST 1
      vc.tovar_id
    FROM
      get_vkas_check_info(:in_doc_id) AS vc
    WHERE
      vc.tovar_id IN (13654,13656,13661)
    INTO
      :tmp_int1;
    IF(tmp_int1 = in_tovar_id) THEN
    BEGIN
      tovar_znig_proc = ( (in_tovar_cena*0.25)/(in_tovar_cena*in_tovar_kolvo) )*100;
    END
  END


Скрипт активизируется для клиентов с ID = 25,26, для товаров с ID =
13654,13656,13661, скидка 25% дается на цену товара для первого
товара из списка. Замените на свои ID.

--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========

admin

#17
Это перенаправленное письмо:
От: УкрСклад
Кому: олександр
Дата: 12 грудня 2017 р., 11:08:30
Тема:

===8<==============Оригинал текста письма===============
Приветствую Вас,

11.12.2017 в 18:59, Вы писали:

он> Як правильно прописати SQL дисконт по сумме
он> Наприклад ID клієнта 50; день народження записано в
он> додатково-12.12.2017; і повернення має бути бонусами 10%, а не знижка

1. Переименуйте поле Дополнительно из справочника Клиента в "День
Рождения", делается это в меню Опции : Параметры : Справочники :
Справочник Клиенты. ОБЯЗАТЕЛЬНО в этом поле вы должны корректно
записывать дату в формате dd.mm.yyyy, например 11.12.2017.
2. В меню Справочники : Дисконты : SQL дисконт по сумме, используйте
скрипт:
  SELECT
    dopoln
  FROM
    client
  WHERE
    num = :client_id
  INTO
    :tmp_str1;
  IF(TRIM(tmp_str1) != '') THEN
  BEGIN
    tmp_date1 = CAST(tmp_str1 AS DATE);   
    IF(EXTRACT(DAY FROM tmp_date1) = EXTRACT(DAY FROM CURRENT_DATE) AND EXTRACT(MONTH FROM tmp_date1) = EXTRACT(MONTH FROM CURRENT_DATE)) THEN
      all_bonus_out =  0.1;
  END


Важно знать что бонус 10% будет складываться с основным бонусом
который идет у вас в настройках меню Опции : Параметры : Окно кассира
: Коэффициент расчета бонуса, например если там 1%, то всего будет
11%, вам надо это учитывать и выставлять нужный % для доп. бонусов в
скрипте.

--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========

admin

Не совсем SQL дисконт, но тоже интересный скрипт для наценок, может кому интересно будет.

Это перенаправленное письмо:
От: УкрСклад
Кому: Victoriya
Дата: 13 грудня 2017 р., 13:00:46
Тема: Націнка по виробнику

===8<==============Оригинал текста письма===============
Приветствую Вас,

13.12.2017 в 9:43, Вы писали:

VM> наприклад виробник
VM> BCGUMA  - націнити по всіх групах на 7,5%
VM> ABE - 12%
VM> SOLGY- 7.9%


VM> Якщо варіант скрипту націнки  лише на роздріб ціну,
VM> та варіантк скрипту на націнку на роздріб,опт та ціну1
VM> наприклад виробник
VM> BCGUMA  - націнити по всіх групах на 7,5% роздріб, 7%опт, та 7,3% ціна 1
VM> ABE - 12%роз 11% опт та 11,5%ціна1
VM> SOLGY- 7.9%розд,- 7,2%опт, 7,6ціна1

В меню Опции : Наценки на товары : Наценки SQL скриптом, введите след.
текст, после:
------------------------------------------------------------------------------

  SELECT
    tn.tov_proizv
  FROM
    tovar_name tn
  WHERE
    tn.num = :tovar_id_in 
  INTO
    :tmp_str1; 
  IF(TRIM(tmp_str1) = 'BCGUMA') THEN
  BEGIN
    cena_r_out = ROUND(cena_in * 1.075, 2);
    cena_o_out = ROUND(cena_in * 1.07, 2);
    cena_1_out = ROUND(cena_in * 1.073, 2);
  END
  ELSE
  IF(TRIM(tmp_str1) = 'ABE') THEN
  BEGIN
    cena_r_out = ROUND(cena_in * 1.12, 2);
    cena_o_out = ROUND(cena_in * 1.11, 2);
    cena_1_out = ROUND(cena_in * 1.115, 2);
  END
  ELSE
  IF(TRIM(tmp_str1) = 'SOLGY') THEN
  BEGIN
    cena_r_out = ROUND(cena_in * 1.079, 2);
    cena_o_out = ROUND(cena_in * 1.072, 2);
    cena_1_out = ROUND(cena_in * 1.076, 2);
  END


Все остальные наценки по аналогии.

--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========

admin

Это перенаправленное письмо:
От: УкрСклад
Кому: Николай
Дата: 20 грудня 2017 р., 14:54:09
Тема: Fwd: скрипт для рождественских и новогодних продаж для окна кассира.

===8<==============Оригинал текста письма===============
Приветствую Вас,

19.12.2017 в 12:29, Вы писали:

НС> Вы нам давали скрипт для "черной пятницы".
НС> А теперь мы придумали по-сложнее...
НС> Срок действия акции - 18.12.2017 - 7.01.2018
НС> Внизу Id товара и размер скидки (есть процентная и числовая).
НС> 2 - 15%
НС> 50 - 277,00
НС> 51 - 15%
НС> 53 - 15%
НС> 54 - 262,00
НС> 55 - 15%
НС> 57 - 277,00

В меню Справочники : Дисконты : SQL дисконт по товару, используйте
след. скрипт:

  IF(in_date >= '18.12.2017' AND in_date <= '07.01.2017') THEN
  BEGIN
    IF(in_tovar_id IN (2, 51, 53, 55)) THEN
      tovar_znig_proc = 15;
    ELSE
    IF(in_tovar_id IN (50, 57)) THEN
      tovar_znig_proc = ( (277)/(in_tovar_cena*in_tovar_kolvo) )*100;   
    ELSE
    IF(in_tovar_id IN (54)) THEN
      tovar_znig_proc = ( (262)/(in_tovar_cena*in_tovar_kolvo) )*100; 
  END


--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========

admin

Это перенаправленное письмо:
От: УкрСклад <info@ukrsklad.com>
Кому: Дмитрий В <dmytro.dvs@gmail.com>
Дата: 5 лютого 2018 р., 12:15:23
Тема: Акция -50% на второй литр

===8<==============Оригинал текста письма===============
Приветствую Вас,

02.02.2018 в 17:57, Вы писали:

ДВ> На каждый второй должна быть скидка, но с учетом того, что вес
ДВ> может быть не ровно 2, а от 1,8 до 2 примерно.

ДВ>> ID 22, 23.
 ДВ>>> Подскажите, пожалуйста, как реализовать акцию -50% на второй кг(под вторым
 ДВ>>> кг имеется в виду вес от 1,8 до 2,1).
 ДВ>>> Такая акция нужна для нескольких позиций, но, чтобы скидка была только при
 ДВ>>> покупке 2 кг одной и той же позиции.

Скидка 50% на каждый второй товар (кол-во от 1.8 до 2.0), в меню
Справочник : Дисконты : SQL дисконт по товару, используйте скрипт:

  IF(in_tovar_id IN (33717) AND in_tovar_kolvo >= 1.8) THEN
  BEGIN
    IF ( ROUND(((in_tovar_kolvo/2)-TRUNC(in_tovar_kolvo/2)),1) >= 0.9 ) THEN
      tovar_znig_proc = ( (in_tovar_cena*0.5*(TRUNC(in_tovar_kolvo/2))+(in_tovar_cena*0.5)*((in_tovar_kolvo)-TRUNC(in_tovar_kolvo)))/(in_tovar_cena*in_tovar_kolvo) )*100;
    ELSE
      tovar_znig_proc = ( (in_tovar_cena*0.5*(TRUNC(in_tovar_kolvo/2)))/(in_tovar_cena*in_tovar_kolvo) )*100;
  END


--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========

admin

Это перенаправленное письмо:
От: УкрСклад
Кому: Василь
Дата: 12 березня 2018 р., 16:09:22
Тема: SQL

===8<==============Оригинал текста письма===============
Приветствую Вас,

09.03.2018 в 11:32, Вы писали:

ВШ> Доброго дня.
ВШ> 
ВШ> допоможіть будь ласка зі скриптом.
ВШ> Цікавить таке:
ВШ> при продажі товару з ID 555 нараховувалось + 5 бонусів до бонсуного рахунку клієнта.
ВШ> Наперед вдячний.
ВШ> Шеременда Василь 0976846622

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

В меню Справочники : Дисконты : SQL дисконт по сумме используйте
скрипт:

SELECT
  FIRST 1
  vc.tov_kolvo
FROM
  get_vkas_check_info(:in_doc_id) AS vc
WHERE
  vc.tovar_id IN (555)
INTO
  :tmp_float1;
IF(tmp_float1 IS NOT NULL AND tmp_float1 >= 1) THEN
BEGIN
  all_bonus_out = (tmp_float1 * 5) / in_doc_suma_value;
END


Этот скрипт начисляет 5 бонусов на каждую единицу продукции в чеке,
все остальные бонусы перетираются. Также не забывайте что любой бонус
всегда складывается с общим бонусом что установлен в меню Опции :
Параметры : Окно кассира.

--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========

admin

#22
Это перенаправленное письмо:
От: УкрСклад <info@ukrsklad.com>
Кому: phone
Дата: 21 травня 2018 р., 15:43:57
Тема: Fwd: Дисконт

===8<==============Оригинал текста письма===============
Приветствую Вас,

13.05.2018 в 10:36, Вы писали:

ВВ> Добрый день
ВВ> Прошу помочь в ситуации, необходимос создать дисконт
ВВ> Если в чеке есть товар с id 4651; 4652; 6846 то на один товар с id
ВВ> 6154(стоимостью 99 грн) скидка 98,99 грн.
ВВ> Спасибо

В меню Справочники : Дисконты : SQL дисконт по товару, используем скрипт:

SELECT
  COUNT(vc.tovar_id)
FROM
  get_vkas_check_info(:in_doc_id) AS vc
WHERE
  vc.tovar_id IN (4651,4652,6846)
INTO
  :tmp_int1;
IF(:tmp_int1 = 3 AND :in_tovar_id = 6154) THEN
  tovar_znig_proc = ( (in_tovar_cena-1.00)/(in_tovar_cena*in_tovar_kolvo) )*100;


--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========

admin

#23
Это перенаправленное письмо:
От: УкрСклад
Кому: andrj
Дата: 25 травня 2018 р., 14:09:56
Тема: дисконт

===8<==============Оригинал текста письма===============
Приветствую Вас,

25.05.2018 в 11:55, Вы писали:

a> Товар сортується по ціні із найбільшої до найменшої,потім кожен 3 -50%.

В меню Справочники : Дисконты : SQL дисконт по товару, используем скрипт:

-- колво всего в документе
SELECT
  SUM(vc.tov_kolvo)
FROM
  get_vkas_check_info(:in_doc_id) AS vc
INTO
  :tmp_int1;
-- на сколько делать скидку   
tmp_float1 = CAST (:tmp_int1/3 AS INTEGER);
SELECT
  COUNT(vc.tovar_id)
FROM
  get_vkas_check_info(:in_doc_id) AS vc
INTO
  :tmp_int1; 
-- проход от дешевых до дорогих
FOR
  SELECT
    vc.tovar_id,
    vc.tov_kolvo
  FROM
    get_vkas_check_info(:in_doc_id) AS vc
  ORDER BY
    vc.tov_cena
  INTO
    :tmp_int3,   -- tovar_id
    :tmp_float2 -- tov_kolvo
DO
BEGIN
  IF(tmp_float1 != 0) THEN
  BEGIN
    IF(tmp_float1 >= tmp_float2) THEN
    BEGIN
      tmp_float1 = tmp_float1 - tmp_float2;
      IF(in_tovar_id = tmp_int3) THEN
      BEGIN
        tovar_znig_proc = ( (in_tovar_cena/2*tmp_float2)/(in_tovar_cena*in_tovar_kolvo) )*100;
        BREAK;
      END
    END
    ELSE 
    BEGIN
      IF(in_tovar_id = tmp_int3) THEN
      BEGIN
        tovar_znig_proc = ( (in_tovar_cena/2*tmp_float1)/(in_tovar_cena*in_tovar_kolvo) )*100;
        BREAK;
      END
    END
  END
END



--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========

admin

#24
Это перенаправленное письмо:
От: УкрСклад
Кому: Александр
Дата: 3 липня 2019 р., 17:07:36
Тема: Fwd: Бонусы

===8<==============Оригинал текста письма===============
Приветствую Вас,

03.07.2019 в 16:15, Вы писали:

АС> Подскажите есть ли возможность установить следующее:
АС> 1. В опциях окна кассира установить коэффициент по бонусам 0,01
АС> 2. На группы с id 410, 420 (я в скрипт пропишу все группы кроме 429)
АС> установить коэффициент 0,04
АС> И в рузельтате на группу 429 будет начисляться бонус 0,01, а на все
АС> остальные суммырующийся бонус 0,01+0,04=0,05

Так можно:

SELECT
  SUM(vc.tov_kolvo*vc.tov_cena)
FROM
  get_vkas_check_info(:in_doc_id) AS vc
WHERE
  vc.group_id IN (429)
INTO
  :tmp_float1; -- сумма товаров для бонуса=0.1

tmp_float2 = in_doc_suma_value - tmp_float1; -- сумма товаров для бонуса=0.4

all_bonus_out = (((tmp_float2 * 0.04)+(tmp_float1 * 0.01) )/in_doc_suma_value);


Пример сумма 100 грн, группы НЕ РАВНО 429 = 60 грн, РАВНО 429 = 40 грн
40 грн * 0.01 = 0,4 грн
60 грн * 0.04 = 2.4 грн
0.4+2.4 = 2.8 грн.

Расчет выше:

((60*0.04)+(40*0.01))/100 = *2.4+0.4)/100 = коэффициент бонуса 0.028

Будет для считать для группы 429 основной 0.1+ из скрипта 0.1
all_bonus_out = (((tmp_float2 * 0.04)+(tmp_float1 * 0.01) )/in_doc_suma_value);
если надо просто 0.1, то так:
all_bonus_out = ((tmp_float2 * 0.04)/in_doc_suma_value);

--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========

admin

Это перенаправленное письмо:
От: УкрСклад
Кому: Александр
Дата: 25 вересня 2019 р., 11:20:55
Тема: Fwd: Скрипт на скидку

===8<==============Оригинал текста письма===============
Приветствую Вас,

21.09.2019 в 13:27, Вы писали:

АС> Добрый день помогите пожалуйста реализовать следующую акцию:
АС> При покупке смартфона клиент получает в подарок защитное стекло.
АС> Иными словами: если в чеке есть товар с группы 429 то на один товар с
АС> группы 417 скидка 99%.
АС> Заранее спасибо

В подарок нельзя, а за 1 гривну можно.

Скидки, почти аналогичные вашим прошлым:
https://www.softbalance.com.ua/forum/index.php/topic,3533.msg26480.html#msg26480

Как мы поняли, на каждый товар из группы 429, скидка соответствующий из 417

-- группа товаров
SELECT
  SUM(vc.tov_kolvo)
FROM
  get_vkas_check_info(:in_doc_id) AS vc
WHERE
  vc.group_id = (429)
INTO
  :tmp_int1;
-- группа товаров подарков 
SELECT
  SUM(vc.tov_kolvo)
FROM
  get_vkas_check_info(:in_doc_id) AS vc
WHERE
  vc.group_id = (417)
INTO
  :tmp_int2;
IF(:tmp_int1 > :tmp_int2) THEN
  tmp_int1 = tmp_int2;
IF(tmp_int1 != 0 AND :in_group_id = 417) THEN
  tovar_znig_proc = ( (in_tovar_cena*tmp_int1-1.00)/(in_tovar_cena*in_tovar_kolvo) )*100;


--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========

ВКом

Добрый день!
Помогите со скриптоп: при покупке 3х единиц любого товара, третий товар с наименьшей ценой в подарок
вроди все пробовала, не получается

admin

Цитата: ВКом від Січень 14, 2020, 13:28:20
Добрый день!
Помогите со скриптоп: при покупке 3х единиц любого товара, третий товар с наименьшей ценой в подарок
вроди все пробовала, не получается

1. Что именно вы пробовали?
2. Условие не полное, не понятно это "при покупке больше 3х единиц любого товара" или "при покупке каждой из3х единиц любого товара" или "при покупке количества3х единиц любого товара" (т.е. купили 2 шт. - Товара 1 и 1 шт. Товара 2, не говоря уже о 5 шт. - Товара 1, 4 шт. - Товара 2, 3 шт. - Товара 3).

cola78

Можно ли в sql дисконте указывать производителя?
Например скидку на все товары кроме товаров такого-то производителя.

Если можно, то какая переменная отвечает за производителя?

homebuh

Цитата: admin від Грудень 20, 2017, 14:54:41
Это перенаправленное письмо:
От: УкрСклад
Кому: Николай
Дата: 20 грудня 2017 р., 14:54:09
Тема: Fwd: скрипт для рождественских и новогодних продаж для окна кассира.

===8<==============Оригинал текста письма===============
Приветствую Вас,

19.12.2017 в 12:29, Вы писали:

НС> Вы нам давали скрипт для "черной пятницы".
НС> А теперь мы придумали по-сложнее...
НС> Срок действия акции - 18.12.2017 - 7.01.2018
НС> Внизу Id товара и размер скидки (есть процентная и числовая).
НС> 2 - 15%
НС> 50 - 277,00
НС> 51 - 15%
НС> 53 - 15%
НС> 54 - 262,00
НС> 55 - 15%
НС> 57 - 277,00

В меню Справочники : Дисконты : SQL дисконт по товару, используйте
след. скрипт:

  IF(in_date >= '18.12.2017' AND in_date <= '07.01.2017') THEN
  BEGIN
    IF(in_tovar_id IN (2, 51, 53, 55)) THEN
      tovar_znig_proc = 15;
    ELSE
    IF(in_tovar_id IN (50, 57)) THEN
      tovar_znig_proc = ( (277)/(in_tovar_cena*in_tovar_kolvo) )*100;   
    ELSE
    IF(in_tovar_id IN (54)) THEN
      tovar_znig_proc = ( (262)/(in_tovar_cena*in_tovar_kolvo) )*100; 
  END


--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========

здесь ошибка в дате
IF(in_date >= '18.12.2017' AND in_date <= '07.01.2018') THEN