[ОТВЕТИТЬ]
11.11.2013 08:09
whitewizard
 
Понадобилось показать карточки, у которых заведена индивидуальная наценка и она отличается от наценки на группу

Код:
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
Dim
 
штатный отчет есть
11.11.2013 08:36
whitewizard
 
Цитата:
Dim штатный отчет есть
в бизнес анализе?
11.11.2013 09:00
whitewizard
 
Тут хотели с выгрузкой в ексель
24.01.2018 14:28
Starter
 
Функция с ошибками. Или, возможно, структура БД поменялась и сейчас уже не то.

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 varchar2loc 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(flags2) = 2);
        
select max(extrachargeinto cl_name from supermag.smextracharge where article=p_a and pricetype pt;
       if 
cl_name is not null then
            cl_name2 
:= supermag.smgetextrachargeclass(p_apt);  
            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, время: 23:04.

 

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