Estou usando nesse relatório um set filter. Gostaria de usar um ordscope ou um índice temporário para ficar mais rápido... como tem muitos registros nessa base demora uma eternidade para gerar o relatório..
Primeiro filtrar a nota fiscal... depois chama essa rotina para filtrar os itens da nota fiscal.
Isso seria fácil, bastaria um ordscope no número da nota.
Só que nesse relatório específico é necessário um filtro composto por CSOSN+CFOP+ALIQUOTA, para totalizar os valores de cada tributação, quem fez o SPED conhece esse registro. Daí uso o set filter para filtrar os itens da venda. Daí já viram a lentidão...
Alguma idéia/dica para agilizar esse relatório?
Código: Selecionar todos
********************************************************************************
///////////////////////////////////////
// GRAVA REGISTRO C190SNFC - SOMA ITENS DA NFC DE SAIDA //
///////////////////////////////////////
FUNCTION RC190SNFC()
MOSTRA('Somandos itens da NFCe - Cupom Fiscal Eletronico -> ' + cNUMERO)
DBSelectArea('INFC')
INFC->(DBSetFilter())
INFC->(DBSetOrder(5)) // CSOSN+CFOP+ALIQUOTA
INFC->(DBGoTop())
SET FILTER TO INFC->NUMERO==cNUMERO
DBGoTop()
WHILE !EOF()
cCFOP := INFC->CFOP
cCST_ICMS := INFC->CSOSN
cALIQ := STRZERO( INFC->AI,2 )
cLINHA := cCST_ICMS + cCFOP + cALIQ
nVL_OPR := 0.00
nVL_IPI := 0.00
@ PROW()+1,00 SAY "|C190" +"|" // 01 Tipo do Registro
@ PROW() ,PCOL() SAY IF( LEN( ALLTRIM( cCST_ICMS ) )<3, '0'+ALLTRIM(cCST_ICMS), cCST_ICMS ) +"|" // 02 Situacao Tributaria
@ PROW() ,PCOL() SAY cCFOP +"|" // 03 Codigo da Natureza na Tabela 0400
@ PROW() ,PCOL() SAY cALIQ +"|" // 04 Aliquota do Icms
WHILE INFC->CSOSN+INFC->CFOP+STRZERO(INFC->AI,2) == (cLINHA)
nVL_OPR += INFC->VT
/*
nVL_BC_ICMS += ICOM->VL_BC_ICMS
nVL_ICMS += ICOM->VL_ICMS
nVLBCICMSST += ICOM->VLBCICMSST
nVL_ICMS_ST += ICOM->VL_ICMS_ST
*/
nVL_IPI += INFC->VLIPI
DBSKIP()
ENDDO
@ PROW() ,PCOL() SAY PONVIRG2(nVL_OPR) +"|" // 05 Valor Operação
@ PROW() ,PCOL() SAY '0,00|' // SAY PONVIRG2(nVL_BC_ICMS)+"|" // 06 B.C ICMS
@ PROW() ,PCOL() SAY '0,00|' // SAY PONVIRG2(nVL_ICMS) +"|" // 07 Valor ICMS
* nVLICMSR110 += nVL_ICMS
@ PROW() ,PCOL() SAY '0,00|' // SAY PONVIRG2( nVLBCICMSST) +"|" // 08 VALOR DA BASE CALC ICMS ST
@ PROW() ,PCOL() SAY '0,00|' // SAY PONVIRG2( nVL_ICMS_ST) +"|" // 09 Valor ST
* nVLICMSR210 += nVL_ICMS_ST
@ PROW() ,PCOL() SAY '0,00|' // 10 Valor VL_RED_BC
@ PROW() ,PCOL() SAY PONVIRG2( nVL_IPI) +"|" // 11 Valor IPI
@ PROW() ,PCOL() SAY "|"
C190++
C990++
R999++
ENDDO
INFC->(DBSetFilter())
RETURN NIL
Rubens
