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

Индивидуальные наценки на карточки в бизнес анализе : Супермаг Плюс (Супермаг 2000)

22.11.2024 11:59


11.11.2013 08:09
Понадобилось показать карточки, у которых заведена индивидуальная наценка и она отличается от наценки на группу

Код:
CREATE OR REPLACE 
function extracharge2  ( p_a in varchar2, loc in integer )
    return varchar2
    is
        cl_name  varchar2(100) default null;
        cl_name2  varchar2(100) default null;
        pt  integer(3) default null;        
    begin
        select pricetype into pt from supermag.smlocprices where locid = loc and (bitand(flags, 2) = 2);
        select extracharge into cl_name from supermag.smextracharge where article=p_a and pricetype = pt;
       if cl_name is not null then
            cl_name2 := supermag.smgetextrachargeclass(p_a, loc);  
            if cl_name = cl_name2 then
                cl_name := null;
            else
                cl_name := cl_name || ' (' || cl_name2 || ')';
            end if;    
        end if;    
        return cl_name; 
   end;

Слева артикул и название, сверху МХ, в таблице наценка на карточку и в скобках наценка на группу.
На входе (артикул, МХ)
На выходе наценка_на_карточку (наценка_на_группу)
В качестве расчётной цены берётся цена для кассы у заданного МХ.
11.11.2013 08:31
штатный отчет есть
11.11.2013 08:36
Цитата:
Dim штатный отчет есть
в бизнес анализе?
11.11.2013 09:00
Тут хотели с выгрузкой в ексель
24.01.2018 14:28
Функция с ошибками. Или, возможно, структура БД поменялась и сейчас уже не то.

1. supermag.smgetextrachargeclass(p_a, loc) - в этой функции второй аргумент должен быть не код места хранения, а код цены
2. select extracharge into cl_name from supermag.smextracharge where article=p_a and pricetype = pt; - возникает исключение NO_DATA_FOUND, и функция всегда возвращает NULL, если у карточки нет инд. наценки. Впрочем, если функция только для карточек у которых инд. наценка есть, то и так будет работать.

Исправленный вариант:
SQL код:
CREATE OR REPLACE 
function extracharge2  ( p_a in varchar2, loc in integer )
    return varchar2
    is
        cl_name  varchar2(100) default null;
        cl_name2  varchar2(100) default null;
        pt  integer(3) default null;        
    begin
        select pricetype into pt from supermag.smlocprices where locid = loc and (bitand(flags, 2) = 2);
        select max(extracharge) into cl_name from supermag.smextracharge where article=p_a and pricetype = pt;
       if cl_name is not null then
            cl_name2 := supermag.smgetextrachargeclass(p_a, pt);  
            if cl_name = cl_name2 then
                cl_name := null;
            else
                cl_name := cl_name || ' (' || cl_name2 || ')';
            end if;    
        end if;    
        return cl_name; 
   end;
 /
 commit; 
Часовой пояс GMT +3, время: 11:59.

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