ALIAS _ItKits

variavel zQtdOs=1
variavel zPrCustoEmFalta =0
variavel zFgFaltas="S"
variavel zFgSoFaltas="N"
variavel zFgPrecos="N"
variavel zFgCorte="S"
variavel zFgCorteSimplificado="S"
variavel zFgSoCorte="N"
variavel zFgInsumosSeparados="S"
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 sPrtLineLen = 80

T10,10,19,60,Parametros 
T1,2,Quantidade a Montar........:,6,zQtdOs,999999
T2,2,Imprime Insumos em Falta...:,1,zFgFaltas,!
T3,2,Imprime Apenas as Faltas...:,1,zFgSoFaltas,!
T4,2,Imprime Precos de Custo....?,1,zFgPrecos,!
T5,2,Imprime Plano de Corte.....?,1,zFgCorte,!
T6,2,Plano Corte Simplificado...?,1,zFgCorteSimplificado,!
T7,2,Apenas Plano de Corte......?,1,zFgSoCorte,!
T8,2,Imprime Insumos em Separado?,1,zFgInsumosSeparados,!

comando antes #TEXTO_FONTE
   oLst:lPortrait := .t.
   // oLst:nLinesPorPagina := 80
   oLst:nFontSize := 12

   oLst:AddCol('Insumo;PcodInsumo;N;999999;6;;')
   oLst:AddCol('Descricao;pdesc;C;@S35;35;;')
   if zFgSoCorte<>"S" .or. zFgInsumosSeparados="S"
      oLst:AddCol('Qtd_1;mQuant;N;@e 99999.99;9;;')
      oLst:AddCol('Qtd_'+lTrim(Str(zQtdOs,10))+';zQtdOs*mQuant;P;@e 99999.99;9;;')
      if zFgFaltas='S'
         oLst:AddCol('Saldo;peAtual;N;@e 99999.99;9;;')
         oLst:AddCol('Falta;if(zQtdOs*mQuant>peAtual,zQtdOs*mQuant-peAtual,0);P;@e 99999.99;9;;')
         if zFgPrecos='S'
            oLst:AddCol('PrUnit;pVluVen3;N;@e 99999.99;9;;')
            oLst:AddCol('PrTotFalt;if(zQtdOs*mQuant>peAtual,pVluVen3*(zQtdOs*mQuant-peAtual),0);P;@e 99999.99;9;;')
         endif
      endif
   endif
   if zFgCorte="S" .and. zFgInsumosSeparados<>"S"
      if zFgCorteSimplificado<>"S"
         oLst:AddCol('Pecas\n1 Unid;if(pPecas>0,pPecas,"");P;999999.99;9;;;Direita;NaoSome;')
      endif
      if zFgCorteSimplificado<>"S"
         oLst:AddCol('Altura\n1 Peca;if(pAltura>0,pAltura,"");N;9999.99;7;;;Direita;NaoSome;')
      endif
      oLst:AddCol('Unids\nInteiras;if(pPecas>0,z0QtdCompra+z1QtdCompra,"");P;999999.99;9;;;Direita;NaoSome;')
      oLst:AddCol('Pecas\n'+Ltrim(Str(zQtdOs,6))+'Unds;if(pPecas>0,znPecas,"");P;999999.99;9;;;Direita;NaoSome;')
      oLst:AddCol('Tamanho\n1 Peca;if(pLargura>0,lTrim(Str(pLargura)),"")+if(pAltura>0," x "+lTrim(Str(pAltura)),"");P;@S14;14;;;Esquerda;NaoSome;')
      if zFgCorteSimplificado<>"S"
         oLst:AddCol('Pecas\nPor Barra;if(pPecas>0,zqPecas1UndCompra,"");P;999999.99;9;;;Direita;NaoSome;')
         oLst:AddCol('Tot_Perda\nCorte;if(pPecas>0.and.zSobra1Barra>0,Str(z0QtdCompra,6)+" x "+Str(zSobra1Barra,5,2),"");P;@S14;14;;;Direita;NaoSome;')
         oLst:AddCol('Sobra\nUlt_Barra;if(pPecas>0.and.z1QtdCompra>0,zSobraCompra,"");P;999999.99;9;;;Direita;NaoSome;')
      endif
      oLst:AddCol('ObsCorte;pObsForma;C;@S20;20;;')
   endif

   oLst:Cab2( "(Cod "+lTrim(Str(_kits->pcod,6))+") "+lTrim(_kits->pDesc) )
   oLst:Cab2( if(zFgSoFaltas="S","VALOR DAS FALTAS","OS")+" para Montagem de "+ltrim(str(zQtdOs,10))+" pecas")
   oLst:Cab4( "Saldo em Estoque: "+lTrim(Str(_kits->pEatual,10))+if(zQtdOs>_kits->pEatual, "  A Fabricar: "+lTrim(Str(zQtdOs-_kits->pEatual)) , ""))
   oLst:AddCab( '_LINHA_FINA_' )
   oLst:AddCab( '_CABCOLS_' )
   oLst:AddCab( '_LINHA_GROSSA_' )

   oLst:AddRodape( '_LINHA_FINA_', "", {|| "Pagina "+Str(pag++,4)+" "} )

   if zFgInsumosSeparados="S"
      DbGoTop()
      DbEval( {||zPrCustoEmFalta:=zPrCustoEmFalta+if(zQtdOs*mQuant-peAtual>0,pVluVen3*(zQtdOs*mQuant-peAtual),0),  oLst:EvalCabDetRod() }, {||(zFgSoFaltas<>"S".or.zQtdOs*mQuant-peAtual>0)} )
      if zPrCustoEmFalta > 0 .and. zFgFaltas='S' .and. zFgPrecos='S'
         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:ResetCols()
      oLst:ZeraSomaCols(.t. /*Zerar totalizadores globais*/) 
      
      oLst:AddCol('Insumo;PcodInsumo;N;999999;6;;')
      oLst:AddCol('Descricao;pdesc;C;@S35;35;;')
      if zFgCorteSimplificado<>"S"
         oLst:AddCol('Pecas\n1 Unid;if(pPecas>0,pPecas,"");P;999999.99;9;;;Direita;NaoSome;')
         oLst:AddCol('Altura\n1 Peca;if(pAltura>0,pAltura,"");N;9999.99;7;;;Direita;NaoSome;')
      endif
      oLst:AddCol('Unids\nInteiras;if(pPecas>0,z0QtdCompra+z1QtdCompra,"");P;999999.99;9;;;Direita;NaoSome;')
      oLst:AddCol('Pecas\n'+Ltrim(Str(zQtdOs,6))+'Unds;if(pPecas>0,znPecas,"");P;999999.99;9;;;Direita;NaoSome;')
      oLst:AddCol('Tamanho\n1 Peca;if(pLargura>0,lTrim(Str(pLargura)),"")+if(pAltura>0," x "+lTrim(Str(pAltura)),"");P;@S14;14;;;Esquerda;NaoSome;')
      if zFgCorteSimplificado<>"S"
         oLst:AddCol('Pecas\nPor Barra;if(pPecas>0,zqPecas1UndCompra,"");P;999999.99;9;;;Direita;NaoSome;')
         oLst:AddCol('Tot_Perda\nCorte;if(pPecas>0.and.zSobra1Barra>0,Str(z0QtdCompra,6)+" x "+Str(zSobra1Barra,5,2),"");P;@S14;14;;;Direita;NaoSome;')
         oLst:AddCol('Sobra\nUlt_Barra;if(pPecas>0.and.z1QtdCompra>0,zSobraCompra,"");P;999999.99;9;;;Direita;NaoSome;')
      endif
      oLst:AddCol('ObsCorte;pObsForma;C;@S20;20;;')

      oLst:PrtD('_PULE_4_LINHAS_')
      oLst:PrtD('Plano de Corte:')
      //oLst:AddCab( {"style"=>"font:Helvetica-BoldOblique#size:12#ncolor:99#width:80#bgfill:SombraEscuraComBorda", "COLS"=>"0,C"}, 'Plano de Corte'))
      oLst:PrtD( '_LINHA_GROSSA_' )
      oLst:PrtD( '_CABCOLS_' )
      oLst:PrtD( '_LINHA_GROSSA_' )
      
   endif

   DbGoTop()
   Do While .not. eof()
      if zQtdOs*mQuant-peAtual > 0 .and. zFgInsumosSeparados<>"S"
         zPrCustoEmFalta := zPrCustoEmFalta + pVluVen3*(zQtdOs*mQuant-peAtual)
      endif
      
      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.or.(zFgSoCorte<>"S".and.zFgInsumosSeparados<>"S"))
         oLst:EvalCabDetRod()
      endif
      DbSkip()
   EndDo

#FIM_TEXTO_FONTE

comando depois #TEXTO_FONTE
   oLst:lPrtRodape := .f.
   if zPrCustoEmFalta > 0 .and. zFgInsumosSeparados<>"S" .and. zFgFaltas='S' .and. zFgPrecos='S'
      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
