ALIAS _ItKits

variavel pag=1 
variavel zFgSoFaltas="N"
variavel zFgPrecos="N"
variavel zFgSoCorte="N"
variavel zaPc={}
variavel ztQuant := 0
variavel zPunidade:=''
variavel ztSaldo:=0
variavel zpVluVen3:=0
variavel zCstFaltas:=0
variavel zTotCstFaltas:=0
variavel zbTotCstFalt:={||zCstFaltas:=if(zFgPrecos='S'.and.ztQuant>ztSaldo,(ztQuant-ztSaldo)*zpVluVen3,0), zTotCstFaltas+=zCstFaltas, if(zCstFaltas>0, "Custo R$ "+lTrim(Str(zCstFaltas,10,2)),"") }
// variavel sPrtLineLen = 80

T10,10,15,60,Plano de Corte da OS
T2,2,Imprime Apenas as Faltas:,1,zFgSoFaltas,!
T3,2,Imprime Precos de Custo ?,1,zFgPrecos,!
//T8,2,Apenas Plano de Corte...?,1,zFgSoCorte,!

comando antes #TEXTO_FONTE
   Private zPrCustoEmFalta,znPecas,z0QtdCompra,z1QtdCompra,zLarguraPeca,zAlturaPeca,zLarguraCompra,zAlturaCompra,zSobra1Barra,zqPecas1UndCompra,zSobraCompra
   // oLst:lPortrait := .t.
   // oLst:nLinesPorPagina := 80

   oLst:AddCol('Insumo;PcodInsumo;N;999999;6;;')
   oLst:AddCol('Descricao;pdesc;C;@S35;35;;')
   oLst:AddCol('Qtd_Os;Str(mQtdOs,9,2)+pUnidade;P;@S12;12;;;Direita;Some;')
   oLst:AddCol('Ref;lTrim(Str(_kits->mQtdOs,10))+" x "+lTrim(Str(mQuant,10,if(left(pUnidade,2)$"/PC/UN/",0,3)))+pUnidade;P;@S12;12;;;Direita;NaoSome;')

   oLst:AddCol('Finalidade;"p/ "+Lower(_kits->pDesc)+" (Cod:"+lTrim(Str(pCod,6));P;@S35;35;;')
   
   oLst:Cab2( "Materiais Necessarios para Montagem da OS "+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"=>{||PcodInsumo} } )
   oLst:AddGroup( { "SOMAS"=> {||ztQuant+=mQtdOs, zPunidade:=pUnidade, ztSaldo:=pEatual, zpVluVen3:=pVluVen3} } )
   oLst:AddGroup( { "FOOTER"=>{ {"style"=>"font:Courier-BoldOblique"}, {||zAux:="..... Necessidade "+lTrim(Str(ztQuant,10,2))+zPunidade+"  Disponivel:"+lTrim(Str(ztSaldo,10,2))+zPunidade+if(ztQuant>ztSaldo,"  a Providenciar: "+lTrim(Str(ztQuant-ztSaldo,10,2))+zPunidade + eVal(zbTotCstFalt),"") } } } )
   oLst:AddGroup( { "FOOTER"=>{ {||zaPc:={},ztQuant:=0,zPunidade:='',ztSaldo:=0, '_PULE_1LINHA_'} } } )

   // oLst:AddGroup( { "FOOTER"=>{ {|| zAux:=Pad(" ",len(zAux)) + Transform(zSaldoAcum,"@E 999,999,999.99") +" T  "+z0strsaldo, ztSupDia:=0,ztRetDia:=0,z0SldDia:=zSaldoAcum, zAux}, '_PULE_1LINHA_' } } )


   DbGoTop()
   Do While .not. eof()
      (zPrCustoEmFalta:=znPecas:=z0QtdCompra:=z1QtdCompra:=zLarguraPeca:=zAlturaPeca:=zLarguraCompra:=zAlturaCompra:=zSobra1Barra:=zqPecas1UndCompra:=zSobraCompra:=0)
      se _kits->mQtdOs*mQuant-peAtual > 0 entao zPrCustoEmFalta := zPrCustoEmFalta + pVluVen3*(_kits->mQtdOs*mQuant-peAtual)
      
      zLarguraPeca := if(pLargura=0,1,pLargura)
      zAlturaPeca  := if(pAltura=0,1,pAltura)  
      znPecas      := _kits->mQtdOs*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. _kits->mQtdOs*mQuant-peAtual > 0) .and. (zFgSoCorte<>"S" .or. pPecas>0)
         aAdd(zaPc, {zLarguraCompra, zAlturaCompra, zLarguraPeca, zAlturaPeca, z0QtdCompra, zqPecas1UndCompra, zSobra1Barra} )
         oLst:EvalCabDetRod()
      endif
      DbSkip()
   EndDo

#FIM_TEXTO_FONTE

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