[ОТВЕТИТЬ]
11.03.2015 15:39
BotMan
 
Подскажите, оперативный остаток в СМ рассчитывается (quantity-salequantity) или он хранится сразу в таблице??
дело в том, что если тяну из таблицы SMopergoods артикул который не продавался - то тогда ничего не отображается.
11.03.2015 15:59
Mtirt
 
smgoods.quantity - SMopergoods.salequantity

Можешь выбрать из вьюхи svgoodswithoper.
Или посмотреть её описание...
11.03.2015 16:12
BotMan
 
делаю такой запрос и если артикул продавался, тогда результат есть, если не продавался - результата нету вообще. понимаю, что артикул не попал в SMopergoods. подскажите плз как отобрать остаток, даже если не продавался сегодня артикул ?


Код:
select crd.name, goo.article, cast((goo.quantity-op.salequantity) as float) as operquant  from smgoods goo, smopergoods op, smcard crd
where crd.article = 1040282
and goo.article=op.article
and crd.article = op.article
and crd.article = goo.article
11.03.2015 17:00
Павел Сосновских
 
inner join/left join
или в таком написании "+" надо добавить
12.03.2015 10:06
BotMan
 
Код:
select crd.name, crd.article, cast((goo.quantity-nvl(sum(op.salequantity),0)+nvl(sum(-op.returnquantity),0)) as float) as quantity
 from supermag.smcard crd, supermag.smgoods goo, supermag.smopergoods op
 where crd.article = &Траляля
 and crd.article=op.article(+)
 and crd.article=goo.article 
  group by crd.name, crd.article, quantity
получился вот такой запрос, отображает ОперОстатки. Может кто найдет ошибку какую или подскажет как его оптимизировать можно ?
12.03.2015 10:47
Mtirt
 
А чем не нравится
Код:
select * from svgoodswithoper where article=&Траляля
12.03.2015 11:01
vdm
 
Как уже не раз сказали - посмотри svgoodswithoper.

В твоем:
- так объединять smgoods и smopergoods нельзя - в smopergoods количество разбито по кассам, их по складу свернуть нужно прежде чем с smgoods складывать
- cast неясно зачем, лишнее
- returnquantity должно быть с плюсом
12.03.2015 11:07
BotMan
 
первым делом поискал в своей документации "Том09 v.1.026. Структура БД ТС СМ-2000" - svgoodswithoper, но там пусто.
cast - мне тип в float нужен.
буду пробовать svgoodswithoper!
12.03.2015 11:23
svtl
 
svgoodswithoper - это вью, ее описание - в самой БД - т.е. просто чем-то открыть и посмотреть структуру. а уже описания таблиц, в нее входящих - смотрим в документе Структура БД. (в СМ+ вьюшки все (или почти все) начинаются с SV).
Далее, если получаете связку двух таблиц по left или rigth join (т.е., как в вашем случае, в одной из таблиц значений кол-ва для артикула может не быть), то значение поля из такой таблицы выбираете с обработкой null-знаечния. Причем не как у вас - nvl(sum(...)), а наоборот - sum(nvl(....))
12.03.2015 12:17
BotMan
 
Цитата:
vdm - так объединять smgoods и smopergoods нельзя - в smopergoods количество разбито по кассам, их по складу свернуть нужно прежде чем с smgoods складывать
так я же вроде складываю их в кучу, sum() предварительно, а потом вычитаю из smgoods?
12.03.2015 12:42
vdm
 
Если берешь количество по всем складам, то и smgoods.quantity нужно суммировать. Если не по всем, а по конкретному складу - то суммировать/объединять нужно с учетом склада.
12.03.2015 12:51
BotMan
 
Код:
select crd.name, crd.article, cast((sum(goo.quantity)-sum(nvl(op.salequantity,0))+sum(nvl(op.returnquantity,0))) as float) as quantity
from supermag.smcard crd, supermag.smgoods goo, supermag.smopergoods op
where crd.name like '%с408%'
and crd.article=op.article(+)
and crd.article=goo.article 
group by crd.name, crd.article, quantity 

4 rows selected in 0.062 seconds
просто этот запрос отрабатывается быстрее чет этот

Код:
select crd.name, crd.article, cast(sv.quantity as float) as quantity
from supermag.smcard crd, supermag.svgoodswithoper sv
where crd.name like '%с408%'
and crd.article=sv.article
group by crd.name, crd.article, sv.quantity

4 rows selected in 2.138 seconds
12.03.2015 13:01
Mtirt
 
У тебя один магазин? Или несколько в сети?
12.03.2015 13:07
BotMan
 
у меня один магазин и два места хранения, но товар в них не совпадает. походу по этому узко мысю :-D
12.03.2015 13:14
Mtirt
 
Раз два места хранения, всё же не мешает добавить в результат storeloc, и условие на объединение таблиц smgood и smopergood дополнить им же...
12.03.2015 14:20
vdm
 
Код:
with a as (select article, name
             from supermag.smcard c
            where c.name like '%с408%')
select a.name, a.article, cast(sum(nvl(g.quantity, 0))+sum(nvl(o.quantity, 0)) as float) as quantity
  from a, supermag.smgoods g,
       (select op.article,
               op.locid storeloc,
               sum(op.returnquantity)-sum(op.salequantity) quantity
          from supermag.smopergoods op, a
         where a.article=op.article
        group by op.article, op.locid
       ) o
 where a.article=g.article(+)
   and g.article=o.article(+)
   and g.storeloc=o.storeloc(+)
group by a.name, a.article;
Тут не учитывается вариант когда запись в smgoods отсутствует вообще, а продажи идут, в smopergoods артикул есть.
В svgoodswithoper это учтено, но выборка оттуда действительно медленная.
17.03.2015 09:35
BotMan
 
Код:
select decode(accepted, 1, 'Активная', 2, 'Исключенная', 0, 'Новая') as Accepted, crd.name, crd.article, cast(sv.quantity as float)  as quantity, 
wm_concat(barcode) as barcode
from supermag.smcard crd, supermag.svgoodswithoper sv, supermag.smstoreunits st 
where crd.article=sv.article
and crd.article=st.article 
and sv.storeloc in (:Storeloc)
and barcode in (:Barcode)
and upper(crd.name) like upper('%:name%')
and crd.article in (:article)
and crd.accepted in(:accept)
and sv.quantity <>0
group by crd.accepted, crd.name, crd.article, sv.quantity order by 4 desc
получился вот такой запрос. отрабатывается конечно не мгновенно, но главное чтобы все выходные данные были точные
Норм? )
Опции темы


Часовой пояс GMT +3, время: 11:25.

 

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