ALIAS SE_PROD

VARIAVEL #TEXTO_FONTE
   Private oProgressBar,zbInsert,zbNomeGiro,zhGiros,zhTipos, zbNomeTipo,zbNomeDiv,zbNomeDivSD,zbNomeSubd,zbNomeGiro, zbNomeGPre, zbNomeForn
   wCab1:="Posicao Geral do Estoque"
   wCab2:="em "+Dtoc(date())+" as "+Time()

   zhGiros:={"D"=>"Diario","S"=>"Semanal","Q"=>"Quinzenal","M"=>"Mensal","B"=>"Bimestral","T"=>"Trimestral","4"=>"Quadrimestral","6"=>"Semestral"}
   zhTipos:={'00'=>'Prd.Revenda', '01'=>'Mat.Prima', '02'=>'Embalagem','03'=>'Em Processo','04'=>'Fab.Propria', '05'=>'Subproduto', '06'=>'Prd.Intermediario', '07'=>'Uso e Consumo', '08'=>'Imobilizado', '09'=>'Servico', '10'=>'Insumos' }
   
   
   zbNomeGPre:={||Se_gPre->( DbSeek(_pgpre->pgpreco), Descricao)}
   zbNomeGiro:={||if(_pgiro->pAbcFisica$"DSQMBT46",zhGiros[_pgiro->pAbcFisica],"*BaixoGiro*")}
   zbNomeTipo:={||if(val(_ptipo->ptipoitem)>=0.and.val(_ptipo->ptipoitem)<=10,zhTipos[StrZero(Val(_ptipo->ptipoitem),2)], _ptipo->ptipoitem+"-*SemTipo*")}
   zbNomeForn:={||nFabr:=_pForn->pPrincForn, StrZero(nFabr,4)+" "+sccpfab->(if(nFabr>0.and.nFabr<=RecCount(), (DbGoTo(nFabr),AllTrim(if(empty(cp_fantasi),cp_nome,cp_fantasi))),"* XML *") ) }
   zbNomeDiv :={||nDiv:=Val(Left(_pDiv->pDivisao,2)), StrZero(nDiv,2)+" "+se_divis->(if(nDiv>0.and.nDiv<=RecCount(), (DbGoTo(nDiv),AllTrim(dDesc)),"* XML *")) }
   zbNomeSubd:={||cpDivisao:=_pSubd->pDivisao, cpDivisao+" "+Se_Subd->( if(DbSeek(cpDivisao), AllTrim(sdDesc), "* XML *") ) }
   zbNomeDivSD :={||nDiv:=Val(Left(_pSubd->pDivisao,2)), StrZero(nDiv,2)+" "+if(nDiv>0.and.nDiv<=RecCount(), se_divis->(DbGoTo(nDiv),AllTrim(dDesc)),"* XML *") }


   se select('se_gpre')=0  entao Abra("0NOIDX", r_siga, "se_gpre",  "se_gpre", "se_gpre", "grupo")
   se select('sccpfab')=0  entao Abra("0NOIDX", r_siga, "sccpfab",  "sccpfab", "sccpfab", "cp_nome")
   se select('se_subd')=0  entao Abra("0NOIDX", r_siga, "se_subd" , "se_subd", "seisd_c", "sdcod")
   se select('se_divis')=0 entao Abra("0NOIDX", r_siga, "se_divis", "Se_divis")

   DbCreate('mem:_pgpre', { {'ptipoitem', 'C',2,0}, {'pGpreco',   'C',2,0}, {'qtditens','N',6,0}, {'qtdzeros','N',6,0}, {'peatual','N',12,2}, {'PVLUVEN3','N',12,2}, {'PVLUVENDA','N',12,2} } )
   DbCreate('mem:_pgiro', { {'ptipoitem', 'C',2,0}, {'pabcfisica','C',1,0}, {'qtditens','N',6,0}, {'qtdzeros','N',6,0}, {'peatual','N',12,2}, {'PVLUVEN3','N',12,2}, {'PVLUVENDA','N',12,2} } )
   DbCreate('mem:_pforn', { {'ptipoitem', 'C',2,0}, {'pprincforn','N',6,0}, {'qtditens','N',6,0}, {'qtdzeros','N',6,0}, {'peatual','N',12,2}, {'PVLUVEN3','N',12,2}, {'PVLUVENDA','N',12,2} } )
   DbCreate('mem:_pSubd', { {'ptipoitem', 'C',2,0}, {'pdivisao',  'C',4,0}, {'qtditens','N',6,0}, {'qtdzeros','N',6,0}, {'peatual','N',12,2}, {'PVLUVEN3','N',12,2}, {'PVLUVENDA','N',12,2} } )
   //    DbCreate('mem:_ptipo', { {'ptipoitem', 'C',2,0}, {'qtditens','N',6,0}, {'qtdzeros','N',6,0}, {'peatual','N',12,2}, {'PVLUVEN3','N',12,2}, {'PVLUVENDA','N',12,2} } )

   use ('mem:_pgpre') new exclusive
      index on pGpreco to ('mem:_pgpre')
   use ('mem:_pgiro') new exclusive
      index on pabcfisica to ('mem:_pgiro')
   use ('mem:_pforn') new exclusive
      index on pprincforn to ('mem:_pforn')
   use ('mem:_pSubd')  new exclusive
      index on pdivisao to ('mem:_pSubd')
   //use ('mem:_ptipo')  new exclusive
   //   index on ptipoitem to ('mem:ptipo')
   zbInsert := {|zi,zKey| if(DbSeek(zKey),RegLock(),(AppendBlank(),if(zi=1,_field->pAbcFisica:=zKey,if(zi=2,_field->pPrincForn:=zKey,if(zi=3,_field->pDivisao:=zKey,if(zi=4,_field->ptipoitem:=zKey,_field->pgpreco:=zKey)))))), ;
                 if(se_prod->peatual<=0,_field->qtdzeros++,(_field->qtditens++, _field->peatual+=se_prod->peatual, _field->PVLUVEN3+=se_prod->(PVLUVEN3*peatual), _field->PVLUVENDA+=se_prod->(PVLUVENDA*peatual)) )}
   
   Select Se_Prod   
   DbGoTop()
   oProgressBar:= myHProgressBar():Create( "Processando Produtos...")
   Do While .not. eof()
      _pgiro->(eVal(zbInsert, 1, se_prod->pabcfisica))
      _pforn->(eVal(zbInsert, 2, se_prod->pprincforn))
      _pSubd->(eVal(zbInsert,  3, se_prod->pdivisao))
      // _ptipo->(eVal(zbInsert, 4, se_prod->ptipoitem))
      _pgpre->(eVal(zbInsert, 5, se_prod->pgpreco))
      oProgressBar:Step()
      Skip
   EndDo
   oProgressBar:Close()

   select _pgiro
      index on 999999999999-pVluVen3 to ('mem:_pgiro')
   select _pgpre
      index on 999999999999-pVluVen3 to ('mem:_pgpre')
   select _pforn
      index on 999999999999-pVluVen3 to ('mem:_pforn')
   select _pSubd
      // _pSubd->( olst:GroupBy('mem:_pDiv', {||StrZero(Val(ptipoitem),2)+StrZero(Val(Left(pDivisao,2)),2)}, 'ptipoitem, left(pdivisao,2) as divisao, pdivisao, qtditens,qtdzeros,peatual,PVLUVEN3,PVLUVENDA', , .t.) )
      _pSubd->( olst:GroupBy('mem:_pDiv', {||StrZero(Val(Left(pDivisao,2)),2)}, 'ptipoitem, left(pdivisao,2) as divisao, pdivisao, qtditens,qtdzeros,peatual,PVLUVEN3,PVLUVENDA', , .t.) )
      _pSubd->( olst:GroupBy('mem:_ptipo', {||StrZero(Val(ptipoitem),2)}, 'ptipoitem, qtditens,qtdzeros,peatual,PVLUVEN3,PVLUVENDA', , .t.) )
      index on StrZero(Val(Left(pDivisao,2)),2)+Str(999999999999-pVluVen3) to ('mem:_pSubd')
   use ('mem:_pTipo')  new exclusive
      index on 999999999999-pVluVen3 to ('mem:_ptipo')
   use ('mem:_pDiv')  new exclusive
      index on 999999999999-pVluVen3 to ('mem:_pDiv')

   oLst:lOutputPdf      := .f.
   oLst:lOutputFr3      := .t.
   oLst:cAliasMaster    := '_pgiro'
   oLst:cReport         := 'estoque_posicao'

   oLst:AddDbFr3('mem:_pgpre', '_pgpre')
   oLst:AddDbFr3('mem:_pgiro', '_pgiro')
   oLst:AddDbFr3('mem:_pforn', '_pforn')
   oLst:AddDbFr3('mem:_ptipo', '_ptipo')
   oLst:AddDbFr3('mem:_pDiv',  '_pDiv')
   oLst:AddDbFr3('mem:_pSubd', '_pSubd')
   oLst:AddMasterDetail( '_pDiv', '_pSubd', 'divisao') 

   oLst:Run()
   oLst:End()

dbcloseall()

dbdrop('mem:_pgiro') 
dbdrop('mem:_pforn') 
dbdrop('mem:_pSubd')
dbdrop('mem:_pDiv')
dbdrop('mem:_ptipo')

#FIM_TEXTO_FONTE
