Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Супермаг Плюс (Супермаг 2000)

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

24.11.2024 14:19


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

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

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

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

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

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

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

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


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

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

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

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

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

функции:
SQL код:
--получение для артикула id маркетинговых акций за период . 
--если акций несколько, возврат нескольких значений через разделитель (,). 
--если акций нет, то возврат null
--MyArticle - артикул
Create or Replace Function RAD_Get_AU_ID_By_Date(ADateFrom in date, ADateTo in date, ALocID 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)
--Возврат =0 (нет чеков с такой скидкой) =1(есть чеки с такой скидкой)
create or replace function RAD_Is_Card_In_Check_Discounts(ADateFrom in date, ADateTo in date, ALocID in supermag.smstorelocations.id%type,
  AArticle in supermag.smcard.article%type, AProgramID 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
Добавил функцию, изменил код скидки, отчёт упирается в ошибку:
Код:
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
Просмотров: 270
Размер:	13.6 Кб
ID:	9386   Нажмите на изображение для увеличения
Название: Image 2721.png
Просмотров: 254
Размер:	24.1 Кб
ID:	9387  
20.04.2018 10:49
Цитата:
Aligator Добавил функцию
Неа, не добавили. По крайней мере, ругается, что нет такой функции. Может быть, если копировали текст в SQL+, там размер буфера ограничен и целиком текст обеих функций не влез. Попробуйте функции добавить по очереди, сперва одну, затем вторую.

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

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