Остатки мц

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Winterfell
Сообщения: 8
Зарегистрирован: 17 дек 2009, 18:53
Откуда: Волгоград, ОАО Связьтранснефть
Контактная информация:

Остатки мц

Сообщение Winterfell »

Доброго времени суток!нужно написать sql запрос, который делал бы выборку остатков мц для мола, по конкретному складу и статье затрат,на какую-либо дату .
Если честно, не знаю даже толком какие таблицы помимо saldomc нужно использовать.Кто-нибудь делал подобное?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Остатки мц

Сообщение edward_K »

вот и ищите ее на форуме.
Но вообще то запаритесь слегка простым запросом не вытянуть.
sensoft
Постоянный гость
Сообщения: 67
Зарегистрирован: 15 апр 2008, 16:48
Откуда: Череповец

Re: Остатки мц

Сообщение sensoft »

если остатки - динамические, то их нада вначале рассчитать, напр:

Код: Выделить всё

  //---------------------------------------------------------------------------
  if ( not Store_Init )
    {
     Message(''#3'Не проинициализировался объект расчета сальдо...',cmCancel);
     EXIT ;
    }
  Store_ReInit ; // удаление таблицы TmpSaldo1
  Store_TypeOstatki( TRUE ) ; // входящие остатки
  Store_ForceInVal( FALSE );
  Store_SkladProizv( 0 );
  Store_Run ( OU03DB,
              if(GetFirst Pick where ((word(7)  == Pick.wList))=0,comp(-2),comp( 0)),
              if(GetFirst Pick where ((word(11) == Pick.wlist))=0,comp(-2),comp( 0)),
              if(GetFirst Pick where ((word(8)  == Pick.wList))=0,comp(-2),comp( 0)),
              comp( 0),
              TRUE, TRUE, TRUE
//              TRUE, TRUE, FALSE
             );
  Store_Done;
  //---------------------------------------------------------------------------
Winterfell
Сообщения: 8
Зарегистрирован: 17 дек 2009, 18:53
Откуда: Волгоград, ОАО Связьтранснефть
Контактная информация:

Re: Остатки мц

Сообщение Winterfell »

Да ничего страшного , что запрос не простой, главное знать из каких таблиц тянуть,а я не знаю.Мне нужен именно sql-запрос, тк делаю свою софтину, которая обращается к данным из галактики.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Остатки мц

Сообщение RAJAH »

Я так вытаскивал из SALDOMC.

Код: Выделить всё

select katmc.nrec, katmc.name, saldomc.kol, saldomc.srprice, saldomc.dsaldo, saldomc.cparty, saldomc.nrec, katparty.kod, katparty.name, kated.abbr
from katmc, saldomc, katparty, kated
where
((
saldomc.cmc    /== katmc.nrec and
katmc.ced      /== kated.nrec and
saldomc.cparty /== katparty.nrec and
0               == saldomc.sp and
add_day(ds, 1) >>= saldomc.dsaldo
))
Статья затрат - это, видимо, ссылка CSTZATR из KATMC.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Остатки мц

Сообщение edward_K »

одно но - в этом запросе нужно найти saldomc с максимальной датой и отсечь остатки без разреза.
Winterfell
Сообщения: 8
Зарегистрирован: 17 дек 2009, 18:53
Откуда: Волгоград, ОАО Связьтранснефть
Контактная информация:

Re: Остатки мц

Сообщение Winterfell »

RAJAH писал(а):Я так вытаскивал из SALDOMC.

Код: Выделить всё

select katmc.nrec, katmc.name, saldomc.kol, saldomc.srprice, saldomc.dsaldo, saldomc.cparty, saldomc.nrec, katparty.kod, katparty.name, kated.abbr
from katmc, saldomc, katparty, kated
where
((
saldomc.cmc    /== katmc.nrec and
katmc.ced      /== kated.nrec and
saldomc.cparty /== katparty.nrec and
0               == saldomc.sp and
add_day(ds, 1) >>= saldomc.dsaldo
))
Статья затрат - это, видимо, ссылка CSTZATR из KATMC.
Спасибо за ответ,но статья затрат это КАУ1, если посмотреть карточку складского учета, то там есть такое поле.где хранится кау1 и как его подцепить, я не знаю.
Winterfell
Сообщения: 8
Зарегистрирован: 17 дек 2009, 18:53
Откуда: Волгоград, ОАО Связьтранснефть
Контактная информация:

Re: Остатки мц

Сообщение Winterfell »

Кстати КАУ2 тоже потребуется, тк это центр ответственности.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Остатки мц

Сообщение RAJAH »

edward_K писал(а):одно но - в этом запросе нужно найти saldomc с максимальной датой и отсечь остатки без разреза.
А нахождение максимума у меня уже в тексте... :) Можно попытаться использовать select max(...
Winterfell писал(а):Спасибо за ответ,но статья затрат это КАУ1, если посмотреть карточку складского учета, то там есть такое поле.где хранится кау1 и как его подцепить, я не знаю.
Winterfell писал(а):Кстати КАУ2 тоже потребуется, тк это центр ответственности.
Точно не скажу, но аналитики МЦ у нас примерно так (spkau2, spkau3 и т.д. - это копии spkau):

Код: Выделить всё

katmc.chashan        == hashan.nrec and
hashan.canalit[1]    == spkau.nrec and
hashan.canalit[2]    == spkau2.nrec and
hashan.canalit[3]    == spkau3.nrec and
...
Winterfell
Сообщения: 8
Зарегистрирован: 17 дек 2009, 18:53
Откуда: Волгоград, ОАО Связьтранснефть
Контактная информация:

Re: Остатки мц

Сообщение Winterfell »

Может кому то поможет, вот как я решил эту задачу:
select gal.katmc.fname, max(gal.to_oradate(saldoobj.fdoper)),max(saldoobj.fkol),max(saldoobj.FSRPRICE) keep (dense_rank last order by gal.to_oradate(saldoobj.fdoper)) from GAL.saldoobj
inner join gal.katmc on gal.katmc.fnrec=saldoobj.fcmc
where gal.to_oradate(saldoobj.fdoper) <= '08.08.10' and
fcmol='80680000000000A3' and
fcpodr='8099000000000040' and
fkol>0 and fwmode=1 and fcobj='8001000000007BCA'
group by gal.katmc.fname
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Остатки мц

Сообщение Руслан »

Написал запрос по остаткам МЦ на PL/SQL на Oracle. Как его переписать в запрос под VIP?

Код: Выделить всё

select distinct km.fkod Mol, kp.fname Party, k.fname Name_gal, tmp.fkol FKOL, tmp.nzkol, Tmp.FSRPRICE srprice
from (select  
mc.fname, mc.fisarch, t.fcmc cmc, T.FCPARTY,T.FCMOL,T.FCPODR,t.fkol fkol, NZS.FKOL nzkol, T.FDSALDO,T.FSP,T.FSRPRICE,  mc.fkgroupmc, row_number() over(partition by T.FCPARTY,T.FCMOL,T.FSP,t.fcmc,T.FCPODR order by max(t.FDSALDO) desc) as rnm 
from GAL810.NORMZAPAS nz, GAL810.NORMZAPASSPEC nzs, gal810.saldomc t, gal810.katmc mc  
where t.fcpodr != '8000000000000000' and
     mc.fnrec  = t.fcmc
     and NZ.FATL_NREC = NZS.FCNORM
     and NZS.FCMC = MC.FNREC 
     and T.FCPODR = NZ.FCPODRAZD
     and  t.fdsaldo <=131991297
     and mc.fkgroupmc like '%'
     group by t.fcmc,mc.fname,mc.fisarch, t.fkol, NZS.FKOL, mc.fkgroupmc,T.FSRPRICE, T.FDSALDO,T.FCPARTY,T.FCMOL,T.FCPODR,T.FSP,T.FCPARTY) tmp
left join gal810.katmc k on k.fnrec=tmp.cmc
left join GAL810.KATPARTY kp on KP.FNREC=tmp.fcparty
left join GAL810.KATMOL km on km.fnrec=tmp.fcmol
left join GAL810.TYPEMC tmc on TMC.FNREC=K.FCTYPE
left join GAL810.KATPODR podr on podr.fnrec=tmp.fcpodr
left join GAL810.KATOTPED otp on OTP.FCMCUSL=K.FNREC
left join GAL810.GROUPMC gr on GR.FNREC=K.FCGROUPMC
where tmp.rnm = 1 and tmp.fisarch!=1 
and OTP.FAKT = '1'
and K.FCTYPE=TMC.FNREC
and K.FNREC = OTP.FCMCUSL;
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Остатки мц

Сообщение Den »

Открываем vipprog, раздел "Работа с БД(SQL), и в нем раздел "Прямой SQL".
Изучаем синтаксис,возможности и правила написания запросов посредством этой альтернативной функциональности доступа к данным.

p.s. не пробовали "Настройки Галактики \ Логистика \ Складской учет \ Расчет сальдовых остатков с использованием DSQL" ? или чем то не устраивает ?
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Остатки мц

Сообщение Руслан »

Мануалы я читал, запрос мне нужен для отчета. Делаю отчет по остатками и нормам страхового запаса (это свои разработки). Может кто уже сталкивался и есть готовый запрос...
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Остатки мц

Сообщение edward_K »

Ну так и напишите его на DSql. Для начала в сапорте с SQL запрос. Читайте форум. Все отличие будет в том что поля нужно писать как в галке а ваши фильтры переписать используя #comp(NRec) и #date(dd,mm,yyyy)
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Остатки мц

Сообщение Руслан »

Начал переписывать, но ругается на вложенный запрос. И как еще переписать partition, row_number:

Код: Выделить всё

select distinct km.kod Mol, kp.name Party, k.name Name_gal, tmp.kol FKOL, tmp.nzkol, Tmp.SRPRICE srprice
from (select
mc.name, mc.isarch, t.cmc cmc, T.CPARTY,T.CMOL,T.CPODR,t.kol kol, NZS.KOL nzkol, T.DSALDO,T.SP,T.SRPRICE,  mc.kgroupmc, row_number()
over(partition by T.CPARTY,T.CMOL,T.SP,t.cmc,T.CPODR order by max(t.DSALDO) desc) as rnm
from NORMZAPAS nz, NORMZAPASSPEC nzs, saldomc t, katmc mc
where ((t.cpodr != '8000000000000000'
     and mc.nrec  == t.cmc
     and NZ.ATL_NREC == NZS.CNORM
     and NZS.CMC == MC.NREC
     and T.CPODR == NZ.CPODRAZD
     and  t.dsaldo <=131991297
     and mc.kgroupmc like '%'))
     group by t.cmc,mc.name,mc.isarch, t.kol, NZS.KOL, mc.kgroupmc,T.SRPRICE, T.DSALDO,T.CPARTY,T.CMOL,T.CPODR,T.SP,T.CPARTY) tmp
left join katmc k on k.nrec=tmp.cmc
left join KATPARTY kp on KP.NREC=tmp.cparty
left join KATMOL km on km.nrec=tmp.cmol
left join TYPEMC tmc on TMC.NREC=K.CTYPE
left join KATPODR podr on podr.nrec=tmp.cpodr
left join KATOTPED otp on OTP.CMCUSL=K.NREC
left join GROUPMC gr on GR.NREC=K.CGROUPMC
where ((tmp.rnm == 1 and tmp.isarch!=1
and OTP.AKT == '1'
and K.CTYPE==TMC.NREC
and K.NREC == OTP.CMCUSL));
Ответить