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

Наши программы => УкрСклад => Тема розпочата: Vad від Липень 28, 2015, 17:39:13

Назва: SQL дисконт по товару
Відправлено: Vad від Липень 28, 2015, 17:39:13
Помогите с SQL скриптом, т.к. никогда с ними не работал, то выставить скидку на группу товара не получается. Покажите хотя бы тот же скрипт, что в примере, только как его там правильно прописать, что бы он работал.
С этим разобрался, удалил все лишнее и работает (а ларчик просто открывался).
Назва: Re: SQL дисконт по товару
Відправлено: Vad від Липень 28, 2015, 22:12:17
Теперь стал такой вопрос: надо, чтобы скидка устанавливалась только когда покупается несколько единиц товара из этой группы (разного или одинакового), и действовала только на этот товар.
Как это можно решить скриптом?
Назва: Re: SQL дисконт по товару
Відправлено: admin від Жовтень 26, 2016, 11:26:44
На поддержке спрашивали, может кому интересно:
  --Каждый 4-ый товар скидка 100%, для товара с ID 53
  IF(in_tovar_id IN (53)) THEN
  BEGIN
    tovar_znig_proc = ((TRUNC(in_tovar_kolvo/4)*in_tovar_cena)/(in_tovar_kolvo*in_tovar_cena))*100;
  END
Назва: Re: SQL дисконт по товару
Відправлено: IVANOVICH від Жовтень 27, 2016, 22:31:31
Всем привет! Помогите разобраться с этими скриптами. Пытаюсь разобраться сам, не пойму, с чего даже начинать. Купил программу Укрсклад, пока тестировал пользовалися только расходной накладной. Теперь пытаюсь запустить окно касира, но в окне можно работать только с одной ценой(какую выставишь), а у меня при покупке трех товаров (в группах 1.2.3)цена товара уменьшаеться на 10%(т.е если 1 или2*100, если 3*100-10%). В окне оператора, как мне объяснили на гор.линии, нужно пользоваться дисконтом и написать скрипт. Читаю второй день форум, ничего не пойму. где писать , как применить. Помогите с информацией, пожалуйста.
Назва: Re: SQL дисконт по товару
Відправлено: IVANOVICH від Жовтень 27, 2016, 23:28:44
Вопрос1. Где и как можно узнать номер группы товара? Вот к примеру: Комплекты, Махровые изделия, Одеяла,пледы, подушки.
Назва: Re: SQL дисконт по товару
Відправлено: admin від Жовтень 28, 2016, 09:50:16
Цитата: IVANOVICH від Жовтень 27, 2016, 23:28:44
Вопрос1. Где и как можно узнать номер группы товара? Вот к примеру: Комплекты, Махровые изделия, Одеяла,пледы, подушки.

Очень удобно смотреть в меню Опции : Наценки на товары, или в окне которое вы показали (справочник Товаров) включите колонку ID группы (правой кнопкой на таблице Выбор колонок).
Назва: Re: SQL дисконт по товару
Відправлено: IVANOVICH від Жовтень 28, 2016, 21:09:45
Спасибо большое, с этим разобрался.
Назва: Re: SQL дисконт по товару
Відправлено: IVANOVICH від Жовтень 28, 2016, 21:14:24
Еще вопрос. Если нужно в скрипте на скидку указать ID группы где используется скидка, указывать группу 28 или нужно указывать 29 и 31?
Назва: Re: SQL дисконт по товару
Відправлено: admin від Жовтень 31, 2016, 16:15:09
Цитата: IVANOVICH від Жовтень 28, 2016, 21:14:24
Еще вопрос. Если нужно в скрипте на скидку указать ID группы где используется скидка, указывать группу 28 или нужно указывать 29 и 31?

Если товар в 29 или 31 группе надо именно их указать, скрипт не поймет дерево если вы укажите 28 группу. 28 надо указывать если товар есть именно в главной 28 группе, а не в 29 и 31.
Назва: Re: SQL дисконт по товару
Відправлено: admin від Жовтень 31, 2016, 16:17:34
Цитата: IVANOVICH від Жовтень 27, 2016, 22:31:31
Всем привет! Помогите разобраться с этими скриптами. Пытаюсь разобраться сам, не пойму, с чего даже начинать. Купил программу Укрсклад, пока тестировал пользовалися только расходной накладной. Теперь пытаюсь запустить окно касира, но в окне можно работать только с одной ценой(какую выставишь), а у меня при покупке трех товаров (в группах 1.2.3)цена товара уменьшаеться на 10%(т.е если 1 или2*100, если 3*100-10%). В окне оператора, как мне объяснили на гор.линии, нужно пользоваться дисконтом и написать скрипт. Читаю второй день форум, ничего не пойму. где писать , как применить. Помогите с информацией, пожалуйста.

Как я понимаю это ваше сообщение на поддержке?

Это перенаправленное письмо:
От: УкрСклад
Кому: Денис
Дата: 31 жовтня 2016 р., 12:28:44
Тема: дисконт

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

26.10.2016 в 23:28, Вы писали:

ДК> Вітаю! Привожу пример. Есть 10 групп товаров. В группе 1, 2, 3
ДК> есть скидка, при покупке трех одинаковых товаров цена , на все три
ДК> и более товара одного артикула уменьшаеться на 5%. Если продается
ДК> другой артикул в количестве меньше трех единиц, скидки нет.

  IF(in_tovar_kolvo >= 3 AND in_group_id IN (1,2,3)) THEN
    tovar_znig_proc = 5;

ДК>  В
ДК> группе 8 при покупки одного артикула больше 10 метров скидка в
ДК> цене на этот артикул 10%. Ну как то так. Спасибо жду ответа.

  IF(in_tovar_kolvo > 10 AND in_group_id IN (8)) THEN
    tovar_znig_proc = 10;

--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: weee від Квітень 10, 2017, 22:22:19
Як зробити:
Якщо сума по конкретних групах більше 1000грн тоді знижка 10% на товари із цих груп ?
Назва: Re: SQL дисконт по товару
Відправлено: admin від Квітень 13, 2017, 16:20:32
Цитата: weee від Квітень 10, 2017, 22:22:19
Як зробити:
Якщо сума по конкретних групах більше 1000грн тоді знижка 10% на товари із цих груп ?

Для этого надо дорабатывать get_vkas_check_info, т.к. она не вытаскивает цену.
Назва: Re: SQL дисконт по товару
Відправлено: admin від Квітень 13, 2017, 16:43:02
1. Меняем get_vkas_check_info (актуально для версий 6.59.2 и ниже, т.к. в след. версиях уже будет такая процедура). Заходим в меню Опции : SQL менеджер и выполняем след. код:
ALTER PROCEDURE get_vkas_check_info
(
  in_doc_id INTEGER
)
RETURNS
(
  tovar_id INTEGER,
  group_id INTEGER,
  sklad_id INTEGER,
  tov_kolvo DOUBLE PRECISION,
  tov_cena DOUBLE PRECISION
)
AS
BEGIN
  FOR
    SELECT
      vc_.tovar_id,
      tn.tip AS group_id,
      vc_.sklad_id,
      vc_.tov_kolvo,
      vc_.nac_tov_cena
    FROM
      vkas_check_ vc_
        JOIN tovar_name tn ON (vc_.tovar_id = tn.num)
    WHERE
      vc_.pid = :in_doc_id
    INTO
      :tovar_id,
      :group_id,
      :sklad_id,
      :tov_kolvo,
      :tov_cena
  DO
  BEGIN
    SUSPEND;
  END
END


2. В меню Справочники : Дисконты : SQL дисконт по товару, используем скрипт:
  IF(in_group_id IN (7)) THEN
  BEGIN
    SELECT
      SUM(vc.tov_kolvo*vc.tov_cena)
    FROM
      get_vkas_check_info(:in_doc_id) AS vc
    WHERE
      vc.group_id IN (7)
    INTO
      :tmp_float1;
    IF(tmp_float1 > 1000) THEN
    BEGIN
      tovar_znig_proc = 10;
    END     
  END


Показано для группы 7, если надо свой ID группы, поменяйте, если надо несколько пишите через запятую.
Назва: Re: SQL дисконт по товару
Відправлено: admin від Квітень 13, 2017, 16:44:59
Также сегодня помогали клиенту на поддержке делать SQL дисконт, может кому будет интересно:

Это перенаправленное письмо:
От: УкрСклад
Кому: PHONE
Дата: 13 квітня 2017 р., 12:10:08
Тема: SQL-дисконт

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

23.03.2017 в 17:26, Вы писали:

PP>  Скорее всего я Вас не правльно понял. Товары с группы 7 и 5
PP> могут быть с разными кодами, и как итог:
PP> если с группы 7 товаров - 3 шт, с группы 5 - 2 шт, товар с id
PP> 4640 - 2 шт, то скидки будет две на товар с id 4640.
PP> Пример №1:
PP> группа 7 - чехол леново, чехол нокиа, чехол самсунг - всего три товара с группы 7
PP> группа 5 - защитное стекло леново, защитное стекло самсунг - всего 2 товара с группы 5
PP> товара с id 4640 - в чеке две шт (так как покупают два стекла то
PP> и услуги только две в чеке будет).
PP> Как итог условие в чеке выполнилось всего два раза - значит две скидки на товар с id 4640.

PP> Пример №2
PP> группа 7 - чехол леново, чехол нокиа - всего 2 товара с группы 7
PP> группа 5 - защитное стекло леново, защитное стекло самсунг,
PP> защитное стекло нокиа - всего 3 товара с группы 5
PP> товара с id 4640 - в чеке 3 шт (так как покупают три стекла то и услуги три в чеке будет).
PP> Как итог условие в чеке выполнилось всего два раза - значит две
PP> скидки на товар с id 4640, и один товар с  id 4640 по полной стоимости.
PP> Если что не так не судите строго, я не программист. Вы професионалы в этом деле.
PP> Спасибо

Так и было в прошлом скрипте, проблема при добавлении доп. строк. Вот
попробуйте след. скрипт:

  IF(in_tovar_id IN (4640)) THEN
  BEGIN
    SELECT
      COUNT(vc.tov_kolvo),
      SUM(CASE
        WHEN vc.group_id = 5 THEN vc.tov_kolvo
      END) AS sum5,
      SUM(CASE
        WHEN vc.group_id = 7 THEN vc.tov_kolvo
      END) AS sum7
    FROM
      get_vkas_check_info(:in_doc_id) AS vc
    WHERE
      vc.tovar_id IN (4640) OR
      vc.group_id IN (5,7)
    INTO
      :tmp_int1,
      :tmp_float1,
      :tmp_float2;
    IF(tmp_float2 < tmp_float1) THEN
      tmp_float1 = tmp_float2; 
    IF(tmp_int1 >= 3) THEN
    BEGIN
      tovar_znig_proc = ( (((in_tovar_cena-1.00)*tmp_float1))/(in_tovar_cena*in_tovar_kolvo) )*100;
    END     
  END


--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: admin від Травень 10, 2017, 16:56:18
Это перенаправленное письмо:
От: УкрСклад
Кому: Олександр
Дата: 10 травня 2017 р., 16:55:41
Тема: Питання по SQL дисконтам

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

10.05.2017 в 10:10, Вы писали:

ОД> Якщо кількість товару в чеку більше 3 то ціна з колонки "Оптова
ОД> ціна", якщо менше 3 то "Роздрібна ціна". Як написати SQL?
ОД> (перелопатив весь форум і сам перепробував - нічого не виходить). Допоможіть будь-ласка.

  -- если кол-во товара (1,2) больше 3 использовать оптовую цену
  IF(in_tovar_id IN (1,2) AND :in_tovar_kolvo > 3) THEN
  SELECT
    (1-(tn.cena_o/tn.cena_r))*100
  FROM
    tovar_name tn
  WHERE
    tn.num = :in_tovar_id
  INTO
    :tovar_znig_proc;

--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: admin від Серпень 21, 2017, 15:58:32
Это перенаправленное письмо:
От: УкрСклад
Кому: Дмитрий В
Дата: 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<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: admin від Вересень 25, 2017, 11:06:31
Это перенаправленное письмо:
От: УкрСклад
Кому: Дмитрий В
Дата: 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<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: admin від Грудень 12, 2017, 11:11:51
Это перенаправленное письмо:
От: УкрСклад
Кому: олександр
Дата: 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<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: admin від Грудень 13, 2017, 13:02:03
Не совсем 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<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: 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.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<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: admin від Лютий 05, 2018, 14:43:34
Это перенаправленное письмо:
От: УкрСклад <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<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: admin від Березень 12, 2018, 16:10:02
Это перенаправленное письмо:
От: УкрСклад
Кому: Василь
Дата: 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<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: admin від Травень 21, 2018, 15:44:30
Это перенаправленное письмо:
От: УкрСклад <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<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: admin від Травень 25, 2018, 14:10:46
Это перенаправленное письмо:
От: УкрСклад
Кому: 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<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: admin від Липень 03, 2019, 17:09:33
Это перенаправленное письмо:
От: УкрСклад
Кому: Александр
Дата: 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<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: admin від Вересень 25, 2019, 11:21:38
Это перенаправленное письмо:
От: УкрСклад
Кому: Александр
Дата: 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 (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<===========Окончание оригинала теста письма========
Назва: Re: SQL дисконт по товару
Відправлено: admin від Листопад 14, 2024, 16:38:58
Це перенаправлений лист:
Від: УкрСклад
Кому: Маргарита
Дата: 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<=======Закінчення оригіналу тексту листа========
Назва: Re: SQL дисконт по товару
Відправлено: admin від Листопад 15, 2024, 09:39:33
Це перенаправлений лист:
Від: УкрСклад
Кому: Дмитрий
Дата: 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<=======Закінчення оригіналу тексту листа========