12.07.2006 16:26
Mr_Vito
 
В Супермаге нет своего механизма отслеживания накопительных скидок. Поделитесь п-ста опытом кто и как их отслеживает и меняет проценты? Как часто? (раз в сутки, реалтайм по опер продажам)
12.07.2006 16:31
akonev
 
запросиком суммируем продажи и по результатам рассаживаем карточки по типам.
реалтайм, имхо, получится только при небольшом количестве магазинов. лучше всего - один.
ежедневно - в принципе реально, но надо или выгружать в базах магазинов, как-то сгребать в офис и там суммировать или тащить в офис все чеки (мало радости)
потому - раз в месяц
12.07.2006 16:33
Mtirt
 
Аналогично. Один раз в сутки в базе ЦО, после получения Z-отчетов, отрабатывает скрипт. Потом измененные карты отсылаются в базы магазинов.
12.07.2006 16:35
OlegON
 
Вы бы скриптами делились :) Интересно же. Заодно нюансы друг у друга бы повыяснили.
12.07.2006 16:37
Mtirt
 
В моем скрипте черт ногу сломит. У меня куча видов карт, да еще разные пределы накоплений для разных регионов.
12.07.2006 16:44
Mtirt
 
Приблизительно так:
Код:
 update smdiscpers set cardtype=4, lastchange=sysdate where code in
(SELECT b.code
FROM
   SUPERMAG.SMCLIENTINFO F
 , SUPERMAG.SMDISCPERS B
 , SUPERMAG.SMDOCDISCCARD H
WHERE
     (B.CLIENT = F.ID (+) )
 AND (B.CODE = H.CODE)
 AND (substr(b.code,1,3)='294' or substr(b.code,1,3)='2135')
 AND (B.CARDTYPE=3)
GROUP BY
   B.CODE
 having SUM(case when h.doctype='CS' then H.TOTALSUM else -H.TOTALSUM end)>=30000);
 commit;
 update smdiscpers set cardtype=5, lastchange=sysdate where code in
(SELECT b.code
FROM
   SUPERMAG.SMCLIENTINFO F
 , SUPERMAG.SMDISCPERS B
 , SUPERMAG.SMDOCDISCCARD H
WHERE
     (B.CLIENT = F.ID (+) )
 AND (B.CODE = H.CODE)
 AND (substr(b.code,1,3)='294' or substr(b.code,1,3)='2135')
 AND (B.CARDTYPE=4)
GROUP BY
   B.CODE
having SUM(case when h.doctype='CS' then H.TOTALSUM else -H.TOTALSUM end)>=50000);
 commit;
update smdiscpers set cardtype=4, lastchange=sysdate where code in
(select code from smdiscpers where client in
(SELECT b.client from
  SUPERMAG.SMDISCPERS B
 , SUPERMAG.SMDOCDISCCARD H
WHERE
  (B.CODE = H.CODE)
AND ((substr(b.code,1,3)='294') or (substr(b.code,1,3)='2135'))
 AND (B.CARDTYPE IN (3,4,5))
GROUP BY
   B.client
having SUM(case when h.doctype='CS' then H.TOTALSUM else -H.TOTALSUM end)>=30000)) and ((substr(code,1,3)='294') or (substr(code,1,3)='2135'));
 commit;
update smdiscpers set cardtype=5, lastchange=sysdate where code in
(select code from smdiscpers where client in
(SELECT b.client from
  SUPERMAG.SMDISCPERS B
 , SUPERMAG.SMDOCDISCCARD H
WHERE
 (B.CODE = H.CODE)
 AND ((substr(b.code,1,3)='294') or (substr(b.code,1,3)='2135'))
 AND (B.CARDTYPE IN (3,4,5))
GROUP BY
   B.client
having SUM(case when h.doctype='CS' then H.TOTALSUM else -H.TOTALSUM end)>=50000)) and ((substr(code,1,3)='294') or (substr(code,1,3)='2135')); 
 commit;
insert into smpostqueue(enqtime,enqseq,target,objtype,objid,paramint,paramstr,transflags,virtpack,commentary) select  sysdate,rownum,null,'DC', code , null, null, 0,null, null from smdiscpers where to_char(lastchange,'DDMMYYYY')=to_char(sysdate,'DDMMYYYY');
commit;
12.07.2006 16:57
akonev
 
действительно! про SMDOCDISCCARD я как раз и забыл *01
стало быть ежедневно - тоже очень даже запросто
12.07.2006 16:59
Mtirt
 
Ну у нас это 2 года работает. С небольшими модификациями.
18.08.2006 13:10
akonev
 
абалдеть! их все-таки сделали *03
признавайтесь, на ком обкатывают!
18.08.2006 15:00
kadr
 
Мы у себя (Уфа, "Матрица") сами сделали, и обкатали.
Тока есть небольшие недоработки, иногда отправляется очень много лишних карт по магазинам, но задание настроено на ночь, поэтому не критично
Часовой пояс GMT +3, время: 14:37.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.