Форум по программам и оборудованию > > >

Отчет с исключением товаров из маркетинговых контрактов или оплатой бонусами (скидка в УКМ)

18.10.2019 7:20


18.04.2018 16:07
Aligator
 
Есть необходимость получить фильтрацию в бизнес-анализе такого результата отчёта:

(Временной интервал и место хранение/места хранения задается пользователем)
Поля отчета. Артикул, Наименование товара, %наценки на товар или группу, доходность, разница наценки, место хранения название полное,цена прихода, цена реализации,количество продаж и сумма продаж.

- это всё сделано, но необходимо что бы в него не попадали позиции по которым действует маркетинговый контракт в Супермаге, и не учитывались позиции которые оплачиваются балами в УКМ - реализация загружается через XML конвертер, т.е. в чеках отображается какая скидка отработала на товар.

Просьба помочь в функции, которая сможет отфильтровать такое условие.
19.04.2018 10:47
Starter
 
Цитата:
Aligator не попадали позиции по которым действует маркетинговый контракт в Супермаге, и не учитывались позиции которые оплачиваются балами в УКМ - реализация загружается через XML конвертер, т.е. в чеках отображается какая скидка отработала на товар.
Т.е. имеется в виду те позиции, которые присутствуют в действующих на текущий момент документах маркетинговых акций ? Или карточка упоминается в документах МА, действующих в определенном периоде ?

И - по поводу чеков - не понятно. т.е. если в определенном выбранном периоде для этого товара была определённая скидка (пусть даже один раз), то такой товар не отображать ?

И - приложили бы задачу БА, понять, какая модель используется.
19.04.2018 11:00
Mtirt
 
Я поняла, что карточка есть в действующих контрактах с типом "маркетинговый".
19.04.2018 11:07
Aligator
 
Цитата:
Starter Т.е. имеется в виду те позиции, которые присутствуют в действующих на текущий момент документах маркетинговых акций ? Или карточка упоминается в документах МА, действующих в определенном периоде ?

И - по поводу чеков - не понятно. т.е. если в определенном выбранном периоде для этого товара была определённая скидка (пусть даже один раз), то такой товар не отображать ?

И - приложили бы задачу БА, понять, какая модель используется.
Да, для товаров в отчётный период при этом есть созданная МА в Супермаг+.


По чекам да, если в заданном периоде была продана позиция в чеке со скидкой - её исключить.
Отчёт во вложении
19.04.2018 14:58
Starter
 
Цитата:
Aligator Да, для товаров в отчётный период при этом есть созданная МА в Супермаг+.
У МА есть три даты - дата документа, дата начала, дата окончания. Ну и статус - завершена, исполняется, принята, черновик.
статус - без разницы ?
и "есть созданная МА в супермаг+" - имеется в виду пересечение двух временных диапазонов (отчета и акции (время начала - время конца)) ?

т.е. акция с 15 по 25 апреля, а диапазон отчета с 10 по 16 апреля - значит карточка фильтруется ?
19.04.2018 23:52
Starter
 
Вот вариант (во вложении).

Только необходимо функции добавить (ниже).
В функции для проверки чеков - входящий параметр - код скидки из укм4. это если в см+ смотреть скидки для конкретной позиции в чеке колонка "код скидки кассы".
В задаче во вложении прописан код скидки 16. Какой он будет у вас - неизвестно.

для маркетинговых акций - смотрится пересечение интервалов выбранных дат в задаче БА и дат действий маркетинговых акций. Статус акции не анализируется, т.е. акции в статусе черновик лучше не держать в базе, так как они тоже будут учитываться.

Ну и быстродействие, конечно, оставляет желать лучшего, поэтому лучше сперва потестить на нескольких карточках и небольшом периоде.

функции:
SQL код:
--получение для артикула id маркетинговых акций за период 
--
если акций нескольковозврат нескольких значений через разделитель (,). 
--
если акций нетто возврат null
--MyArticle артикул
Create 
or Replace Function RAD_Get_AU_ID_By_Date(ADateFrom in dateADateTo in dateALocID in supermag.smstorelocations.id%type,AArticle in supermag.smcard.article%type
return 
varchar2 is
    l_str  varchar2
(2000) default null;
    
l_sep  varchar2(1) default null;
BEGIN

for x in select au.id from  supermag.SMSpecMA sp,supermag.smauctions au,supermag.smdocuments d 
            where 
((ADateFrom between trunc(au.datebegin) and trunc(au.dateend)) or (ADateTo between trunc(au.datebegin) and trunc(au.dateend))) 
            and 
sp.DOCID=au.ID and sp.Article=AArticle and d.Location=ALocID and d.ID=AU.ID and D.doctype=AU.doctype and d.doctype='MA'loop
            l_str 
:=  l_str||l_sep||x.id;
           
l_sep := ',';
       
end loop;
       return 
l_str;
EXCEPTION WHEN OTHERS THEN RETURN NULL;
end RAD_Get_AU_ID_By_Date;
/
commit;

--
Проверка наличия скидки на товар в чеках за определенный период
--входпараметрыдата начала периодадата конца периодакод места храненияартикулКОД СКИДКИ ИЗ УКМ4 (можно посмотреть в чеках в СМили в параметрах скидки в укм4)
--
Возврат =(нет чеков с такой скидкой) =1(есть чеки с такой скидкой)
create or replace function RAD_Is_Card_In_Check_Discounts(ADateFrom in dateADateTo in dateALocID in supermag.smstorelocations.id%type,
  
AArticle in supermag.smcard.article%typeAProgramID in integer) return integer 
is
  res integer
:=0;
  
begin
select count
(*) into res from dual 
 where exists 
(SELECT (S.Article), UKM4.PROGRAMID
 FROM SVAnalyticsCheckItems S
,SVAnalyticsCheck Z,SMCASHITEMSDISCUKM4 UKM4
 WHERE S
.LocID=UKM4.LocID(+) and S.DeskNum=UKM4.DeskNum(+) and S.ZNum=UKM4.ZNum(+) and S.CheckNum=UKM4.CheckNum(+)  and S.Item=UKM4.Item(+) 
 and 
Z.LocID=S.LocID  and Z.DeskNum=S.DeskNum and Z.ZNum=S.ZNum  and Z.CheckNum=S.CheckNum  
 
and S.article=AArticle and Z.CheckDate between trunc(ADateFrom) and trunc(AdateTo)
 and 
Z.LocID=ALocID
 
and UKM4.PROGRAMID=AProgramID);
 return (
res);
 
exception when no_data_found then
    
return(0);
end RAD_Is_Card_In_Check_Discounts;
/  
commit
20.04.2018 10:46
Aligator
 
Добавил функцию, изменил код скидки, отчёт упирается в ошибку:
Код:
2018.04.20 (Friday) 10:38:52 1.35.0.0 sp1  Sm.Main ( NANALY )
----- Прерывание работы программы -----
сообщение: "Информацию о формировании курсора задачи смотрите в файле: D:\SM2000\Data\SmAnalyticsErrorLog.txt"
исключение: Sm.Core.InteropException
hResult: 80004005h; доп. код: 0
источник: Супермаг+

----- Причина исключения, уровень вложения 1 -----
сообщение: "Ошибка открытия курсора. ORA-00904: "RAD_IS_CARD_IN_CHECK_DISCOUNTS": недопустимый идентификатор"
исключение: Sm.Core.InteropException
hResult: 80004005h; доп. код: 20012
источник: База данных

----- Причина исключения, уровень вложения 2 -----
сообщение: "ORA-20012: Ошибка открытия курсора. ORA-00904: "RAD_IS_CARD_IN_CHECK_DISCOUNTS": недопустимый идентификатор
   ORA-06512: на  "SUPERMAG.CORE", line 353
   ORA-06512: на  "SUPERMAG.ANALYTICS", line 2563
   ORA-00904: "RAD_IS_CARD_IN_CHECK_DISCOUNTS": недопустимый идентификатор
   ORA-06512: на  "SUPERMAG.SMARUNTEMPLATE", line 5
   ORA-06512: на  line 1"
исключение: Sm.Core.InteropException
hResult: 80004005h; доп. код: 20012
источник: Microsoft OLE DB Provider for Oracle

----- Причина исключения, уровень вложения 3 -----
сообщение: "begin supermag.SMARunTemplate(1452); end;"
исключение: Sm.Core.InteropException
hResult: 80004005h; доп. код: 0
источник: SmLibaryBase trace
Миниатюры
Нажмите на изображение для увеличения
Название: Image 2720.png
Просмотров: 260
Размер:	13.6 Кб
ID:	9386   Нажмите на изображение для увеличения
Название: Image 2721.png
Просмотров: 243
Размер:	24.1 Кб
ID:	9387  
20.04.2018 10:49
Starter
 
Цитата:
Aligator Добавил функцию
Неа, не добавили. По крайней мере, ругается, что нет такой функции. Может быть, если копировали текст в SQL+, там размер буфера ограничен и целиком текст обеих функций не влез. Попробуйте функции добавить по очереди, сперва одну, затем вторую.

Либо, как вариант, версия см+ старая и там нет таблицы SMCASHITEMSDISCUKM4 и функция не добавляется из за ошибки.
что получается, если в SQL+ сделать
SQL код:
select count(*) from SMCASHITEMSDISCUKM4
20.04.2018 11:05
Aligator
 
таки да, Toad чудит с такими скриптами походу, добавил по-отдельности и начал работать.
Убежал тестировать...
20.04.2018 11:17
Aligator
 
Starter,
по скидке в чеке отбор происходит, показывает галка есть она или нет, а вот по МА не отображает.
К примеру во вложении, акция есть, продажа была, но в отчёте нет отметки.
Места проведения акции точно указаны - по этому же МХ и отбираю.
Миниатюры
Нажмите на изображение для увеличения
Название: Image 2722.png
Просмотров: 258
Размер:	10.1 Кб
ID:	9389   Нажмите на изображение для увеличения
Название: Image 2723.png
Просмотров: 258
Размер:	6.6 Кб
ID:	9390  

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