ALIAS _ItKits

variavel zPrCustoEmFalta=0
variavel zFgFaltas="N"
variavel zFgSoFaltas="N"
variavel zFgPrecos="N"
variavel znPecas=0
variavel z0QtdCompra=0
variavel z1QtdCompra=0
variavel zLarguraPeca=0
variavel zAlturaPeca=0
variavel zLarguraCompra=0
variavel zAlturaCompra=0
variavel zSobra1Barra=0
variavel zqPecas1UndCompra=0
variavel zSobraCompra=0
variavel zpDesc=''
variavel zaPc={}
// variavel sPrtLineLen = 80
variavel zPrtPorInsumos:="S"
variavel zPrtPorProdutos:="S"
variavel zQtdOs := 1
T10,10,16,60,Opcoes
T2,2,Quantidade de Pecas a Montar.:,6,zQtdOs,999999
T3,2,Imprime Agrupado por Insumos :,1,zPrtPorInsumos,!
T4,2,Imprime Agrupado por Produtos:,1,zPrtPorProdutos,!

comando antes #TEXTO_FONTE
   oLst:lPortrait := .t.
   
   oLst:lOutputFr3 := .f.
   se zPrtPorInsumos="S" entao oLst:cAlias_DataCols := 'insumos'
   if oLst:lOutputFr3 .and. zPrtPorInsumos="S"
      oLst:cAliasMaster := oLst:cAlias_DataCols
      oLst:SetDbLst('mem:insumos')
      oLst:cTemplateFr3 := 'skel_' + 'ListaComGrp' +'.fr3'
   endif
   if zPrtPorInsumos="S" 
      oLst:AddCol('Insumo;PcodInsumo;N;999999;6;;;Direita;NaoSome;NaoImprima;PcodInsumo;')
      oLst:AddCol('Descricao;pdesc;C;@S35;35;;;Direita;NaoSome;NaoImprima;pdesc;')
      oLst:AddCol('Descricao;AllTrim(pdesc)+" (Cod "+lTrim(Str(PcodInsumo,13))+")";P;@S50;50;;;Esquerda;NaoSome;Imprima;pdesc_pcod;')
      
      oLst:cAlias_DataCols := 'pecas'
      se oLst:lOutputFr3 entao oLst:SetDbLst('mem:pecas')
      oLst:AddCol('Unids\nInteiras;if(pPecas>0,z0QtdCompra+z1QtdCompra,"");P;999999;8;;;Direita;NaoSome;')
      oLst:AddCol('Pecas;if(pPecas>0,znPecas,"");P;999999;6;;;Direita;NaoSome;')
      oLst:AddCol('Tamanho\n1 Peca;if(pLargura>0,Str(pLargura*100,5,1),"")+if(pAltura>0," x "+Str(pAltura*100,5,1),"")+"cm";P;@S17;17;;;Direita;NaoSome;')
      oLst:AddCol('ObsCorte;Upper(pObsForma);P;@S20;20;;')
      oLst:AddCol('Qtd\nProds;zQtdOs;P;999999;5;;;Direita;NaoSome;')
      oLst:AddCol('Produto;Upper(_kits->pDesc);P;@S35;35;;')
      oLst:Cab1( "Plano de Corte POR INSUMOS p/ Montar "+ltrim(str(zQtdOs,10))+" Pecas")
      oLst:Cab3( "")
      oLst:Cab3( "do Produto (Cod"+lTrim(Str(m_pCod,12))+") "+AllTrim(m_pDesc))
      oLst:AddCab( '_LINHA_FINA_' )
      oLst:AddCab( '_CABCOLS_' )
      oLst:AddCab( '_LINHA_GROSSA_' )
   
      oLst:AddRodape( '_LINHA_FINA_', "", {|| "Pagina "+Str(++pag,4)+" "} )
   
      oLst:AddGroup( { "KEY"=>{||PcodInsumo} } )
      oLst:AddGroup( { "HEADER"=>{ '_PULE_1LINHA_', '_DB:insumos', {"style"=>"font:Helvetica-BoldOblique"}, '_DATACOLS_', '_DB:pecas'} } )
      oLst:AddGroup( { "FOOTER"=>{ {||len(zaPc)>1}, {|| zAux:="........  Plano Corte: "+BrwComposicoes("planocorte",zaPc)} } } )
      oLst:AddGroup( { "FOOTER"=>{ {||zaPc:={},'_PULE_1LINHA_'} } } )
   
      se zPrtPorInsumos="S" entao DbGoTop() senao DbGoBottom()
   endif
   Do While .not. eof() .and. zPrtPorInsumos="S"
      (zPrCustoEmFalta:=znPecas:=z0QtdCompra:=z1QtdCompra:=zLarguraPeca:=zAlturaPeca:=zLarguraCompra:=zAlturaCompra:=zSobra1Barra:=zqPecas1UndCompra:=zSobraCompra:=0)
      
      se zQtdOs*mQuant-peAtual > 0 entao zPrCustoEmFalta := zPrCustoEmFalta + pVluVen3*(zQtdOs*mQuant-peAtual)
      
      zLarguraPeca := if(pLargura=0,1,pLargura)
      zAlturaPeca := if(pAltura=0,1,pAltura)  
      znPecas := zQtdOs*pPecas

      zLarguraCompra := if(pLargCompr=0,1,pLargCompr)
      zAlturaCompra := if(pAltCompr=0,1,pAltCompr)  

      zqPecas1UndCompra := Int((zLarguraCompra*zAlturaCompra)/(zLarguraPeca*zAlturaPeca))
      zSobra1Barra := ((zLarguraCompra*zAlturaCompra)-(zLarguraPeca*zAlturaPeca)*zqPecas1UndCompra)
      
      z0QtdCompra := int( znPecas/zqPecas1UndCompra ) 
      z1QtdCompra := if(znPecas%zqPecas1UndCompra>0,1,0)
      
      zSobraCompra := if(z1QtdCompra>0, (zLarguraCompra*zAlturaCompra) - z1QtdCompra*(znPecas-z0QtdCompra*zqPecas1UndCompra)*(zLarguraPeca*zAlturaPeca), 0)
      
      if (zFgSoFaltas<>"S" .or. zQtdOs*mQuant-peAtual > 0) .and. pPecas>0
         oLst:EvalCabDetRod()
         aAdd(zaPc, {zLarguraCompra, zAlturaCompra, zLarguraPeca, zAlturaPeca, z0QtdCompra, zqPecas1UndCompra, zSobra1Barra} )
      endif
      DbSkip()
   EndDo

   if zPrtPorProdutos="S" .and. zPrtPorInsumos="S"
      oLst:PrtD('_ENDPAGE_')
      oLst:ResetCols()
      oLst:ZeraSomaCols(.t. /*Zerar totalizadores globais*/) 
   endif

   se zPrtPorProdutos="S" entao oLst:cAlias_DataCols := 'produtos'
   if zPrtPorProdutos="S" .and. oLst:lOutputFr3
      oLst:cAliasMaster := oLst:cAlias_DataCols
      oLst:SetDbLst('mem:produtos')
      oLst:cTemplateFr3 := 'skel_' + 'ListaComGrp' +'.fr3'
   endif
   if zPrtPorProdutos="S"
      oLst:AddCol('Produto;Pcod;N;999999;6;;;Direita;NaoSome;NaoImprima;Pcod;')
      oLst:AddCol('Descricao;_kits->pDesc;P;@S35;35;;;Direita;NaoSome;NaoImprima;pdesc;')
      oLst:AddCol('Descricao;AllTrim(_kits->pDesc)+" (Cod "+lTrim(Str(Pcod,13))+") (Qtd "+lTrim(Str(zQtdOs,13))+")";P;@S70;70;;;Esquerda;NaoSome;Imprima;pdescpcod;')
      
      oLst:cAlias_DataCols := 'prodpecas'
      se oLst:lOutputFr3 entao oLst:SetDbLst('mem:prodpecas')
      oLst:AddCol('Unids\nInteiras;if(pPecas>0,z0QtdCompra+z1QtdCompra,"");P;999999;8;;;Direita;NaoSome;')
      oLst:AddCol('Pecas;if(pPecas>0,znPecas,"");P;999999;6;;;Direita;NaoSome;')
      oLst:AddCol('Tamanho\n1 Peca;if(pLargura>0,Str(pLargura*100,5,1),"")+if(pAltura>0," x "+Str(pAltura*100,5,1),"")+"cm  ";P;@S17;17;;;Direita;NaoSome;')
      oLst:AddCol('Insumo;AllTrim(Lower(pDesc));P;@S41;41;;')
   
      //oLst:AddCol('Insumo;PcodInsumo;N;999999;6;;;Direita;NaoSome;NaoImprima;PcodInsumo;')
      //oLst:AddCol('Descricao;pdesc;C;@S35;35;;;Direita;NaoSome;NaoImprima;pdesc;')
      //oLst:AddCol('Descricao;+"(CodIns "+lTrim(Str(PcodInsumo,13))+") "+AllTrim(pdesc);P;@S50;50;;;Esquerda;NaoSome;Imprima;pdesc_pcod;')
      
      oLst:AddCol('ObsCorte;pObsForma;C;@S20;20;;')
   
      oLst:Cab1( "Plano de Corte p/ Montar "+ltrim(str(zQtdOs,10))+" Pecas do Produto")

      // oLst:AddCab( "OS para Montagem do Pedido "+ltrim(str(m_fnumped,10)))
      oLst:AddCab( '_LINHA_FINA_' )
      oLst:AddCab( '_CABCOLS_' )
      oLst:AddCab( '_LINHA_GROSSA_' )
   
      oLst:AddRodape( '_LINHA_FINA_', "", {|| "Pagina "+Str(++pag,4)+" "} )
   
      oLst:AddGroup( { "KEY"=>{||Pcod} } )
      oLst:AddGroup( { "HEADER"=>{ '_PULE_1LINHA_', '_DB:produtos', {"style"=>"font:Helvetica-BoldOblique"}, '_DATACOLS_', '_DB:prodpecas'} } )
      oLst:AddGroup( { "FOOTER"=>{ '_PULE_1LINHA_' } } )
   
      ordCondSet(,,,,,, RECNO(),,,,,,,,,,,,, )
      ordCreate( "mem:_itkits", "_itkits", "pCod", {|| pCod} )
      DbGoTop()
   endif   
   Do While .not. eof() .and. zPrtPorProdutos="S"
      (zPrCustoEmFalta:=znPecas:=z0QtdCompra:=z1QtdCompra:=zLarguraPeca:=zAlturaPeca:=zLarguraCompra:=zAlturaCompra:=zSobra1Barra:=zqPecas1UndCompra:=zSobraCompra:=0)
     
      se zQtdOs*mQuant-peAtual > 0 entao zPrCustoEmFalta := zPrCustoEmFalta + pVluVen3*(zQtdOs*mQuant-peAtual)
      
      zLarguraPeca := if(pLargura=0,1,pLargura)
      zAlturaPeca := if(pAltura=0,1,pAltura)  
      znPecas := zQtdOs*pPecas

      zLarguraCompra := if(pLargCompr=0,1,pLargCompr)
      zAlturaCompra := if(pAltCompr=0,1,pAltCompr)  

      zqPecas1UndCompra := Int((zLarguraCompra*zAlturaCompra)/(zLarguraPeca*zAlturaPeca))
      zSobra1Barra := ((zLarguraCompra*zAlturaCompra)-(zLarguraPeca*zAlturaPeca)*zqPecas1UndCompra)
      
      z0QtdCompra := int( znPecas/zqPecas1UndCompra ) 
      z1QtdCompra := if(znPecas%zqPecas1UndCompra>0,1,0)
      
      zSobraCompra := if(z1QtdCompra>0, (zLarguraCompra*zAlturaCompra) - z1QtdCompra*(znPecas-z0QtdCompra*zqPecas1UndCompra)*(zLarguraPeca*zAlturaPeca), 0)
      
      if (zFgSoFaltas<>"S" .or. zQtdOs*mQuant-peAtual > 0) .and. pPecas>0
         oLst:EvalCabDetRod()
         aAdd(zaPc, {zLarguraCompra, zAlturaCompra, zLarguraPeca, zAlturaPeca, z0QtdCompra, zqPecas1UndCompra, zSobra1Barra} )
      endif
      DbSkip()
   EndDo


#FIM_TEXTO_FONTE

comando depois #TEXTO_FONTE
   oLst:lPrtRodape := .f.
   // oLst:EvalLineBlocks('DETALHE', '_PULE_1LINHA_', '_LINHA_GROSSA_', '_SOMACOLS_')
   //if zPrCustoEmFalta > 0 
   //   oLst:EvalLineBlocks('DETALHE', '_PULE_1LINHA_', '_LINHA_GROSSA_', {"ROWCOL" => "oLst:oPdf:pRow,0"}, "", "Custo Total das Faltas: "+lTrim(Transform(zPrCustoEmFalta,"@E 99999,999.99")))
   //endif
   oLst:Run()
   oLst:End()
#FIM_TEXTO_FONTE
