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

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

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

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

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

Vad

Помогите с SQL скриптом, т.к. никогда с ними не работал, то выставить скидку на группу товара не получается. Покажите хотя бы тот же скрипт, что в примере, только как его там правильно прописать, что бы он работал.
С этим разобрался, удалил все лишнее и работает (а ларчик просто открывался).

Vad

Теперь стал такой вопрос: надо, чтобы скидка устанавливалась только когда покупается несколько единиц товара из этой группы (разного или одинакового), и действовала только на этот товар.
Как это можно решить скриптом?

admin

На поддержке спрашивали, может кому интересно:
  --Каждый 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

IVANOVICH

Всем привет! Помогите разобраться с этими скриптами. Пытаюсь разобраться сам, не пойму, с чего даже начинать. Купил программу Укрсклад, пока тестировал пользовалися только расходной накладной. Теперь пытаюсь запустить окно касира, но в окне можно работать только с одной ценой(какую выставишь), а у меня при покупке трех товаров (в группах 1.2.3)цена товара уменьшаеться на 10%(т.е если 1 или2*100, если 3*100-10%). В окне оператора, как мне объяснили на гор.линии, нужно пользоваться дисконтом и написать скрипт. Читаю второй день форум, ничего не пойму. где писать , как применить. Помогите с информацией, пожалуйста.

IVANOVICH

Вопрос1. Где и как можно узнать номер группы товара? Вот к примеру: Комплекты, Махровые изделия, Одеяла,пледы, подушки.

admin

Цитата: IVANOVICH від Жовтень 27, 2016, 23:28:44
Вопрос1. Где и как можно узнать номер группы товара? Вот к примеру: Комплекты, Махровые изделия, Одеяла,пледы, подушки.

Очень удобно смотреть в меню Опции : Наценки на товары, или в окне которое вы показали (справочник Товаров) включите колонку ID группы (правой кнопкой на таблице Выбор колонок).

IVANOVICH

Спасибо большое, с этим разобрался.

IVANOVICH

Еще вопрос. Если нужно в скрипте на скидку указать ID группы где используется скидка, указывать группу 28 или нужно указывать 29 и 31?

admin

Цитата: IVANOVICH від Жовтень 28, 2016, 21:14:24
Еще вопрос. Если нужно в скрипте на скидку указать ID группы где используется скидка, указывать группу 28 или нужно указывать 29 и 31?

Если товар в 29 или 31 группе надо именно их указать, скрипт не поймет дерево если вы укажите 28 группу. 28 надо указывать если товар есть именно в главной 28 группе, а не в 29 и 31.

admin

Цитата: 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<===========Окончание оригинала теста письма========

weee

Як зробити:
Якщо сума по конкретних групах більше 1000грн тоді знижка 10% на товари із цих груп ?

admin

Цитата: weee від Квітень 10, 2017, 22:22:19
Як зробити:
Якщо сума по конкретних групах більше 1000грн тоді знижка 10% на товари із цих груп ?

Для этого надо дорабатывать get_vkas_check_info, т.к. она не вытаскивает цену.

admin

#12
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 группы, поменяйте, если надо несколько пишите через запятую.

admin

Также сегодня помогали клиенту на поддержке делать 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<===========Окончание оригинала теста письма========

admin

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