05.10.2006 06:37
akonev
 
Цитата:
mighty Я беру все документы ПН и Возвраты по кассе и вычитаю их них расходные накладные и кассовые документы...
Похоже, ты берешь имнно ВСЕ. В том числе черновики. Не хватает условия по smdocuments.docstate.
На остатки по МХ влияют документы в статусах "принят в количестве" и "принят в ценах": smdocuments.docstate>1
05.10.2006 16:40
mighty
 
Andrew_Konev, да я проэто забыл, добавил проверку на состояние документа smdocuments.docstate>1 ничего не изменилось, результат тот же..
Mtirt, спасибо, гляжу..только как-то странно ты рассчитываешь остатки..Вроде как у меня проще..Сейчас результаты сверю..
05.10.2006 16:48
Mtirt
 
Ну я "загадочно" считала от текущих к нужной дате...
ТО есть назад.
05.10.2006 17:57
Little
 
mighty, а у тебя товар поставляет строго один поставщик ?! Просто надо понять, что именно ты должен указывать в декларации..
05.10.2006 18:35
mighty
 
мдя..интересно...
Mtirt, по твой запрос возвращает вообще 160 бутылок вместо 56...
Смотрите что я нарыл..
Вот этот запрос выводит все текущие остатки верно(с учетом того что не ведется производство)
select V.QUANTITY, G.GQUANTITY,G.ARTICLE,G.SHORTNAME
from
(select sum(f.WI) GQUANTITY,f.ARTICLE,f.SHORTNAME
from (
select sum(ds.QUANTITY) WI,c.ARTICLE,c.SHORTNAME
from smdocuments d,smspec ds, smcard c, sacardclass t
where
d.ID=ds.DOCID
and (d.DOCTYPE='WI' or d.DOCTYPE='CR')
and d.docstate>=2
-- and d.opcode in (0,3,9,13,18)
and ds.ARTICLE=c.ARTICLE
and t.ID=c.IDCLASS
-- and t.TREE like ('1.%')
-- and c.article=021623
group by c.ARTICLE,c.SHORTNAME
union
select -sum(ds.QUANTITY),c.ARTICLE,c.SHORTNAME
from smdocuments d,smspec ds, smcard c, sacardclass t
where
d.ID=ds.DOCID
and (d.DOCTYPE='WO' or d.DOCTYPE='CS')
-- and (1,2,7,8,12)
and d.docstate>=2
and ds.ARTICLE=c.ARTICLE
and t.ID=c.IDCLASS
-- and t.TREE like ('1.%')
-- and c.article=021623
group by c.ARTICLE,c.SHORTNAME
) f
group by f.ARTICLE,f.SHORTNAME) g,
smgoods v
where v.article=g.ARTICLE and V.QUANTITY-G.GQUANTITY<>0

В этом запросе я сравниваю те остатки которые получаю своим запросом с текущими остатками в SMGOODS и если разница между ними есть, то есть я посчитал не правильно, мне должны вывестись строки с разницей подсчета..
В магазине где нет производства этот запрос возвратил 0 строк, значит все считается верно за 5,5 секунды (Mtirt, твой запрос крутился 4,5 минуты).
В магазине где есть производство, вывелось 6 строк..ладно я с этим разгребусь..Но! Я брал типы документов
and (d.DOCTYPE='WI' or d.DOCTYPE='CR')
а если использовать опкоды то начинается путаница...
то етсь если я заменяю and
(d.DOCTYPE='WI' or d.DOCTYPE='CR') на d.opcode in (0,3,9,13,18)
а
(d.DOCTYPE='WO' or d.DOCTYPE='CS') на d.opcode in (1,2,7,8,12)
то получаю в первом магазине без производства 1 строку...Короче запутавшись совсем, я полез посмотреть что же такое опкоды..в СМ
Разделы-Настройки-Справочники-Типы документов сортирую все документы по опкодам..Ага, потом смотрю что последний у меня опкод документа Счет=52, это самый большой опкод..
Теперь самое интересное, создаю такой запрос:

select count(t.doctype) c,t.doctype,t.opcode from smdocuments t
group by t.opcode,t.doctype

то есть хочу вывести из списка документов количество всех существующих документов с группировкой по опкодам и типу документа. Получаю:
C DOCTYPE OPCODE
1 26364 AC -1
2 59 IL -1
3 135 OR -1
4 5 RL -1
5 7182 WI 0
6 149 CS 1
7 1 WO 1
8 1360 WO 2
9 124 CR 3
10 208 WO 7
11 4 WO 8
12 5 WI 9
13 1 WO 10
14 213 EO 50
15 220 RO 51
16 2397 EO 55

55 опкод ввел меня в штопор...Кто может подсказать где этот код прописан? Возможно я просто не там в СМ смотрю опкоды документов и все намного проще?
05.10.2006 18:48
Little
 
разделы, настройка, справочники, типы документов *06
05.10.2006 18:53
mighty
 
для рахода надо еще 10 опкод добавлять, то есть
d.opcode in (1,2,7,8,10,12)
05.10.2006 18:54
mighty
 
vadim, ну да..смотри мое сообщение выше твоего - там я и смотрел..но у меня нет опкода 55 в СМ!! вот в чем фишка..А через PL\SQL Developer вижу что с этим кодом 2397 документов(Платежи)..
16 2397 EO 55
06.10.2006 07:04
Mtirt
 
Разделы - настройка - справочники - виды операций.
У тебя оплату в Супермаге разносят? Или кассовые операции?
Это не движение товара, но документ то существует.
06.10.2006 11:14
mighty
 
>mighty, а у тебя товар поставляет строго один поставщик ?!
Нет конечно, это алкагольная продукция, в декларации должны указываться остатки на начало периода, конец периода, обороты, с разбивкой по группам "Водка", "Ликеро-водочная продукция" и др., с разбивкой по импорту, российскому яду :), местному и неместному..Все цифры в бутылках..

>У тебя оплату в Супермаге разносят? Или кассовые операции?
В СМ есть и кассовые операции и оплата..

Нашеееееееел!!!!!!!!! Спасибо всем!! это я протормозил! в моем запросе я документы со спецификацией связываю по одному полю ID, а надо по 2-ум, ID и DOCTYPE :) Уффф, бывает же :) Спасибо всем еще раз!
Запрос получился не такой красивый как у Mtirt, но затоработающий на 100% и очень быстро (3,5 секунды)

select
decode(instr(upper(C.NAME),'ВОДКА'),1,'Водка','')||
decode(instr(upper(C.NAME),'ШАМПАНСКОЕ'),1,'Шампанское','')||
decode(instr(upper(C.NAME),'ВИНО'),1,'Вина','')||
decode(instr(upper(C.NAME),'КОНЬЯК'),1,'Коньяки','')
GRUPPA,
C.ARTICLE,C.NAME,
nvl(PB.COUNT_IN_B,0) PRIHOD_B,nvl(PE.COUNT_IN_E,0) PRIHOD_E,nvl(RB.COUNT_OUT_B,0) RASHOD_B,nvl(RE.COUNT_OUT_E,0) RASHOD_E,
nvl(PB.COUNT_IN_B,0)-nvl(RB.COUNT_OUT_B,0) OSTATOK_B,
nvl(PE.COUNT_IN_E,0)-nvl(RE.COUNT_OUT_E,0) OSTATOK_E,
nvl(PE.COUNT_IN_E,0)-nvl(PB.COUNT_IN_B,0) PRIHOD_V_PEROID,
nvl(RE.COUNT_OUT_E,0)-nvl(RB.COUNT_OUT_B,0) RASHOD_V_PERIOD
from smcard c,sacardclass t,smcardproperties tg,
(
select sum(ds.QUANTITY) COUNT_IN_B,ds.ARTICLE
from smdocuments d,smspec ds
where
d.ID=ds.DOCID
and d.DOCTYPE=ds.DOCTYPE
and d.docstate>=2
and d.opcode in (0,3,9,13,18)
and d.CREATEDAT<=to_date('01.07.2006','DD.MM.YYYY')
group by ds.ARTICLE
) PB,
--расходы на начальную дату
(
select sum(ds.QUANTITY) COUNT_OUT_B,ds.ARTICLE
from smdocuments d,smspec ds
where
d.ID=ds.DOCID
and d.DOCTYPE=ds.DOCTYPE
and d.docstate>=2
and d.opcode in (1,2,7,8,10,12)
and d.CREATEDAT<=to_date('01.07.2006','DD.MM.YYYY')
group by ds.ARTICLE
) RB,
--приходы на конечную дату
(
select sum(ds.QUANTITY) COUNT_IN_E,ds.ARTICLE
from smdocuments d,smspec ds
where
d.ID=ds.DOCID
and d.DOCTYPE=ds.DOCTYPE
and d.docstate>=2
and d.opcode in (0,3,9,13,18)
and d.CREATEDAT<=to_date('01.09.2006','DD.MM.YYYY')
group by ds.ARTICLE
) PE,
--расходы на конечную дату
(
select sum(ds.QUANTITY) COUNT_OUT_E,ds.ARTICLE
from smdocuments d,smspec ds
where
d.ID=ds.DOCID
and d.DOCTYPE=ds.DOCTYPE
and d.docstate>=2
and d.opcode in (1,2,7,8,10,12)
and d.CREATEDAT<=to_date('01.08.2006','DD.MM.YYYY')
group by ds.ARTICLE
) RE

where
--smcard c, sacardclass t,smcardproperties tg,
-- ds.ARTICLE=c.ARTICLE
c.ARTICLE=pb.ARTICLE(+)
and c.ARTICLE=rb.ARTICLE(+)
and c.ARTICLE=pe.ARTICLE(+)
and c.ARTICLE=re.ARTICLE(+)
and t.ID=c.IDCLASS
and tg.ARTICLE=c.ARTICLE
and tg.PROPID=0
and t.TREE LIKE CONCAT('1.','%')
and tg.PROPVAL='ООО "Взлет"'
and not PB.COUNT_IN_B||PE.COUNT_IN_E||RB.COUNT_OUT_B||RE.COUNT_OUT_E is null

параметры сами проставите кому надо, мы используем в качество свойства 0 для карточек разделение по Торгоавым центрам, по ним я делаю отбор..
Часовой пояс GMT +3, время: 18:04.

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