by FranciscoA » Mon May 18, 2009 2:26 pm
Anserkk:
Aqui te dejo un ejemplo funcional que facilmente puedes adaptarlo a tus necesidades. Espero te sea útil.
Saludos.
Francisco J. Alegría P.
//------------------------------------------------
Function ImpCdiario(aConcepto,aDoctos,dFecha, nDocActual)
LOCAL aMes := { "Ene", "Feb", "Mar", "Abr", "May", "Jun","Jul", "Ago", "Sep", "Oct", "Nov", "Dic" }
LOCAL oPrn
local oFont, oFont1, oFontEmpre1,oFontEmpre2,oPen1
local nRowStep:=0, nColStep:=0
local nRow := 0
local Tdebe:=0, Thaber:=0
local nPag := 0
local cCodicont
local nCol1 :=0, nCol2 :=0, nCol3 :=0, nCol4 :=0, nCol5 :=0
local nLinMax :=0, nLinTotales :=0, nLinNumCD :=0, nColNumCD :=0
local nLinFecha := 0, nColFecha :=0, nLinConcep :=0, nColConcep :=0
local nLinInicio :=0
local nColsRepo:=80,nRowsRepo:=66
LOCAL cOLDSELE:=SELECT()
DBSELECTAREA("CDIARIO")
DBSETORDER(0)
DBGOTOP()
* PrnSetSize( 2160, 2480 ) //ancho,alto
* PrnSetSize( 2160, 2790 ) //ancho,alto
PrinterSetup(oPrn)
PRINT oPrn NAME "Cdiario" PREVIEW
While Empty( oPrn:hDC )
MsgStop( "Impresora no esta lista!","Alto" )
enddo
DEFINE FONT oFont NAME "Arial" SIZE 0, -09 OF oPrn
DEFINE FONT oFont1 NAME "Arial" SIZE 0, -10 OF oPrn BOLD
DEFINE FONT oFontEmpre1 NAME "Arial" SIZE 0, -14 BOLD OF oPrn
DEFINE FONT oFontEmpre2 NAME "Arial" SIZE 0, -10 BOLD OF oPrn
DEFINE PEN oPen1 WIDTH 1
nRowStep = oPrn:nVertRes() / nRowsRepo //66 //lineas
nColStep = oPrn:nHorzRes() / nColsRepo //80 // columnas
nCol1 := Val(GetPvProfString("Cdiario","Columna1","2",cIniFile)) * ncolStep //codigo
nCol2 := Val(GetPvProfString("Cdiario","Columna2","17",cIniFile)) * nColStep //descrip
nCol3 := Val(GetPvProfString("Cdiario","Columna3","53",cIniFile)) * ncolStep //parcial
nCol4 := Val(GetPvProfString("Cdiario","Columna4","65",cIniFile)) * ncolStep //debe
nCol5 := Val(GetPvProfString("Cdiario","Columna5","77",cIniFile)) * ncolStep //haber
nLinMax := Val(GetPvProfString("Cdiario","MaxLineas","54",cIniFile)) * nRowStep
nLinTotales := Val(GetPvProfString("Cdiario","LinTotales","56",cIniFile)) * nRowStep
nLinNumCD := Val(GetPvProfString("Cdiario","LinNumCD","10",cIniFile)) * nRowStep
nColNumCD := Val(GetPvProfString("Cdiario","ColNumCD","35",cIniFile)) * nColStep
nLinFecha := Val(GetPvProfString("Cdiario","LinFecha","5",cIniFile)) * nRowStep
nColFecha := Val(GetPvProfString("Cdiario","ColFecha","74",cIniFile)) * nColStep
nLinConcep := Val(GetPvProfString("Cdiario","LinConcep","11",cIniFile)) * nRowStep
nColConcep := Val(GetPvProfString("Cdiario","ColConcep","5",cIniFile)) * nColStep
nLinInicio := Val(GetPvProfString("Cdiario","LinInicio","14",cIniFile)) * nRowStep //Lin Inic codificacion
nRow:=0
PAGE
DibujeCD(oPrn,oPen1,nRowStep,nColStep,oFont,oFont1,oFontEmpre1,oFontEmpre2,nColsRepo,nRowsRepo)
nPag += 1
oPrn:Say( 1*nRowStep, nCol5, str(nPag), oFont,,,,PAD_RIGHT )
if !empty(aDoctos)
oPrn:Say( nLinNumCD, nColNumCD, transform(nDocActual,"####-##-####"), oFont1,,,,PAD_RIGHT )
endif
oPrn:Say( nLinFecha, nColFecha, Upper(aMes[Month(dfecha)])+". "+;
Transform(Day(dfecha),"99")+"/"+;
Transform(Year(dfecha),"9999"), oFont,,,,PAD_RIGHT )
nRow:=nLinConcep
oPrn:Say( nLinConcep, nColConcep, aConcepto[1], oFont )
nRow+= nRowStep
oPrn:Say( nRow, nColConcep, aConcepto[2], oFont )
nRow+= nRowStep
oPrn:Say( nRow, nColConcep, aConcepto[3], oFont )
nRow+= nRowStep
oPrn:Say( nRow, nColConcep, aConcepto[4], oFont ) // DIC/2008
//Codificacion del comprobante
dbGotop()
nRow:=nLinInicio
WHILE !eof()
cCodiCont:=field->cuenta+field->scuenta+field->sscuenta+field->ssscuenta+field->sssscuenta
if len(Alltrim(cCodiCont)) = 4 //mayor
nRow+=nRowStep
endif
nRow+= nRowStep
oPrn:Say( nRow, ncol1, cCodiCont, if(len(Alltrim(cCodiCont)) = 4, oFont1, oFont) )
oPrn:Say( nRow, ncol2, field->NOMBRE, if(len(Alltrim(cCodiCont)) = 4, oFont1, oFont) )
if len(alltrim(cCodiCont))=4
oPrn:Say( nRow, nCol4, transform(field->MOVDEBE, "@Z 999,999,999.99"), if(len(alltrim(cCodiCont))=4, oFont1, oFont),,,,PAD_RIGHT )
oPrn:Say( nRow, nCol5, transform(field->MOVHABER,"@Z 999,999,999.99"), if(len(alltrim(cCodiCont))=4, oFont1, oFont),,,,PAD_RIGHT )
else
oPrn:Say( nRow, nCol3, transform(field->MOVDEBE, "@Z 999,999,999.99"), oFont,,,,PAD_RIGHT )
oPrn:Say( nRow, nCol3, transform(field->MOVHABER,"@Z 999,999,999.99"), oFont,,,,PAD_RIGHT )
endif
if len(alltrim(cCodiCont))=4 //Para gran total solo suma cta mayor
Tdebe += field->MOVDEBE
Thaber+= field->MOVHABER
endif
dbSkip()
if nRow >= nLinMax
oPrn:Say( nLinTotales, nCol3, "Sub-Total -->", oFont,,,,PAD_RIGHT )
oPrn:Say( nLinTotales, nCol4, transform(Tdebe, "@Z 999,999,999.99"), oFont,,,,PAD_RIGHT )
oPrn:Say( nLinTotales, nCol5, transform(Thaber,"@Z 999,999,999.99"), oFont,,,,PAD_RIGHT )
ENDPAGE
nRow := 0
PAGE
if lDibujarComp
DibujeCD(oPrn,oPen1,nRowStep,nColStep,oFont,oFont1,oFontEmpre1,oFontEmpre2,nColsRepo,nRowsRepo)
endif
nPag += 1
oPrn:Say( 1*nRowStep, nCol5, str(nPag), oFont,,,,PAD_RIGHT )
if !empty(aDoctos)
oPrn:Say( nLinNumCD, nColNumCD, transform(nDocActual,"####-##-####"), oFont1,,,,PAD_RIGHT )
endif
oPrn:Say( nLinFecha, nColFecha, Upper(aMes[Month(dfecha)])+". "+;
Transform(Day(dfecha),"99")+"/"+;
Transform(Year(dfecha),"9999"), oFont,,,,PAD_RIGHT )
nRow:=nLinConcep
oPrn:Say( nLinConcep, nColConcep, aConcepto[1], oFont )
nRow+= nRowStep
oPrn:Say( nRow, nColConcep, aConcepto[2], oFont )
nRow+= nRowStep
oPrn:Say( nRow, nColConcep, aConcepto[3], oFont )
nRow+= nRowStep
oPrn:Say( nRow, nColConcep, aConcepto[4], oFont ) // DIC/2008
nRow:=nLinInicio
endif
if eof()
oPrn:Say( nLinTotales, nCol3, "BALANCE -->", oFont1,,,,PAD_RIGHT )
oPrn:Say( nLinTotales, nCol4, transform(Tdebe, "@Z 999,999,999.99"), oFont1,,,,PAD_RIGHT )
oPrn:Say( nLinTotales, nCol5, transform(Thaber,"@Z 999,999,999.99"), oFont1,,,,PAD_RIGHT )
EXIT
endif
ENDDO
ENDPAGE
oFont:End()
oFont1:End()
oFontEmpre1:End()
oFontEmpre2:End()
oPen1:End()
ENDPRINT
CDIARIO->(DBCLOSEAREA())
** FERASE("CDIARIO.DBF")
** FERASE("CDIARIO.NTX")
** DBSELECTAREA("FICHERO")
DBSELECTAREA(cOLDSELE)
return nil
//-----------------------//DIBUJA EL FORMATO DEL COMPROBANTE
Function DibujeCD(oPrn,oPen1,nRowStep,nColStep,oFont,oFont1,oFontEmpre1,oFontEmpre2,nColsRepo,nRowsRepo)
local nLinFirmas:= VAL(GetPvProfString("Cdiario","LinFirmas", "52", cIniFile)) * nRowStep
local nColHecho:= VAL(GetPvProfString("Cdiario","ColHecho", "3", cIniFile)) * nColStep
local nColRevisado:= VAL(GetPvProfString("Cdiario","ColRevisado", "33", cIniFile)) * nColStep
local nColAutoriza:= VAL(GetPvProfString("Cdiario","ColAutoriza", "63", cIniFile)) * nColStep
local nLinTitEmpre1:= VAL(GetPvProfString("Cdiario","LinTitEmpre1", "6", cIniFile)) * nRowStep
local nColTitEmpre1:= VAL(GetPvProfString("Cdiario","ColTitEmpre1", "56", cIniFile)) * nColStep
local nLinTitEmpre2:= VAL(GetPvProfString("Cdiario","LinTitEmpre2", "5", cIniFile)) * nRowStep
local nColTitEmpre2:= VAL(GetPvProfString("Cdiario","ColTitEmpre2", "30", cIniFile)) * nColStep
local nLinTitCols:= VAL(GetPvProfString("Cdiario","LinTitCols", "15", cIniFile)) * nRowStep
local cNomHabilit:=Alltrim(Field->MODIFICADO) //usamos este campo p/identific Habilitado
local cComprob:="COMPROBANTE DE DIARIO"
nColTitEmpre1:=(( nColsRepo-len(cNomHabilit)-4 )/2) * nColStep //centrar (-4 es por el tam de ofont)
nColTitEmpre2:=(( nColsRepo-len(cComprob)-6 )/2) * nColStep //centrar (-4 es por el tam de ofont)
**oPrn:SayBitMap( 30,50, "IcoEmpre.bmp" )
oPrn:Say( nLinTitEmpre1, nColTitEmpre1, cNomHabilit, oFontEmpre1 )
oPrn:Say( nLinTitEmpre2, nColTitEmpre2, cComprob, oFontEmpre2 )
//caja del cuerpo
Caja(13,2, 63,78,oPrn,oPen1,nRowStep,nColStep)
//Linea Horiz (enmarca descrip columnas)
Linea(15,2, 15,78,oPrn,oPen1,nRowStep,nColStep)
oPrn:Say( nLinTitCols, 4*nColStep, "CODIGO CONTABLE", oFont )
oPrn:Say( nLinTitCols, 20*nColStep, "DESCRIPCION O CONCEPTO", oFont )
oPrn:Say( nLinTitCols, 58*nColStep, "DEBITOS", oFont )
oPrn:Say( nLinTitCols, 68*nColStep, "CREDITOS", oFont )
//Linea Vert1 codigo/concepto
Linea(13,18, 57,18,oPrn,oPen1,nRowStep,nColStep)
//Linea Vert3 parcial/debitos
Linea(13,54, 57,54,oPrn,oPen1,nRowStep,nColStep)
//Linea Vert4 debitos/creditos
Linea(13,66, 57,66,oPrn,oPen1,nRowStep,nColStep)
if upper(GetPvProfString("Cdiario","Parcial","N",cIniFile))="S"
oPrn:Say( nLinTitCols, 45*nColStep, "PARCIAL", oFont )
//Linea Vert2 concepto/parcial
Linea(13,42, 57,42,oPrn,oPen1,nRowStep,nColStep)
endif
//Linea Horiz (enmarca las firmas)
Linea(57,2, 57,78,oPrn,oPen1,nRowStep,nColStep)
oPrn:Say( nLinFirmas, nColHecho, "Hecho por:", oFont )
oPrn:Say( nLinFirmas, nColRevisado, "Revisado por:", oFont )
oPrn:Say( nLinFirmas, nColAutoriza, "Autorizado por:", oFont )
Return nil
//-----------------------------------------------------------------
Function Caja(nlin1,nCol1,nLin2,nCol2,oPrn,oPen1,nRowStep,nColStep)
oPrn:Box(nLin1*nRowStep, nCol1*nColStep, nLin2*nRowStep, nCol2*nColStep,oPen1)
return nil
//-----------------------------------------------------------------
Function Linea(nLin1,nCol1,nLin2,nCol2,oPrn,oPen1,nRowStep,nColStep)
oPrn:Line(nLin1*nRowStep, nCol1*nColStep,nLin2*nRowStep,nCol2*nColStep,oPen1)
return nil
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql