Автор Тема: SQL дисконт по товару  (Прочитано 5367 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Vad

  • Младший Пользователь
  • **
  • Сообщений: 27
  • Репутация: 7
SQL дисконт по товару
« : Июля 28, 2015, 17:39:13 »
Помогите с SQL скриптом, т.к. никогда с ними не работал, то выставить скидку на группу товара не получается. Покажите хотя бы тот же скрипт, что в примере, только как его там правильно прописать, что бы он работал.
С этим разобрался, удалил все лишнее и работает (а ларчик просто открывался).
« Последнее редактирование: Июля 28, 2015, 22:11:23 от Vad »

Vad

  • Младший Пользователь
  • **
  • Сообщений: 27
  • Репутация: 7
Re: SQL дисконт по товару
« Ответ #1 : Июля 28, 2015, 22:12:17 »
Теперь стал такой вопрос: надо, чтобы скидка устанавливалась только когда покупается несколько единиц товара из этой группы (разного или одинакового), и действовала только на этот товар.
Как это можно решить скриптом?

admin

  • Админ
  • Помогающий
  • *****
  • Сообщений: 6762
  • Репутация: 1103
  • Пол: Мужской
    • УкрБланк, УкрСклад, УкрЗарплата, Унидок
Re: SQL дисконт по товару
« Ответ #2 : Октября 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

IVANOVICH

  • Младший Пользователь
  • **
  • Сообщений: 11
  • Репутация: 0
  • Пол: Мужской
Re: SQL дисконт по товару
« Ответ #3 : Октября 27, 2016, 22:31:31 »
Всем привет! Помогите разобраться с этими скриптами. Пытаюсь разобраться сам, не пойму, с чего даже начинать. Купил программу Укрсклад, пока тестировал пользовалися только расходной накладной. Теперь пытаюсь запустить окно касира, но в окне можно работать только с одной ценой(какую выставишь), а у меня при покупке трех товаров (в группах 1.2.3)цена товара уменьшаеться на 10%(т.е если 1 или2*100, если 3*100-10%). В окне оператора, как мне объяснили на гор.линии, нужно пользоваться дисконтом и написать скрипт. Читаю второй день форум, ничего не пойму. где писать , как применить. Помогите с информацией, пожалуйста.

IVANOVICH

  • Младший Пользователь
  • **
  • Сообщений: 11
  • Репутация: 0
  • Пол: Мужской
Re: SQL дисконт по товару
« Ответ #4 : Октября 27, 2016, 23:28:44 »
Вопрос1. Где и как можно узнать номер группы товара? Вот к примеру: Комплекты, Махровые изделия, Одеяла,пледы, подушки.

admin

  • Админ
  • Помогающий
  • *****
  • Сообщений: 6762
  • Репутация: 1103
  • Пол: Мужской
    • УкрБланк, УкрСклад, УкрЗарплата, Унидок
Re: SQL дисконт по товару
« Ответ #5 : Октября 28, 2016, 09:50:16 »
Вопрос1. Где и как можно узнать номер группы товара? Вот к примеру: Комплекты, Махровые изделия, Одеяла,пледы, подушки.

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

IVANOVICH

  • Младший Пользователь
  • **
  • Сообщений: 11
  • Репутация: 0
  • Пол: Мужской
Re: SQL дисконт по товару
« Ответ #6 : Октября 28, 2016, 21:09:45 »
Спасибо большое, с этим разобрался.

IVANOVICH

  • Младший Пользователь
  • **
  • Сообщений: 11
  • Репутация: 0
  • Пол: Мужской
Re: SQL дисконт по товару
« Ответ #7 : Октября 28, 2016, 21:14:24 »
Еще вопрос. Если нужно в скрипте на скидку указать ID группы где используется скидка, указывать группу 28 или нужно указывать 29 и 31?

admin

  • Админ
  • Помогающий
  • *****
  • Сообщений: 6762
  • Репутация: 1103
  • Пол: Мужской
    • УкрБланк, УкрСклад, УкрЗарплата, Унидок
Re: SQL дисконт по товару
« Ответ #8 : Октября 31, 2016, 16:15:09 »
Еще вопрос. Если нужно в скрипте на скидку указать ID группы где используется скидка, указывать группу 28 или нужно указывать 29 и 31?

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

admin

  • Админ
  • Помогающий
  • *****
  • Сообщений: 6762
  • Репутация: 1103
  • Пол: Мужской
    • УкрБланк, УкрСклад, УкрЗарплата, Унидок
Re: SQL дисконт по товару
« Ответ #9 : Октября 31, 2016, 16:17:34 »
Всем привет! Помогите разобраться с этими скриптами. Пытаюсь разобраться сам, не пойму, с чего даже начинать. Купил программу Укрсклад, пока тестировал пользовалися только расходной накладной. Теперь пытаюсь запустить окно касира, но в окне можно работать только с одной ценой(какую выставишь), а у меня при покупке трех товаров (в группах 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

  • Старший Пользователь
  • ****
  • Сообщений: 184
  • Репутация: 24
Re: SQL дисконт по товару
« Ответ #10 : Апреля 10, 2017, 22:22:19 »
Як зробити:
Якщо сума по конкретних групах більше 1000грн тоді знижка 10% на товари із цих груп ?

admin

  • Админ
  • Помогающий
  • *****
  • Сообщений: 6762
  • Репутация: 1103
  • Пол: Мужской
    • УкрБланк, УкрСклад, УкрЗарплата, Унидок
Re: SQL дисконт по товару
« Ответ #11 : Апреля 13, 2017, 16:20:32 »
Як зробити:
Якщо сума по конкретних групах більше 1000грн тоді знижка 10% на товари із цих груп ?

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

admin

  • Админ
  • Помогающий
  • *****
  • Сообщений: 6762
  • Репутация: 1103
  • Пол: Мужской
    • УкрБланк, УкрСклад, УкрЗарплата, Унидок
Re: SQL дисконт по товару
« Ответ #12 : Апреля 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 группы, поменяйте, если надо несколько пишите через запятую.
« Последнее редактирование: Мая 10, 2017, 16:45:08 от admin »

admin

  • Админ
  • Помогающий
  • *****
  • Сообщений: 6762
  • Репутация: 1103
  • Пол: Мужской
    • УкрБланк, УкрСклад, УкрЗарплата, Унидок
Re: SQL дисконт по товару
« Ответ #13 : Апреля 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<===========Окончание оригинала теста письма========

admin

  • Админ
  • Помогающий
  • *****
  • Сообщений: 6762
  • Репутация: 1103
  • Пол: Мужской
    • УкрБланк, УкрСклад, УкрЗарплата, Унидок
Re: SQL дисконт по товару
« Ответ #14 : Мая 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<===========Окончание оригинала теста письма========