Ejemplo de codigo de reportes

Milton Manzano
23 de Octubre del 2009
Amigos necesito un ejemplo de un reporte hecho en codigo con las instrucciones @say y @col

Miguel Parada
23 de Octubre del 2009
SET DEFAULT TO C:DbAdm2009
CLOSE DATABASES ALL
OPEN DATABASE data1.dbc SHARED

SET CURRENCY TO ""

PUBLIC tyMonto, tlDolares

PUBLIC lyEntero, lyCentavos, lnNumeroBloques, lnPrimerDigito, lnSegundoDigito

PUBLIC lnTercerDigito, lcBloque, lnBloqueCero, lcLetra

LOCAL LcCCF
LOCAL LcValorIva
LOCAL LcTotalConIva
LcCCF=.T.

LOCAL LcDoc
LcDoc="0146"

procesos para convertir de a letras el total
*SET PROCEDURE TO C:SystAdm2009programasnumtoletras ADDITIVE

proceso para cambiar formato de fecha.

*SET PROCEDURE TO C:SystAdm2009programasfecha ADDITIVE (mas abajo llamo a la funcion con CadFecha) en este caso no esta incluida la funcion al igual que la de convertir el monto numerico a letras.

SELECT idtrans AS NroDocumento,;
cantidad AS qty,;
codprod AS barra,;
descripcion AS description,;
nombre AS theclient,;
direccion AS direcc,;
registro AS NroReg,;
giro AS Gir,;
idtrans AS NroFactura,;
tblejemplo.precio AS price,;
total AS mitotal;
FROM tblejemplo,tblartiulos,tblclientes;
WHERE tblejemplo.idproducto=tblartiulos.codprod;
AND tblejemplo.idcliente=tblclientes.codcliente;
AND tblejemplo.idtrans=LcDoc;
INTO CURSOR MyCursor1

SELECT MyCursor1
GO TOP IN MyCursor1

SET PRINTER ON
*SET PRINTER TO LPT1
SET DEVICE TO PRINTER
SET CONSOLE OFF

SET DEVICE TO SCREEN

LOCAL LcTipoLetra
LcTipoLetra="FONT 'Courier',8"


@12,15 SAY ALLTRIM(theclient)&LcTipoLetra
@14,15 SAY ALLTRIM(SUBSTR(direcc, 1, 51))&LcTipoLetra
@15,15 SAY ALLTRIM(SUBSTR(direcc,52))&LcTipoLetra
@14,100 SAY ALLTRIM(SUBSTR(Gir,1, 44))&LcTipoLetra
@15,100 SAY ALLTRIM(SUBSTR(Gir,45))&LcTipoLetra
@12,100 SAY ALLTRIM(NroReg)&LcTipoLetra
@18,13 SAY CadFecha(DATE(),1)&LcTipoLetra
@18,100 SAY "Fact No.: " + ALLTRIM(NroDocumento)&LcTipoLetra

*LOCAL i
*i=22

LINENUMB = 22


*DO WHILE !EOF( )
SCAN
@LINENUMB,4 SAY STR(qty)&LcTipoLetra
@LINENUMB,20 SAY ALLTRIM(description)&LcTipoLetra
@LINENUMB,98 SAY TRANSFORM(price, '@$.99@B')&LcTipoLetra
@LINENUMB,130 SAY TRANSFORM(mitotal, '@$.99@B')&LcTipoLetra
*i=i+1.2
LINENUMB = LINENUMB + 1
*IF i > 10 THEN
* EJECT
*ELSE
*ENDIF
IF LINENUMB > 31 THEN
*EJECT
=MESSAGEBOX("SALTO DE PAGINA")
LINENUMB = 22
ELSE
*=MESSAGEBOX("Aun hay espacio en el area de detalle")
ENDIF
*SKIP IN MyCursor1

*ENDDO
ENDSCAN
*EJECT

USE IN MyCursor1

SELECT SUM(total)AS eltotal FROM tblejemplo WHERE idtrans=LcDoc INTO CURSOR CurTotal

SELECT CurTotal

LcTotalConIva=ROUND(eltotal*1.13,2)

* @35,23 SAY MostrarNumerosEnLetras(LcTotalConIva)&LcTipoLetra
* @34,130 SAY TRANSFORM(eltotal,'@$.99@B')&LcTipoLetra
* @36,130 SAY IIF(LcCCF=.T.,TRANSFORM(eltotal*0.13,'@$.99@B'), "")&LcTipoLetra
* @38,130 SAY TRANSFORM(LcTotalConIva,'@$.99@B')&LcTipoLetra

@51,23 SAY MostrarNumerosEnLetras(LcTotalConIva)&LcTipoLetra
@50,130 SAY TRANSFORM(eltotal,'@$.99@B')&LcTipoLetra
@52,130 SAY IIF(LcCCF=.T.,TRANSFORM(eltotal*0.13,'@$.99@B'), "")&LcTipoLetra
@54,130 SAY TRANSFORM(LcTotalConIva,'@$.99@B')&LcTipoLetra

USE IN CurTotal

SET PRINTER OFF
*SET PRINTER TO LPT1
SET DEVICE TO SCREEN
SET CONSOLE ON

Impresion de una factura en formato prediseñado
Me avisas si por casualidad al momento de ejecutarlo para imprimir en la cola de impresion te muestra mas de 1 documento.

Hay 3 tablas relacionadas.