Страница 1 из 1
					
				Наличие по складу - алгоритм
				Добавлено: 02 фев 2004, 12:24
				 Serges
				Уважаемые коллеги, у кого-нибудь есть алгоритм формирования стандартного галактического отчета "Наличие по складам" для 5.84?
На топике 
http://www.tyumbit.ru/galaktika/read.ph ... 865&t=2845 Den предлагает свой вариант, однако результат его реализации для конкретного склада у меня отличается от стандартного.
 
			 
			
					
				Re: Наличие по складу - алгоритм
				Добавлено: 02 фев 2004, 13:56
				 Den
				Table struct formcs
(
  nrec    :comp      ,
  barkod  :string[20],
  shortkod:string[3] ,
  ed      :comp ,
  name    :string[50],
  mexkod  :string[3] ,
  cpodr   :comp      ,
  cgroup  :comp      ,
  KGROUPMC:string[20]
)
 with index
(
 formcs01=cpodr+barkod,
 formcs02=cpodr+shortkod,
 formcs03=cpodr+mexkod,
 formcs04=nrec
);
Table struct forpodrs
(
  nrec   :comp      ,
  kod    :string[10],
  name   :string[70]
)
 with index
(
 forpodrs01=nrec
);
interface ostatki 'Остатки по разным разрезам',cyan;
create view 
var
 datbeg             :date
 counpickpod        :word
 nakopost,sumost    :double
 kolka,allkol             : double
 allsum,mex13,mex16 : double
 podrnrec        :comp
 oldkal,namekal,prevkal,prevmc :string
 dobavka,first           :integer
 descf : longint
 (spod)
 as select 
  if(counpickpod=0,'',
     if (counpickpod=1,
      katpodr.name,
       'выбрано '+DoubleToStr(counPickPod,'66666') )),
 *
 from 
    pick    ,
    katpodr(Readonly) ,
    katmc  (Readonly) ,
    kated  (Readonly)
      where ((
              word(11)==pick.wlist
              and pick.crec==katpodr.nrec
               and pick.crec==saldofnd.cpodr
                and 0==saldofnd.sp
                 and saldofnd.cmc/==katmc.nrec
!                  and katmc.CED==kated.nrec
                    and katmc.nrec==katotped.cmcusl
                     and 1==katotped.prmc
                )) ;
form ostatoks ('ostatoks.out');
procedure CheckPick(number:word);
  {
  var Stat : word;
  CASE number OF
    11 : counPickPod  := 0 ;
  END ;
  FOR (Stat := GetFirst Pick where ((number == Pick.wList));
       Stat  = tsOk;
       Stat := GetNext  Pick where ((number == Pick.wList)) )
    {
    CASE number OF
      11 : counPickPod  := counPickPod  + 1 ;
    END ;
    }
  }
Screen VVVs
fields
 datbeg : noprotect;
 spod   : protect,pickbutton;
Buttons
 CmYes,default;
 Cmcancel;
<<
    Задание параматеров формирования отчета
    получить инфу на дату  .@@@@@@@@@@
    по складу(ам) .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
           <.   Да   .>        <. Отмена .>
>>
end; //screen
!#include pocr.vpp
Handleevent
Cmpick :{
          case (curfield) of
          #spod:{
                delete novisual Pick;
                 if (runinterface('GetSomePodr')=cmCancel)  
                  counPickPod := 0;
                else
                  {
                  if (GetFirst Pick = tsOk)
                    if (GetFirst KatPodr = tsOk) {}
                  CheckPick(11);
                  }         
                }
          end;
        Rereadrecord;
       }
cmDelOnProtect :
  {
  CASE (CurField) OF
    #sPod  : { counPickPod  := 0; delete novisual Pick; }
  END;
  Rereadrecord;
  }
CmYes:{
       StartNewVisual(vtRotatevisual, vfTimer + vfBreak + vfConfirm,''#13'Идет забрасывание кое-чего кое-куда',0);
        _Loop pick
        {
          forpodrs.nrec:=katpodr.nrec;
          forpodrs.kod :=katpodr.kod;
          forpodrs.name:=katpodr.name;
          insert current forpodrs;
         _Loop saldofnd
         {
          _Loop katmc
          {
           formcs.nrec    :=katmc.nrec    ;
           formcs.barkod  :=katmc.barkod  ;
           formcs.shortkod:=substr(katmc.barkod,1,3);
           formcs.mexkod  :=substr(katmc.barkod,4,3);
           formcs.name    :=katmc.name    ;
           formcs.cpodr   :=saldofnd.cpodr;
           formcs.cgroup  :=katmc.CGROUPMC;
           formcs.KGROUPMC:=katmc.KGROUPMC;
          }
         _Loop katotped
          {
           formcs.ed  :=katotped.nrec ;
           insert current formcs;
          }
         }
        }
       Stopvisual('',0);
       StartNewVisual(vtRotatevisual, vfTimer + vfBreak + vfConfirm,''#13'Идет поиск остатков по складу',0);
        _Loop forpodrs
        {
         SetvisualHeader(forpodrs.name);
         nakopost:=0;
         sumost  :=0;
         _Loop formcs where ((forpodrs.nrec==formcs.cpodr)) ordered by index formcs01
         {
           if (getlast saldomc where ((0==saldomc.sp
                                        and formcs.nrec/==saldomc.cmc
                                         and datbeg>>=saldomc.dsaldo
                                           and (saldomc.cpodr=forpodrs.nrec) ))=tsok
                and saldomc.kolp-saldomc.kolr>0)
           {
            kolka:=kolka+1;
            ostatoks.write(kolka);
            ostatoks.write(formcs.barkod);
            ostatoks.write(formcs.name);
            ostatoks.write(saldomc.kolp-saldomc.kolr);
            ostatoks.write(saldomc.srprice);
            ostatoks.write(round(round(saldomc.srprice,3)*(saldomc.kolp-saldomc.kolr),2));
!            clearbuffer(#prices);
/*
            insert prices set
            nrec       :=0,
            CKLPRICE   :=comp(281474976710792),
            CTHING     :=formcs.nrec,
            TIP        :=0,
            NAME       :=formcs.name,
            BARKOD     :=formcs.barkod,
            diskret    :=1,
            PRICE      :=round(saldomc.srprice,3),
            DFORM      :=cur_date,
            PRAVT      :=1,
            COTPED     :=formcs.ed,
            CGROUPMC   :=formcs.cgroup,
            kod        :=formcs.kgroupmc,
            ONZAVPRICE :=false;
*/
           }
         }
        }
        Stopvisual('',0);
       delete all from pick;
       delete all from forpodrs;
       delete all from formcs;
       ostatoks.showfile;
       CloseInterface(cmClose);
      }
end;
end.
А это форма :
.form ostatoks
.fields
 kolka
 bar
 names
 kol
 cena
 sumka
.endfields
.{
  @@@ @@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   &'&&&&&&&&.&&   &'&&&&&&&&.&&  &'&&&&&&&&.&&
.}
.endform
Правда мол у меня там не выбирается, но с Галактическим "Наличием..." сходится.
Если SQL-версия Галки можешь попрабать так из QA:
use Galaxy
Declare @MyDate Int, @MyPodr Binary(8)
Set @MyDate = dbo.DateToInt('2003-11-27')
Set @MyPodr = 0x80000000000000C3
select k.f$barkod, (t7.f$kolp-t7.f$kolr) as ostatok, t7.f$nrec from
	t$katmc k inner join t$saldomc t7 on 
	k.f$nrec = t7.f$cmc inner join 
	
	(select t2.f$nrec as saldonrec from t$saldomc t2 Inner Join
		(select  s.f$cmc as mc, max(s.f$dsaldo) as maxdate
		from	t$saldomc s
		where	s.f$dsaldo<=@MyDate and s.f$cpodr = @MyPodr 
		group  by s.f$cmc
		) t1
	on t2.f$cmc=t1.mc and t2.f$dsaldo=t1.maxdate and t2.f$cpodr = @MyPodr ) t5
on t7.f$nrec = t5.saldonrec
and (t7.f$kolp-t7.f$kolr)>0
order by 1
COMPUTE SUM(t7.f$kolp-t7.f$kolr)
			 
			
					
				Re: Наличие по складу - алгоритм
				Добавлено: 03 фев 2004, 06:12
				 Serges
				Den, скопировал, только добавил в форму итог - не идет с Галактическим "Наличием"  .`)
Засада...
			 
			
					
				Re: Наличие по складу - алгоритм
				Добавлено: 03 фев 2004, 12:20
				 Den
				Странно, мож в базе какая засада. Я у себя проверял не раз - точно все шло...попробуй выловить по каким позициям не идет и посмотреть - кто неправлиьно формирует : стандартный галактический отчет или моя...
			 
			
					
				Re: Наличие по складу - алгоритм
				Добавлено: 03 фев 2004, 12:52
				 GTHack
				что значит SQL-версия Галактики ?
как, где это можно посмотреть - проверить ?
			 
			
					
				Re: Наличие по складу - алгоритм
				Добавлено: 03 фев 2004, 13:24
				 Den
				license.lic - раздел список доступных платформ.
			 
			
					
				Re: Наличие по складу - алгоритм
				Добавлено: 05 фев 2004, 09:04
				 Serges
				Den, твоя формирует неправильно - некоторые позиции выводятся несколько раз, отсюда и итог неверный  :-/
			 
			
					
				Re: Наличие по складу - алгоритм
				Добавлено: 05 фев 2004, 09:27
				 GTHack
				license.lic - раздел список доступных платформ
это понятно, меня именно формулировка заинтересовала - "SQL версия Галки"
я не совсем понял о чем речь то
			 
			
					
				Re: Наличие по складу - алгоритм
				Добавлено: 05 фев 2004, 09:55
				 Den
				2 Сергей
Странно, у меня все ОК, специально с Галактическим наличием сейчас сверил.Может у тебя как то здорово учет по складу отличается от моего..хотя чего там такого м.б.