[ОТВЕТИТЬ]
04.10.2006 16:47
mighty
 
Привет всем!
Срочно надо сделать "алкогольные декларации". Я пытаюсь найти остатки на текущий момент по одному из артикулов но получемый результат несовпадает с остатками по местам хранения в СМ, подскажите пожалуйста, какие таблицы надо еще учесть в SQL запросе или документы?

Этот запрос возвращает текущий остаток одного артикула в алкогольной группе :
Я беру все документы ПН и Возвраты по кассе и вычитаю их них расходные накладные и кассовые документы...

select sum(WI),ARTICLE,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 ds.ARTICLE=c.ARTICLE
and t.ID=c.IDCLASS
and t.TREE like ('1.%')
and c.article=001606
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 ds.ARTICLE=c.ARTICLE
and t.ID=c.IDCLASS
and t.TREE like ('1.%')
and c.article=001606
group by c.ARTICLE,c.SHORTNAME
)
group by ARTICLE,SHORTNAME

Но смотрю в остатках (по местам хранения) по этому артикулу в СМ числится 56 бутылок, а по моему запросу получается 88, какие документы я еще не учел?
Помогите пожалуйста.

Заранее благодарен.
04.10.2006 16:52
OlegON
 
А из-за чего стремление считать по документам, а не брать из SMGOODS?
04.10.2006 16:57
mighty
 
У нас у некоторых артикулов(больше сотни) разница между остатками по поставщикам и по местам хранения достигает до 30-50%, я так понимаю что по местам хранения остатки рассчитываются именно реальные, то есть которые корректируются инвентаризационными описями, а по поставщикам только на основании приходных накладных? Хотелось до сути докопаться, менеджеры и директора меня спрашивают, почему разница, а я сам не понимаю расчета, поэтому внятно ответить им не могу..
04.10.2006 16:59
mighty
 
к тому же в декларации надо прописать не текущие остатки, а закупку и реализацию за период, а в SMGOODS текущие остатки по местам хранения..
04.10.2006 17:07
OlegON
 
Перемещения есть?
04.10.2006 17:11
Mtirt
 
Неустановленная себестоимость?
04.10.2006 17:15
OlegON
 
Цитата:
Но смотрю в остатках (по местам хранения) по этому артикулу в СМ числится 56 бутылок, а по моему запросу получается 88
Mtirt, тут про это речь, а он, если я навскидку уловил - просто доки суммирует.
04.10.2006 17:19
Mtirt
 
Да. Сначала надо понять, что ты хочешь... Затем делать.
Но для количественного остатка и это можно сделать.
Вот что будет, когда он сумму получить захочет?
04.10.2006 17:27
inna
 
А по какому отчету смотрятся остатки? Может отчет по аналитической базе?
04.10.2006 17:30
mighty
 
нет, мне не надо для декларации сумму, мне надо именно количество бутылок получить на дату начала периода отчета и дату конца периода (на квартал). То есть я просто беру приходные документы группирую их по артикулу и из них вычитаю количество по расходным документам. Ну конечно можетя не прав, ну собственно вопрос в этом. Надо рассчитать остатки на 2 даты и получив по ним разницу получить реализованное количество бутылок. Как это сделать SQL запросом?
04.10.2006 17:30
Mtirt
 
Человеку нужны данные для декларации по алкоголю.
Формы декларации в каждом регионе свои, но у нас попросили остатки в декалитрах.
Видимо здесь похожая проблема, поэтому человек должен посчитать их сначала в штуках, а потом их перевести в декалитры.
Стандартный отчет точно не подходит...
А что использовать?
Это вопрос религии и задач....
04.10.2006 17:39
mighty
 
Я пишу отчет в FAstReport, как напишу, поделюсь, вообще я манехонькую прожку написал,которая просто при первом запуске регистрит на себя расширение FR и потом любой отчет FR можно запустить с сетевого диска например как обычный документ Word, кроме этого из этой прожки отчеты можно просто создавать. Если надо могу куда-нить выложить, мне она очень помогает когда надо какой-то отчет сделать. Просто я работаю здесь недавно и надо вникнуть в структуру СМ..
04.10.2006 17:49
mighty
 
Да..Перемещений нет, неустановленная себестоимость есть, но на способ добывания остатков путем суммирования количеств она вроде не повлияет..
04.10.2006 17:53
OlegON
 
Попробуй по дате двигаться и смотреть соответствующую закладку в карточке... Всплывет пропущенный док. Так представлять трудно.
04.10.2006 18:06
mighty
 
olegon, чего - то я запутался..Это речь идет про разницу между остатками по поставщикам и по местам хранения? или про мой SQL запрос?
04.10.2006 18:08
mighty
 
Не уж - то никто не создавал свой отчет по остаткам на дату?
04.10.2006 18:13
Mtirt
 
Создавал конечно. Мой можешь на форуме проискать...
Там не просто на дату, а на каждый день периода есть.
Просто лучше самому встать на грабли.
04.10.2006 18:19
mighty
 
Mtirt, я искал, да не нашел..
04.10.2006 18:20
mighty
 
Инвентаризация недостачи это конечно расход, но она тоже WO,то есть попадает в отрицательное количество..
04.10.2006 18:23
Mtirt
 
Вот здесь. https://olegon.ru/index.php?name=For...iewtopic&t=742
На второй странице топика.
Берешь запрос и отбрасываешь пару уровней выборки...
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, время: 10:53.

 

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