OrdScope perde o filtro
Enviado: 11 Nov 2014 14:52
Olá...
Estou tendo um problema com cdx e ordscope. Tenho um relatorio no sistema que filtra as vendas por grupo e por periodo como na figura abaixo: Observem que o grupo 001 - Equipamentos de Informatica o valor está correto... filtrou belezinha... a Partir do grupo 002 ele já perde a filtragem de data e passa filtrar somete o grupo e todas a datas. Tenho outros filtros parecidos e tá dando erro somente nesse.
Este é um resumo do codigo da filtragem. Quando executo o browse(), consigo ver que foi filtrado correto o grupo 001 dentro do período 01/10/2014 e 31/10/2014. A partir do grupo 002 - já não mostra afiltragem de data só o grupo. Tô fazendo de forma errada ou é um bug mesmo ?
Acho que estou apanhando do ordscope...
Se faço o filtro criando indice temporário funciona perfeitamente...
Segue tb o código completo do relatório e o arquivo dos itens de vendas. Se alguém puder dar uma olhada... agradeço..
Arquivo dos itens de venda
Estou tendo um problema com cdx e ordscope. Tenho um relatorio no sistema que filtra as vendas por grupo e por periodo como na figura abaixo: Observem que o grupo 001 - Equipamentos de Informatica o valor está correto... filtrou belezinha... a Partir do grupo 002 ele já perde a filtragem de data e passa filtrar somete o grupo e todas a datas. Tenho outros filtros parecidos e tá dando erro somente nesse.
Este é um resumo do codigo da filtragem. Quando executo o browse(), consigo ver que foi filtrado correto o grupo 001 dentro do período 01/10/2014 e 31/10/2014. A partir do grupo 002 - já não mostra afiltragem de data só o grupo. Tô fazendo de forma errada ou é um bug mesmo ?
Código: Selecionar todos
SET DATE BRIT
SET EPOC TO 1930
SET CENT ON
FERASE('IVENDAS.CDX')
USE IVENDAS ALIAS IVEN EXCL
INDEX ON CODGRU_+DTOS(DATA_) TAG IVENDAS7 TO IVENDAS.CDX
SET INDEX TO IVENDAS
cCODGRU1 := '001'
cCODGRU2 := '090'
D1 := CTOD('01/10/2014')
D2 := CTOD('31/10/2014')
DBGOTOP()
ORDSCOPE(0,cCODGRU1+DTOS(D1))
ORDSCOPE(1,cCODGRU2+DTOS(D2))
DBGOTOP()
BROWSE()Se faço o filtro criando indice temporário funciona perfeitamente...
Código: Selecionar todos
FERASE('IVENTMP.CDX')
DBSelectArea('IVEN')
DBSetIndex()
INDEX ON CODGRU_ TAG CODGRU TO IVENTMP.CDX FOR IVEN->DATA_>dDTINI .AND. IVEN->DATA_<= dDTFIM
SET INDEX TO IVENTMP.CDX
DBGOTOP()
Código: Selecionar todos
********************************************************************************
FUNCTION RELVEN7() // VENDA POR GRUPO
LOCAL GetList := {}
LOCAL nTam := 80
LOCAL cTela := SAVESCREEN(00,00,24,79)
LOCAL cTIPO_PRN := "I"
LOCAL cCor := SETCOLOR()
LOCAL nCursor := SETCURSOR()
nPag := 0
FIRST := .T.
IF !ABREARQ(,{"PRO","GRU","IVEN"})
BEEP()
MENSAGEMR("N„o consegui abrir os arquivos, abortando !")
RETURN NIL
ENDIF
WHILE( .T. )
SETCURSOR(1)
RESTSCREEN( ,,,, CTELA )
JANELA( 6,10,18,70," PARAMETROS PARA EMISSAO DO RELATORIO VENDAS POR GRUPO ")
dDTINI := DATASIS-30
dDTFIM := DATASIS
cCODGRU1 := '001'
cCODGRU2 := ' '
cPRECO := 'N' // N-NOTA - C-CUSTO
COR("GETS")
@ 08,12 SAY "DATA INICIAL.:" GET dDTINI VALID !EMPTY(dDTINI)
@ 10,12 SAY "DATA FINAL...:" GET dDTFIM VALID dDTFIM >= dDTINI
@ 12,12 SAY 'GRUPO INICIAL:' GET cCODGRU1 PICT '999' VALID PESQGRU( @cCODGRU1,12,32,.T.,.F.) .AND. !EMPTY(cCODGRU1)
@ 14,12 SAY 'GRUPO FINAL..:' GET cCODGRU2 PICT '999' VALID PESQGRU( @cCODGRU2,14,32,.T.,.F.) .AND. !EMPTY(cCODGRU2)
@ 16,12 SAY 'PRECO (N)CUSTO DANOTA (C)PRECO COM IMPOSTOS:' GET cPRECO PICT '!' VALID cPRECO$'NC'
READ
IF PERGUNTA("CONFIRMA A EMISSAO DO RELATORIO ?")=="N" .OR. ESC()
EXIT
ENDIF
IF ESC()
EXIT
ENDIF
GRUPO := {}
NOMGRU := {}
CUSTO := {}
VENDA := {}
DIFE := {}
nTOTCUSTO := 0.00
nTOTVENDA := 0.00
nTOTDIFE := 0.00
XINI := 0
DBSelectArea('IVEN')
DBSetOrder(7)
DBGOTOP()
ORDSCOPE(0,cCODGRU1+DTOS(dDTINI))
ORDSCOPE(1,cCODGRU2+DTOS(dDTFIM))
DBGOTOP()
WHILE !EOF()
cCODGRU := IVEN->CODGRU_
cNOMGRU := NOMGRU( cCODGRU)
MOSTRA('SOMANDO VENDAS DO GRUPO -> '+GRU->CODGRU_ + '-' + GRU->NOMGRU_ )
nCUSTOGRU := 0.00
nVENDAGRU := 0.00
lACHOUVENDA := .F.
WHILE IVEN->CODGRU_ = cCODGRU
lACHOUVENDA := .T.
// ACHA PRECO DE CUSTO
cCODPRO := IVEN->CODPRO_
nCUSTOPRO := 0.00
DBSelectArea('PRO')
DBSetOrder(1)
DBGOTOP()
IF DBSEEK( cCODPRO )
IF cPRECO = 'N'
nCUSTOPRO := PRO->CUSTONT_
ELSE
nCUSTOPRO := PRO->PRCUSTO_
ENDIF
ELSE
nCUSTOPRO := IVEN->VALOR_
ENDIF
nCUSTOGRU += (nCUSTOPRO * IVEN->QTDE_)
nVENDAGRU += (IVEN->VALOR_ * IVEN->QTDE_)
DBSelectArea('IVEN')
DBSKIP()
ENDDO
IF lACHOUVENDA
AADD(GRUPO , cCODGRU )
AADD(NOMGRU , cNOMGRU )
AADD(CUSTO , nCUSTOGRU )
AADD(VENDA , nVENDAGRU )
AADD(DIFE , nVENDAGRU-nCUSTOGRU )
nTOTCUSTO += nCUSTOGRU
nTOTVENDA += nVENDAGRU
nTOTDIFE += nVENDAGRU-nCUSTOGRU
ENDIF
ENDDO
MENSAGEM("Tecle <ESC> para retornar",(1/10))
COR("MENU")
IF !MENU_PRN(@cTIPO_PRN)
EXIT
ENDIF
IF cTIPO_PRN="I"
SET PRINTER TO &cPRINT2
ELSE
COMPRNOFF()
ENDIF
SET DEVICE TO PRINT
PAG := 0
FIRST := .T.
XINI := XFIM := 0
XFIM := LEN( GRUPO )
FOR Y = 1 TO LEN( GRUPO )
XINI := Y
IMPRIME(XINI,XFIM,"IMPRIMINDO VENDAS POR GRUPOS")
IF FIRST
FIRST := .F.
CABECALHO("VENDA RESUMIDA POR GRUPO DE "+DTOC( dDTINI ) + " ATE "+DTOC(dDTFIM ) )
@ PROW()+1,00 SAY "COD-GRUPO"
@ PROW() ,30 SAY " CUSTO VENDA (%) VENDA-CUSTO (%)"
// 99.999,99 9999.999,99-99.99% 99.999,99-999.99
// 34567890123456789012345678901234567890123456789
// 33 40 50 60 70
@ PROW()+1,00 SAY REPLICATE("=",80)
ENDIF
@ PROW()+1,00 SAY GRUPO[Y]+'-'+LEFT(NOMGRU[Y],28)
@ PROW() ,33 SAY TRAN( CUSTO[Y],"@KE 999,999.99" )
@ PROW() ,44 SAY TRAN( VENDA[Y],"@KE 9999,999.99" ) + '/' + TRAN( VENDA[Y]/(nTOTVENDA/100), '99.99%' )
@ PROW() ,62 SAY TRAN( DIFE[Y], "@KE 999,999.99" ) + '/' + TRAN( DIFE[Y]/(VENDA[Y]/100), '999.99%' )
NEXT
@ PROW()+1,00 SAY REPLI("=",80)
@ PROW()+1,00 SAY 'TOTAIS ->'
@ PROW() ,32 SAY TRAN( nTOTCUSTO , "@KE 9999,999.99" )
@ PROW() ,44 SAY TRAN( nTOTVENDA , "@KE 9999,999.99" )
@ PROW() ,62 SAY TRAN( nTOTDIFE , "@KE 999,999.99" ) + '/' + TRAN( nTOTDIFE/(nTOTVENDA/100), '999.99%' )
@ PROW()+1,00 SAY REPLI("=",80)
RODAPE()
EXIT
ENDDO
COMPRNON()
SET FILTER TO
SET PRINTER TO
SET DEVICE TO SCREEN
IF cTIPO_PRN == "A"
SET PRINTER TO
RUN NOTEPAD &cARQPRN
ELSEIF cTIPO_PRN == "T"
SET PRINTER TO
IMP_TELA(nTam)
ENDIF
DBSelectArea('IVEN')
ORDSCOPE(0,)
ORDSCOPE(1,)
SETCURSOR(0)
RESTSCREEN(,,,,cTela )
ABREARQ(,.F.)
RETURN NIL