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

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

#19
Это перенаправленное письмо:
От: УкрСклад
Кому: Николай
Дата: 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.2018') 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<===========Окончание оригинала теста письма========

admin

#26
Це перенаправлений лист:
Від: УкрСклад
Кому: Маргарита
Дата: 14 листопада 2024 р., 16:36:43
Тема: Налаштування знижки

===8<=================Оригінал листа=================
Вітаю,

13.11.2024 в 11:34, Ви звертались:

МФ> Добрий день. Підкажіть будь ласка. Як прописати знижку:

МФ> Для клієнтів з групи «Оптові клієнти» знижка  10% на весь асортимент крім
МФ> офісного паперу, на офісний папір знижка мінус 5 грн від ціни.

В меню Довідники : Дисконти : SQL дисконт по товару, використовуйте
скрипт:

  -- tmp_int1 - Група Клієнтів
  SELECT
    c.tip
  FROM
    client c
  WHERE
    c.num = :client_id
  INTO
    :tmp_int1;
  -- Наприклад, товари з ID 677,678 - це товари на які треба винятково зробити знижку 5 грн
  -- Якщо треба -5 грн на групу товарів, використовуйте змінну in_group_id, замість in_tovar_id
  IF(in_tovar_id IN (677,678)) THEN
    tovar_znig_proc = ( (5.00*in_tovar_kolvo)/(in_tovar_cena*in_tovar_kolvo) )*100;
  ELSE     
  -- Наприклад, групи Клієнтів з ID 5 і 7 - це оптові покупці 
  IF(tmp_int1 IN (5,7)) THEN
    tovar_znig_proc = 10;

--
Служба підтримки УкрСклад.
===8<=======Закінчення оригіналу тексту листа========

admin

Це перенаправлений лист:
Від: УкрСклад
Кому: Дмитрий
Дата: 15 листопада 2024 р., 9:38:40
Тема: Товар за 1 коп при сумі чека більше 300 грн

===8<=================Оригінал листа=================
Вітаю,

14.11.2024 в 17:22, Ви звертались:

ДВ> Добрий день,
ДВ> підкажіть, будь ласка, як прописати таку акцію, товар з ID 1448 буде за 1
ДВ> коп, якщо сума чеку більше 300 грн?

  -- tmp_float1 - сума документу
  SELECT
    SUM(vc.tov_kolvo*tov_cena)
  FROM
    get_vkas_check_info(:in_doc_id) AS vc
  INTO
    :tmp_float1;
  -- Наприклад, товари з ID 677,678 - це товари на які треба винятково зробити знижку
  IF(in_tovar_id IN (677,678) AND tmp_float1 > 300) THEN
    tovar_znig_proc = ( ((in_tovar_cena-0.01)*in_tovar_kolvo)/(in_tovar_cena*in_tovar_kolvo) )*100;

  --ВАЖЛИВО, якщо у вас є інші знижки на інші товари, їх треба враховувати в умові tmp_float1 > 300

--
Служба підтримки УкрСклад.
===8<=======Закінчення оригіналу тексту листа========