função para data

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

função para data

Mensagem por Netavin »

Bom dia amigos!

Tenho uma rotina de pesquisa de movimento entre datas (data inicial / data final).
Como poderia ser uma função que verificasse se houve movimento nesse período?
Olhei os tópicos sobre data, porém não encontrei exemplo de caso.
Para criticar uma data específica eu fiz. Mas entre datas ...

Meus agradecimentos antecipados.

Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

função para data

Mensagem por Pablo César »

Oi colega. Existem vários tópicos abordando esse tema. Veja em:

https://pctoledo.org/forum/viewto ... ata#p48770
https://pctoledo.org/forum/viewto ... ata#p71455
https://pctoledo.org/forum/viewto ... ata#p65403

Tiver dificuldades em implementar, passe o seu código que iremos te ajudar Lorival.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

função para data

Mensagem por Netavin »

Arriba Pablo!!

Meu digníssimo amigo. Foi de grande valia a informação.

Meus sinceros agradecimentos.

Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

função para data

Mensagem por Netavin »

Amigos. Última forma!!! rs

Pensei ter resolvido. Mas mesmo havendo movimento em um dos dias, me retorna falso.
anexo a rotina para que possam me auxiliar.

Código: Selecionar todos

/************************/
/* Entradas entre datas */
/*       DETALHADO      */
Function Ent_dt_tl()

LOCAL L,Vari,Num,Linh,texto
LOCAL VTOTAL    :=000000.00
LOCAL VSUBTOTAL :=000000.00
LOCAL TOTALR    :=000000.00
LOCAL SUBTTLR   :=000000.00
Private vdtin,vdtfin

Sele 1
Use Cadtora Alias Cadtora SHARED NEW EXCLU
IF !NETERR()
    If !File("esse.ntx")
        Index on esse to esse
    Endif
    If !File("placa.ntx")
        Index on plac to placa
    Endif
ELSE
    NETMSG()
    RETURN(.F.)
ENDIF
Set Index to esse,placa
OrdSetFocus(1)
DbGotop()

Linh  :=0
vDtin :=Ctod(" ")
vDtfin:=Ctod(" ")

DispBox(Linh+39,C+08,Linh+44,C+35,1,"w/bg,gb+/b")
@ Linh+40,C+09 Clear to Linh+43,C+34                                     
@ Linh+41,C+10 Say "Data inicial:" Get vDtin  Valid datain(vdtin)    
@ Linh+42,C+10 Say "Data final  :" Get vDtfin Valid dataou(vdtfin)    
Read                                                               

If Lastkey() = 27
    CANCBEEP()
    Alert("Opera‡ao cancelada!")
    DbCloseAll()
    Return
Endif

Pg  :=1
L   :=0
Num :=0
Vari:=esse

Set Exac on
Set Filter to Dten >= vDtin .and. Dten <= vDtfin
LOCATE FOR vDtin=Dten .AND. vDtfin=Dten

If eof()
    ERRORBEEP()
    Alert("NÆo houve entradas;neste intervalo de datas!")
    USE
    Return
endif

abre_imp()

Do While !Eof()
    If L = 0
        ? PADC("   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ",80)
        ? PADC("   MADEIREIRA",80)
        ? Padc("   Entradas por per¡odo",80)
        ? Padc("   De "+ dtoc(vDtin) + " … " + Dtoc(vDtfin),80)
        ? PADC("   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ",80)
        ? "   Pg.: "+Strzero(pg,2)
        ? "   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"
        ? "   Placa Essˆncia           Comp   Diam   Desc    Ttl M3   Vlr/M3   Vlr Pg    Entrada"
        ? "   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"
        L:=7
    Endif

    If plac = 0 .or. Dten < vDtin .or. Dten > vDtfin
        Skip
    Endif

    IF ALLTRIM(VARI) # ALLTRIM(ESSE)
        If vsubtotal > 0
            ? Space(36)+"Subtotal: "+TRANSFORM(VSUBTOTAL,"@e 9,999.999")+" M3   R$ "+Transform(Subttlr, "@e 999,999.99")
            VTOTAL+=VSUBTOTAL
            VSUBTOTAL:=000000.00
            VARI:=ESSE
            TOTALR+=SUBTTLR
            SUBTTLR:=000000.00
        Else
            VTOTAL+=VSUBTOTAL
            VSUBTOTAL:=000000.00
            VARI:=ESSE
            TOTALR+=SUBTTLR
            SUBTTLR:=000000.00
        Endif
    Endif

    If ALLTRIM(VARI)=ALLTRIM(ESSE)
       ? Space(3),plac,esse,Transform(comp,"@e 99.99"),Space(1),Transform(diam,"@e 9.99"),;
       Space(1),Transform(tdes,"@e 9.999"),Transform(ttm3,"@e 999.999"),;
       +SPACE(02),Transform(vlm3,"@e 999.99")+SPACE(02),Transform(vlpg,"@e 999.99"),Space(1),Dten
       VSUBTOTAL+=TTM3
       subttlr+=vlpg
    Endif

    DbSkip()
    Num++
    L++

    If L >= 60
        L = 0
        Pg++
        Eject
    Endif

    If eof()
        ? Space(36)+"Subtotal: "+TRANSFORM(VSUBTOTAL,"@e 9,999.999")+" M3   R$ "+Transform(Subttlr, "@e 999,999.99")
        VTOTAL+=VSUBTOTAL
        Totalr+=Subttlr
        VARI:=ESSE
    Endif

Enddo

? "   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"
? "   Totais:"+Transform(Num,"@e 99,999")+" tora(s)"+Space(20)+transform(vtotal,"@E 999,999.999") + " M3"+Space(1)+"R$"+Transform(Totalr, "@e 99,999,999.99")
? "   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"

? "[COMPRIME]"
? SPACE(05)+lori2
? "[NORMAL]"

fech_imp()

SETCURSOR(0)
RUN USBPRINT C:\TEMP\RELA.TXT /SEL /DEL

DbCloseAll()
Return NIL
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

função para data

Mensagem por Itamar M. Lins Jr. »

Ola!
Use dtos() e um arquivo temporário.
por exemplo:

Código: Selecionar todos

cTemp  := "receber001"+dtos(hb_datetime())
cQuery := " dtos(vencimento) >= '"+dtos(inicio)+"' .and. dtos(vencimento) <= '"+dtos(fim)+"' .and. empty(pagamento) "
OrdBy  := "cliente + dtos(vencimento) + cod_venda"

Index on &OrdBy Tag re99 to &cTemp  for &cQuery temporary
continuando...

Código: Selecionar todos

cQuery := " dtos(suadtainicio) >= '"+dtos(inicio)+"' .and. dtos(suadtafim) <= '"+dtos(fim)+"'  "
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

função para data

Mensagem por Pablo César »

Oi Lorival, tinha diversos erros. Eu alterei o seu código, tirei o SET FILTER (que na minha opinião é um procedimento desnecessário e lento), alterei a condição e mudei de posição a verificação. Como é um relatório e espero que o dbf não seja tão grande, pois se for eu aconselharia a criar mais um indice, nem que seja temporário como o colega Itamar mencionou, pois o LOCATE e varrer todo o arquivo

Código: Selecionar todos

/************************/
/* Entradas entre datas */
/*       DETALHADO      */
Function Ent_dt_tl()

LOCAL L,Vari,Num,Linh,texto
LOCAL VTOTAL    :=000000.00
LOCAL VSUBTOTAL :=000000.00
LOCAL TOTALR    :=000000.00
LOCAL SUBTTLR   :=000000.00
Private vdtin,vdtfin

Sele 1
Use Cadtora Alias Cadtora SHARED NEW EXCLU
IF !NETERR()
    If !File("esse.ntx")
        Index on esse to esse
    Endif
    If !File("placa.ntx")
        Index on plac to placa
    Endif
ELSE
    NETMSG()
    RETURN(.F.)
ENDIF
Set Index to esse,placa
OrdSetFocus(1)
DbGotop()

Linh  :=0
vDtin :=Ctod(" ")
vDtfin:=Ctod(" ")

DispBox(Linh+39,C+08,Linh+44,C+35,1,"w/bg,gb+/b")
@ Linh+40,C+09 Clear to Linh+43,C+34                                     
@ Linh+41,C+10 Say "Data inicial:" Get vDtin  Valid datain(vdtin)    
@ Linh+42,C+10 Say "Data final  :" Get vDtfin Valid dataou(vdtfin)    
Read                                                               

If Lastkey() = 27
    CANCBEEP()
    Alert("Opera‡ao cancelada!")
    DbCloseAll()
    Return
Endif

Pg  :=1
L   :=0
Num :=0
Vari:=esse

// Set Exac on
// Set Filter to Dten >= vDtin .and. Dten <= vDtfin
LOCATE FOR vDtin>=Dten .AND. Dten<=vDtfin
If !found() // nao eocntrado
    ERRORBEEP()
    Alert("NÆo houve entradas;neste intervalo de datas!")
    USE
    Return
endif

abre_imp()

Do While !Eof()
    /* mudei de posicao (apesar que acho que nao ha necessidade de testar estas condições, a não ser pelo
       plac poder ser zero alguma vez ? 
   */
   If plac = 0 .or. !(Dten >= vDtin .and. Dten <= vDtfin) 
        Skip
	loop // importante o laço de repeticao
    Endif
	
    If L = 0
        ? PADC("   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ",80)
        ? PADC("   MADEIREIRA",80)
        ? Padc("   Entradas por per¡odo",80)
        ? Padc("   De "+ dtoc(vDtin) + " … " + Dtoc(vDtfin),80)
        ? PADC("   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ",80)
        ? "   Pg.: "+Strzero(pg,2)
        ? "   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"
        ? "   Placa Essˆncia           Comp   Diam   Desc    Ttl M3   Vlr/M3   Vlr Pg    Entrada"
        ? "   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"
        L:=7
    Endif

    IF ALLTRIM(VARI) # ALLTRIM(ESSE)
        If vsubtotal > 0
            ? Space(36)+"Subtotal: "+TRANSFORM(VSUBTOTAL,"@e 9,999.999")+" M3   R$ "+Transform(Subttlr, "@e 999,999.99")
            VTOTAL+=VSUBTOTAL
            VSUBTOTAL:=000000.00
            VARI:=ESSE
            TOTALR+=SUBTTLR
            SUBTTLR:=000000.00
        Else
            VTOTAL+=VSUBTOTAL
            VSUBTOTAL:=000000.00
            VARI:=ESSE
            TOTALR+=SUBTTLR
            SUBTTLR:=000000.00
        Endif
    Endif

    If ALLTRIM(VARI)=ALLTRIM(ESSE)
       ? Space(3),plac,esse,Transform(comp,"@e 99.99"),Space(1),Transform(diam,"@e 9.99"),;
       Space(1),Transform(tdes,"@e 9.999"),Transform(ttm3,"@e 999.999"),;
       +SPACE(02),Transform(vlm3,"@e 999.99")+SPACE(02),Transform(vlpg,"@e 999.99"),Space(1),Dten
       VSUBTOTAL+=TTM3
       subttlr+=vlpg
    Endif

    DbSkip()
    Num++
    L++

    If L >= 60
        L = 0
        Pg++
        Eject
    Endif

    If eof()
        ? Space(36)+"Subtotal: "+TRANSFORM(VSUBTOTAL,"@e 9,999.999")+" M3   R$ "+Transform(Subttlr, "@e 999,999.99")
        VTOTAL+=VSUBTOTAL
        Totalr+=Subttlr
        VARI:=ESSE
    Endif

Enddo

? "   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"
? "   Totais:"+Transform(Num,"@e 99,999")+" tora(s)"+Space(20)+transform(vtotal,"@E 999,999.999") + " M3"+Space(1)+"R$"+Transform(Totalr, "@e 99,999,999.99")
? "   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"

? "[COMPRIME]"
? SPACE(05)+lori2
? "[NORMAL]"

fech_imp()

SETCURSOR(0)
RUN USBPRINT C:\TEMP\RELA.TXT /SEL /DEL

DbCloseAll()
Return NIL
Observe a mudança para "!" nas linhas 55 e 68.
Entre as linhas 65 a 71, responda-me se o plac pode ser zero, senão podemos mudar isso.
Também confirme se ficou lento, mudamos para o modo indexado.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

função para data

Mensagem por Netavin »

Bom dia a todos os amigos do Fórum!
Caro amigo Pablo.

A variável plac nunca será zero. Esta linha está assim porque quando comecei este projeto, por erros de programação, ocorria que alguns registros se apresentavam em branco no DBF. Já foi corrigido.
Quanto ao modo como você sugeriu, ainda continua com problema, ou seja:
Digamos que houve entrada no dia 10/11/11 no intervalo de 01/11 a 20/11. O programa está informando que não houve entradas nesse período.

Estou queimando os fósforos para tentar acertar tambem ..
Grato pela atenção!

[]
Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

função para data

Mensagem por Pablo César »

Puxa detesto fazer isto... eu geralmente gosto da idéia que o colega mesmo encontre e eu não entregar tudo pronto. Pois acho mais importante que você realmente entenda. Eu achei o erro, estava na linha 52 do fonte abaixo:

Código: Selecionar todos

/************************/
/* Entradas entre datas */
/*       DETALHADO      */
Function Ent_dt_tl()

LOCAL L,Vari,Num,Linh,texto
LOCAL VTOTAL    :=000000.00
LOCAL VSUBTOTAL :=000000.00
LOCAL TOTALR    :=000000.00
LOCAL SUBTTLR   :=000000.00
Private vdtin,vdtfin

Sele 1
Use Cadtora Alias Cadtora SHARED NEW EXCLU
IF !NETERR()
    If !File("esse.ntx")
        Index on esse to esse
    Endif
    If !File("placa.ntx")
        Index on plac to placa
    Endif
ELSE
    NETMSG()
    RETURN(.F.)
ENDIF
Set Index to esse,placa
OrdSetFocus(1)
DbGotop()

Linh  :=0
vDtin :=Ctod(" ")
vDtfin:=Ctod(" ")

DispBox(Linh+39,C+08,Linh+44,C+35,1,"w/bg,gb+/b")
@ Linh+40,C+09 Clear to Linh+43,C+34                                     
@ Linh+41,C+10 Say "Data inicial:" Get vDtin  Valid datain(vdtin)    
@ Linh+42,C+10 Say "Data final  :" Get vDtfin Valid dataou(vdtfin)    
Read                                                               

If Lastkey() = 27
    CANCBEEP()
    Alert("Opera‡ao cancelada!")
    DbCloseAll()
    Return
Endif

Pg  :=1
L   :=0
Num :=0
Vari:=esse

LOCATE FOR Dten>=vDtin .AND. Dten<=vDtfin // estava errado (verifique)
If !found() 
    ERRORBEEP()
    Alert("NÆo houve entradas;neste intervalo de datas!")
    USE
    Return
endif

abre_imp()

Do While !Eof()
    If L = 0
        ? PADC("   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ",80)
        ? PADC("   MADEIREIRA",80)
        ? Padc("   Entradas por per¡odo",80)
        ? Padc("   De "+ dtoc(vDtin) + " … " + Dtoc(vDtfin),80)
        ? PADC("   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ",80)
        ? "   Pg.: "+Strzero(pg,2)
        ? "   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"
        ? "   Placa Essˆncia           Comp   Diam   Desc    Ttl M3   Vlr/M3   Vlr Pg    Entrada"
        ? "   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"
        L:=7
    Endif

    IF ALLTRIM(VARI) # ALLTRIM(ESSE)
        If vsubtotal > 0
            ? Space(36)+"Subtotal: "+TRANSFORM(VSUBTOTAL,"@e 9,999.999")+" M3   R$ "+Transform(Subttlr, "@e 999,999.99")
            VTOTAL+=VSUBTOTAL
            VSUBTOTAL:=000000.00
            VARI:=ESSE
            TOTALR+=SUBTTLR
            SUBTTLR:=000000.00
        Else
            VTOTAL+=VSUBTOTAL
            VSUBTOTAL:=000000.00
            VARI:=ESSE
            TOTALR+=SUBTTLR
            SUBTTLR:=000000.00
        Endif
    Endif

    If ALLTRIM(VARI)=ALLTRIM(ESSE)
       ? Space(3),plac,esse,Transform(comp,"@e 99.99"),Space(1),Transform(diam,"@e 9.99"),;
       Space(1),Transform(tdes,"@e 9.999"),Transform(ttm3,"@e 999.999"),;
       +SPACE(02),Transform(vlm3,"@e 999.99")+SPACE(02),Transform(vlpg,"@e 999.99"),Space(1),Dten
       VSUBTOTAL+=TTM3
       subttlr+=vlpg
    Endif

    DbSkip()
	If !(Dten >= vDtin .and. Dten <= vDtfin) 
	   Goto Bootom
	   DbSkip()
	Endif
    Num++
    L++

    If L >= 60
        L = 0
        Pg++
        Eject
    Endif

    If eof()
        ? Space(36)+"Subtotal: "+TRANSFORM(VSUBTOTAL,"@e 9,999.999")+" M3   R$ "+Transform(Subttlr, "@e 999,999.99")
        VTOTAL+=VSUBTOTAL
        Totalr+=Subttlr
        VARI:=ESSE
    Endif

Enddo

? "   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"
? "   Totais:"+Transform(Num,"@e 99,999")+" tora(s)"+Space(20)+transform(vtotal,"@E 999,999.999") + " M3"+Space(1)+"R$"+Transform(Totalr, "@e 99,999,999.99")
? "   ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"

? "[COMPRIME]"
? SPACE(05)+lori2
? "[NORMAL]"

fech_imp()

SETCURSOR(0)
RUN USBPRINT C:\TEMP\RELA.TXT /SEL /DEL

DbCloseAll()
Return NIL
Removí essa questão do plac e mudei de posição a condição para que atenda a condição do seu laço de repetição. Veja também se não ficou lento, senão ao invés de usar locate utilize o DBSeek( ' ' + DtoS( pData ), .T. ). (Esse .T. faz um SOFT SEEK ) mas antes terá que indexar com INDEX ON Dtos( Dten )
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder