Gracias a todos por los comentarios.
He probado varias de sus opciones , unas no funcionan y otras no las se adaptar
El codigo de clipper actual es el siguiente: (perdon por el desorden)
READ
IF LASTKEY()=27
SET COLO TO W
@ 3,1 clea to maxrow()-4,78
IMPRIME()
RETU NIL
ENDI
filtro:=""
if xfecha1<>ctod(" - - ")
anio=0
endif
IF Xfactura1>0 .AND. Xfactura2>=Xfactura1
filtro=filtro+" .and. FACTURA>=Xfactura1 .and. factura<=xfactura2"
ENDIF
IF Xfecha1>CTOD(" - - ") .AND. Xfecha2>Xfecha1
filtro=FILTRO+" .AND. fecha>=xFECHA1 .AND. fecha<=xFECHA2"
ENDI
IF Xfecha_P1>CTOD(" - - ") .AND. Xfecha_p2>Xfecha_p1
filtro=FILTRO+" .AND. fechaPAGO>=xFECHA_p1 .AND. fechaPAGO<=xFECHA_p2"
ENDI
IF Xfecha_P1>CTOD(" - - ") .AND. Xfecha_p2=CTOD(" - - ")
filtro=FILTRO+" .AND. fechaPAGO>=xFECHA_p1"
ENDI
IF xsimbol<>" "
filtro=filtro+" .and. suma&xsimbol nbase"
ENDIF
do case
case xrecibo="R"
FILTRO=FILTRO+[ .AND. RECIBO="R"]
case xrecibo="F"
FILTRO=FILTRO+[ .AND. RECIBO=" "]
case xrecibo="A"
FILTRO=FILTRO+[ .AND. RECIBO="A"]
case xrecibo=" "
FILTRO=FILTRO+[ .AND. RECIBO<>"A"]
ENdcase
IF Xfecha1>CTOD(" - - ") .AND. Xfecha2=CTOD(" - - ")
FILTRO=FILTRO+" .AND. XFECHA1=FECHA"
ENDIF
IF ncliente>0
filtro=filtro+" .AND. CODCLIENTE=ncliente"
ENDIF
IF xmes>0
filtro=filtro+" .and. month(fecha)=xmes"
endif
IF ntrimestre>0
FILTRO=FILTRO+" .AND. QUARTER(FECHA)=NTRIMESTRE"
ENDIF
IF anio>0
FILTRO=FILTRO+" .AND. anio=year(fecha)"
ENDIF
IF Xcobrada="S"
filtro=filtro+[ .AND. fechapago!=ctod(" - - ")]
endif
if xcobrada="N"
filtro=filtro+[ .AND. fechapago=ctod(" - - ")]
endif
if nformcobro>0
filtro=filtro+" .AND. numforpago=nformcobro"
ENDIF
IF Xcolabora<>" "
filtro=filtro+" .AND. colaborado=xcolabora"
ENDIF
if Xnotas<>SPAC(15)
filtro=filtro+" .and. upper(xnotas)$upper(notas)"
endif
IF xc<>spac(20)
xc=alltrim(xc)
filtro=filtro+" .and. (xc$upper(concepto1) .or. xc$upper(concepto2) .or. xc$upper(concepto3) .or. xc$upper(concepto4) .or. xc$upper(concepto5) .or. xc$upper(concepto6) .or. xc$upper(concepto7) .or. xc$upper(concepto8) .or. xc$upper(concepto9) .or. xc$upper(concepto10) .or. xc$upper(concepto11) .or. xc$upper(concepto12) .or. xc$upper(concepto13))"
endif
IF Xiva<>spac(2)
xiva:=alltrim(upper(xiva))
xfiltro=spac(20)
do case
case xiva="7"
xfiltro="iva=7"
case xiva="16"
xfiltro="iva=16"
case xiva="8"
xfiltro="iva=8"
case xiva="18"
xfiltro="iva=18"
case xiva="M"
xfiltro=[tipofact="M"]
endcase
filtro=filtro+" .and. "+xfiltro
endif
IF UPPER(left(alltrim(filtro),5))=".AND."
FILTRO=RIGHT(FILTRO,LEN(FILTRO)-6)
ENDIF
SELE 1
IF LASTKEY()=27
set colo to w
@ 3,1 clea to 21,78
FILTRO:=SPAC(500)
PARTE:=SPAC(90)
IMPRIME()
RETU NIL
ENDI
SET CURS ON
SET COLOR TO
COIN:=0
DBGOTOP()
IF empty(filtro)
SET FILTER TO
SETCOLOR("w+/n")
@ 7,72 SAY RECC() PICT "@E #,###"
COIN:=RECC()
IF coin>0
DBGOTOP()
SUM sumaexenta,suma,sumaiva,total TO vtotalexen,vsuma,viva,vtotal
ENDIF
ELSE
FILTRO:=allTRIM(FILTRO)
SET FILTER TO &filtro
GO TOP
COUNT FOR &filtro TO COIN
DBGOTOP()
SUM sumaexenta,suma,sumaiva,total TO vtotalexen,vsuma,viva,vtotal FOR &FILTRO
ENDIF
IF COIN=0
SET COLO TO W/N
mensatext("No coincide ninguna factura.",2)
set filter to
LOOP
ENDIF