Que buena noticia saber que lo usais y que estais muy satisfechos con ER
Has podido probar la versión FWH 21.06 y ver si os funcionan bien los reportes con él ?
muchas gracias!
leandro wrote:Buenas tardes para todos
Nos gusta muchísimo Easy Report, lo usamos para crear todos nuestros reportes, hasta el momento hemos logrado crear todos los formatos de factura que hemos necesitado; uno de los mas complejos es el de las notarias.
Es cierto que hay que hacer algunos ajustes, pero desde mi punto de vista ER es una super herramienta. Gracias Timm
- Code: Select all Expand view
********************************************************************************
METHOD imprimeFactNotaria() CLASS cFact
local oReport,Pagina:=nLinea := 1
local vArea := 0
local aAreaItem,aAreaSeri,aAreaTota,vFactor
local vCanti:=0; local vSubto:=0; local vVrIva:=0; local vTotal:=0; local nTNtles:=0
local nTRecud:=0; local nTNtiva:=0; local nTNtsub:=0
local vEfect:=0
local cNombrePDF := ::cRutaPDF+Retorna_Caracter(::hEncabezado["numero"])+".pdf"
local aTiposRet := {}
local aValorRet := {}
local aNombrRet := {}
local nLargo := 40
local aControValFoot := {0,0,0}
*/DEFINIMOS AL AREA DE LOS ITEMS*/
local area := hash()
area["FC"] := 1
area["RM"] := 2
area["FP"] := 3
//TPrinter():lUseHaruPDF := .t.
if Empty(::cPreterminada)
::cPreterminada := GetDefaultPrinter()
endif
if Empty(::hOtros["rutavrd"])
Msginfo("Falta Por Definir Ruta Reporte","Error Datos")
else
uFec:=dtoc(date())
uTim:=subs(time(),1,8)
//BUSCAMOS EL NOMBRE DEL VENDEDOR
oVnr:= cBusc():New(::oCnx,"vendedores")
oVnr:solodatos(::hSucursal["idvendedor"])
vTNoTer := oVnr:hRetorna["nombre"]
if ::hEncabezado["fecha"]#::hEncabezado["fvence"]
cFormaPago := "CRÉDITO"
else
cFormaPago := "CONTADO"
endif
nDias := ::hEncabezado["fvence"]-::hEncabezado["fecha"]
if ::lPrevisual
EASYREPORT oVRD NAME ::hOtros["rutavrd"] TO ::cPreterminada PREVIEW (.T.) MODAL
else
if ::lPdf
EASYREPORT oVRD NAME ::hOtros["rutavrd"] TO ::cPreterminada PREVIEW (.F.) FILE cNombrePDF
else
EASYREPORT oVRD NAME ::hOtros["rutavrd"] TO ::cPreterminada PREVIEW (.F.)
endif
endif
IF oVRD:lDialogCancel = .T.
RETURN( .F. )
ENDIF
//RECUPERAMOS LA INFORMACIÓN ADICIONAL TURNO DE LA FACTURA
oVar := "SELECT * FROM "+oLamcla:tMoad+" WHERE itemfa="+cValtoChar(::hOtros["id_factura"])+;
" AND titulo LIKE 'Turno%'"
oRsTu := FW_OPENRECORDSET(oCnFtr,oVar,adLockOptimistic,adOpenKeyset)
if oRsTu:RecordCount()!=0
oRsTu:MoveFirst()
cAdTur := alltrim( oRsTu:Fields( "valor" ):Value )
else
cAdTur := ""
endif
oRsTu:close()
PRINTAREA 1 OF oVRD;
ITEMIDS { 161,162,163,164,165,166,190,191,170,171,172,173,101,102,103,104,105,106,107,108,109,174,175,176,177,178 };
ITEMVALUES {alltrim(oLamcla:vGnom),;
"NIT: "+alltrim(oLamcla:vGnit)+" - "+alltrim(oLamcla:vGdig),;
"REGIMEN COMUN",;
"Dirección: "+if(nulo(oLamcla:vDire),space(0),oLamcla:vDire),;
"Teléfono: "+if(nulo(oLamcla:vTele),space(0),alltrim(oLamcla:vTele)),;
alltrim(::hOtros["resolucion"]),;
alltrim(cValtoChar(::hEncabezado["numero"])) ,;
alltrim(::hOtros["prefijo"]),;
alltrim(dtoc(::hEncabezado["fecha"])),;
subs(time(),1,8),;
alltrim(dtoc(::hEncabezado["fvence"])),;
alltrim(cFormaPago),;
alltrim(cValtoChar(::hEncabezado["nit"])),;
alltrim(::hTercero["razonsocial"]),;
subs(alltrim(::hSucursal["direccion1"]),1,35),;
alltrim(::hSucursal["movil"]),;
alltrim(::hSucursal["ciudad"]),;
alltrim(cValtoChar(::hSucursal["idvendedor"])),;
alltrim(vTNoTer),;
alltrim(cValtoChar(::hOtros["telefono2"])),;
alltrim(cValtoChar(::hOtros["telefono"])),;
alltrim(cValtoChar(nDias)+" días"),;
alltrim(cValtoChar(::hOtros["ubica1"])),;
alltrim(::hSucursal["emailfe"]),;
if(!Empty(cAdTur),"TURNO : "+cAdTur,""),;
alltrim(cValtoChar(::hEncabezado["ordencompra"]));
}
//PRIMERO LANZAMOS LOS DATOS DE LOS COMPARECIENTES
oVar := "SELECT CMP.*,CONCAT(TER.t_razons,' ',TER.t_prinom,' ',TER.t_segnom,' ',"+;
"TER.t_priape,' ',TER.t_segape) AS nombre,TER.t_tipote FROM "+oLamcla:tMocm+" CMP LEFT JOIN "+;
oLamcla:tTerc+" TER ON CMP.tercero=TER.t_tercer WHERE CMP.itemfa="+cValtoChar(::hOtros["id_factura"])
oRsCm := FW_OPENRECORDSET(oCnFtr,oVar,adLockOptimistic,adOpenKeyset)
oRsCm:MoveFirst()
Do While !oRsCm:Eof()
PRINTAREA 2 OF oVRD ;
ITEMIDS { 201 , 202 , 203 , 204 } ;
ITEMVALUES { alltrim(oRsCm:Fields( "nombre" ):Value),;
alltrim(oRsCm:Fields( "tercero" ):Value),;
alltrim(oRsCm:Fields( "participa" ):Value),;
alltrim(cTipoNombre( oRsCm:Fields( "t_tipote" ):Value ) );
}
oRsCm:MoveNext()
EndDo
oRsCm:close()
//CAMBIAMOS EL ALTO DEL AREA
oVRD:aAreaheight[2] := 3
//LUEGO LA INFORMACION ADICIONAL SOBRE EL PROYECTO
oVar := "SELECT * FROM "+oLamcla:tMoad+" WHERE itemfa="+cValtoChar(::hOtros["id_factura"])+;
" AND titulo LIKE 'Proyecto%'"
oRsPr := FW_OPENRECORDSET(oCnFtr,oVar,adLockOptimistic,adOpenKeyset)
if oRsPr:RecordCount()!=0
oRsPr:MoveFirst()
nCnAd := 1
Do While !oRsPr:Eof()
aIdRep := { 201 , 205 }
aIdVal := { if(nCnAd=1,alltrim(oRsPr:Fields( "titulo" ):Value ),""),;
alltrim(oRsPr:Fields( "valor" ):Value);
}
oVRD:AreaStart( 2 , .T. , aIdRep , aIdVal)
oItem := oVRD:GetItem( 2, 205 )
oItem:nColtext := 3
oVRD:PrintArea( 2 )
oRsPr:MoveNext()
nCnAd++
EndDo
endif
oRsPr:close()
//LUEGO LA INFORMACION ADICIONAL SOBRE EL ACTO DEL PROYECTO
oVar := "SELECT * FROM "+oLamcla:tMoad+" WHERE itemfa="+cValtoChar(::hOtros["id_factura"])+;
" AND titulo LIKE 'Acto%'"
oRsPr := FW_OPENRECORDSET(oCnFtr,oVar,adLockOptimistic,adOpenKeyset)
if oRsPr:RecordCount()!=0
oRsPr:MoveFirst()
nCnAd := 1
Do While !oRsPr:Eof()
PRINTAREA 2 OF oVRD ;
ITEMIDS { 201 , 205 } ;
ITEMVALUES { if(nCnAd=1,alltrim(oRsPr:Fields( "titulo" ):Value ),""),;
alltrim(oRsPr:Fields( "valor" ):Value);
}
oRsPr:MoveNext()
nCnAd++
EndDo
endif
oRsPr:close()
//IMPRESION DEL AREA 3
//SI HAY REGISTROS EN LA INFORMACION DE LOS ACTOS HACEMOS LA IMPRESIÓN DE LAS AREAS
nActos := 0
FOR z:=1 TO len(::detalle)
if ::detalle[z]["es_acto"] == "S"
nActos++
endif
NEXT
if nActos!=0
PRINTAREA 3 OF oVRD
//LUEGO LANZAMOS LOS DATOS DE LOS ACTOS
FOR i:=1 TO len(::detalle)
if ::detalle[i]["es_acto"] == "S"
nTNtles := nTNtles + ::detalle[i]["subtotal"] + ::detalle[i]["iva"]
nTNtiva := nTNtiva + ::detalle[i]["iva"]
nTNtsub := nTNtsub + ::detalle[i]["subtotal"]
PRINTAREA 4 OF oVRD ;
ITEMIDS { 401 , 402 , 403 , 404 , 405 , 406 } ;
ITEMVALUES { alltrim( ::detalle[i]["idproducto"] ),;
transform( ::detalle[i]["base"] , oLamcla:PIC7 ),;
transform( ::detalle[i]["total"] , oLamcla:PIC7 ),;
transform( ::detalle[i]["iva"] , oLamcla:PIC7 ),;
transform( ::detalle[i]["porciva"] , oLamcla:PIC7 ),;
transform( ::detalle[i]["subtotal"] , oLamcla:PIC7 );
}
endif
NEXT
nTopArea4 := oVRD:aAreaTop[3]
//TOTALES DERECHOS NOTARIALES
PRINTAREA 5 OF oVRD ;
ITEMIDS { 501 , 502 , 503 } ;
ITEMVALUES { transform( nTNtles , oLamcla:PIC7 ),;
transform( nTNtiva , oLamcla:PIC7 ),;
transform( nTNtsub , oLamcla:PIC7 ) }
//SI NO HAY ACTOS CAMBIAMOS EL TITULO DE LA SECCION DE ITEMS
//SE VE REFLEJADO EN EL AREA 6 QUE SIEMPRE SE DEBE ENVIAR MINIMO UN ITEM
cTtSinActos := "GASTOS ESCRITURACIÓN"
cTtSinActo2 := "TOTAL ESCRIT."
else
cTtSinActos := "GASTOS VARIOS"
cTtSinActo2 := "TOTAL VARIOS"
nTopArea4 := oVRD:aAreaTop[3]
endif
//IMPRESION DEL AREA 6
PRINTAREA 6 OF oVRD ;
ITEMIDS { 601 } ITEMVALUES { cTtSinActos }
//IMPRESION DE LOS GASTOS DE ESCRITURACION
nLargo := 45
FOR i:=1 TO len(::detalle)
if ::detalle[i]["es_acto"] == "N"
//DESDE AQUI ES EL CODIGO DE HACE LA MAGIA DE IMPRIMIR CAMPOS "MEMO"
//ESTO FUE LO QUE NOS ENVIO ARMANDO ESTRADA
nLineas := MLCOUNT(ALLTRIM(::detalle[i]["nombreproducto"]),nLargo)
FOR nLoop := 1 TO nLineas
cDes := MEMOLINE(ALLTRIM(::detalle[i]["nombreproducto"]),nLargo,nLoop)
IF nLoop == 1
PRINTAREA 7 OF oVRD ;
ITEMIDS { 701,702,703,;
704,705,706,;
707,708,709,710,711} ;
ITEMVALUES { str(::detalle[i]["id"]),;
subs(alltrim(::detalle[i]["idproducto"]),1,8),;
alltrim(cDes),;
transform(::detalle[i]["cantidad"],"99999"),;
transform(::detalle[i]["precio"],"999,999,999"),;
transform(::detalle[i]["subtotal"],"999,999,999"),;
transform(::detalle[i]["iva"],"999,999,999"),;
transform(::detalle[i]["total"],"999,999,999"),;
transform(::detalle[i]["porcdcto"],"99")+"%",;
alltrim(str(i)),;
transform(::detalle[i]["porciva"],"99")+"%";
}
ELSE
PRINTAREA 7 OF oVRD ;
ITEMIDS {703} ;
ITEMVALUES { alltrim(cDes) }
ENDIF
NEXT
//AQUI TERMINA LO DE ARMANDO
vCanti := vCanti + ::detalle[i]["cantidad"]
vSubto := vSubto + ::detalle[i]["subtotal"]
vVrIva := vVrIva + ::detalle[i]["iva"]
vTotal := vTotal + ::detalle[i]["subtotal"] + ::detalle[i]["iva"]
endif
NEXT
//AREA DE LOS TOTALES
PRINTAREA 8 OF oVRD ;
ITEMIDS { 801,802,803,804,805} ;
ITEMVALUES { transform(vCanti,"99999"),;
transform(vSubto,"999,999,999"),;
transform(vVrIva,"999,999,999"),;
transform(vTotal,"999,999,999"),;
cTtSinActo2 ;
}
//SE IMPRIME LOS RECAUDOS A TERCEROS
oVar := "SELECT MRT.*,RTC.codigo,RTC.descripcion FROM "+oLamcla:tMore+;
" MRT LEFT JOIN "+oLamcla:tRete+" RTC ON MRT.id_retencion=RTC.id_retencion"+;
" WHERE MRT.itemfa="+cValtoChar(::hOtros["id_factura"])
oRsRt := FW_OPENRECORDSET(oCnFtr,oVar,adLockOptimistic,adOpenKeyset)
oRsRt:MoveFirst()
//ANTES DE IMPRIMIR LAS AREAS DE LOS RECAUDOS A TERCEROS VERIFICAMOS QUE TENGAN ALGUN VALOR
nTRecud := 0
nTRec := 0
Do While !oRsRt:Eof()
nTRec := nTRec + oRsRt:Fields( "valor" ):Value
oRsRt:MoveNext()
EndDo
if nTRec != 0
//AREA DEL TITULO DE LOS RECAUDOS A TERCEROS
oVRD:aAreaTop[9] := nTopArea4
PRINTAREA 9 OF oVRD
oRsRt:MoveFirst()
Do While !oRsRt:Eof()
nTRecud := nTRecud + oRsRt:Fields( "valor" ):Value
PRINTAREA 10 OF oVRD ;
ITEMIDS { 1001 , 1002 , 1003 } ;
ITEMVALUES { alltrim( oRsRt:Fields( "descripcion" ):Value ),;
alltrim( oRsRt:Fields( "codigo" ):Value ),;
transform( oRsRt:Fields( "valor" ):Value , oLamcla:PIC7 );
}
oRsRt:MoveNext()
EndDo
oRsRt:close()
//AREA DE LOS TOTALES DE LOS RECAUDOS A TERCEROS
PRINTAREA 11 OF oVRD ;
ITEMIDS { 1101} ;
ITEMVALUES { transform( nTRecud,oLamcla:PIC7 ) }
endif
::hOtros["totalfctra"] := vSubto+nTRecud+nTNtsub+vVrIva+nTNtiva
//LOS TOTALES DE LA FACTURA Y LAS OBSERVACIONES
vLetras := UPPER(LetrasDecimales( ::hOtros["totalfctra"] , ::hOtros["dc_div"] ,;
::hOtros["cd_div"] , ::oCnx ))
//RECUPERAMOS LA INFORMACIÓN CUANDO HAY CREDITO EN LA FACTURA
oVar := "SELECT * FROM "+oLamcla:tMoad+" WHERE itemfa="+cValtoChar(::hOtros["id_factura"])+;
" AND titulo LIKE 'Cr%'"
oRsCr := FW_OPENRECORDSET(oCnFtr,oVar,adLockOptimistic,adOpenKeyset)
nRegFtCre := oRsCr:RecordCount()
if nRegFtCre!=0
aControValFoot := {}
oRsCr:MoveFirst()
aCrAbo := DescomponeCadena(alltrim(oRsCr:Fields( "titulo" ):Value ),":")
cCrAbo := alltrim(aCrAbo[2])
AADD(aControValFoot,val(cCrAbo))
//nCrAbo := val(cCrAbo)
cCrCre := alltrim(oRsCr:Fields( "valor" ):Value )
AADD(aControValFoot,val(cCrCre))
//nCrCre := val(cCrCre)
cCrAnt := alltrim(oRsCr:Fields( "otros" ):Value )
AADD(aControValFoot,val(cCrAnt))
//nCrAnt := val(cCrAnt)
//AJUSTAMOS LA DIFERENCIA ENTRE LO QUE VIENE Y EL VALOR TOTAL DE LA FACTURA
nPosUlDifCero := 1
nSumaTres := 0
//RECOREMOS EL ARRAY PARA IDENTIFICAR SI HAY DIFERENCIA
FOR s:=1 TO len(aControValFoot)
if aControValFoot[s] != 0
nPosUlDifCero := s
endif
nSumaTres += aControValFoot[s]
NEXT
//SI HAY DIFERENCIA AJUSTAMOS EL VALOR TOTAL EN EL ULTUMO VALOR DIFERENTE DE 0
if ::hOtros["totalfctra"] != nSumaTres
nDifeTot := ::hOtros["totalfctra"] - nSumaTres
nNuevoValor := aControValFoot[nPosUlDifCero] + nDifeTot
aControValFoot[nPosUlDifCero] = nNuevoValor
endif
else
cCrAnt := cCrCre := cCrAbo := ""
nCrAbo := nCrCre := nCrAnt := 0
endif
oRsCr:close()
PRINTAREA 12 OF oVRD ;
ITEMIDS { 501 , 502 , 503 , 507 , 508 , 509 , 510 , 511 , 512 , 513 , 514 , 515 , 516 , 517 , 518 } ;
ITEMVALUES { transform(vSubto+nTRecud+nTNtsub,oLamcla:PIC7),; //LA SUMA DE LOS SUBTOTALES Y RECAUDOS
transform(vVrIva+nTNtiva,oLamcla:PIC7),; //LA SUMA DE LOS IVAS
transform(::hOtros["totalfctra"],oLamcla:PIC7),; //LA SUMA FINAL
alltrim(vLetras),; //VALOR EN LETRAS
transform(vSubto,oLamcla:PIC7),; //SUB TOTAL DERECHOS NOTARIALES
transform(nTNtsub,oLamcla:PIC7),; //SUB TOTAL GASTOS ESCRITURACION
transform(nTRecud,oLamcla:PIC7),; //SUB TOTAL RECAUDOS A TERCEROS
if(!empty(cCrAbo),transform(aControValFoot[1],oLamcla:PIC7),""),;
if(!empty(cCrCre),transform(aControValFoot[2],oLamcla:PIC7),""),;
if(!empty(cCrAnt),transform(aControValFoot[3],oLamcla:PIC7),""),;
if(!empty(cCrAbo),"ABONADO",""),;
if(!empty(cCrCre),"CREDITO",""),;
if(!empty(cCrAnt),"ANTICIPO",""),;
transform(vSubto+nTNtsub,oLamcla:PIC7),; //POR SOLICITUD USUARIO SUMA DERECHOS + GASTOS
cTtSinActos ; //TITULO DESCRICION CUANDO NO HAY ACTOS
}
if Empty(::cCufe)
::cCufe := "Sin CUFE"
::cInfo := "Sin CUFE"
::cFope := space(0)
endif
//RECUPERAMOS LA INFORMACIÓN ADICIONAL USUARIO DEL PROYECTO
oVar := "SELECT * FROM "+oLamcla:tMoad+" WHERE itemfa="+cValtoChar(::hOtros["id_factura"])+;
" AND titulo LIKE 'Usuario%'"
oRsUs := FW_OPENRECORDSET(oCnFtr,oVar,adLockOptimistic,adOpenKeyset)
if oRsUs:RecordCount()!=0
oRsUs:MoveFirst()
cAdUsu := alltrim( oRsUs:Fields( "valor" ):Value )
else
cAdUsu := ""
endif
oRsUs:close()
PRINTAREA 13 OF oVRD;
ITEMIDS { 701 , 702 , 703 , 704 , 705 , 706 } ;
ITEMVALUES { alltrim(::hEncabezado["comentarios"]),;
::cCufe,;
::cInfo,;
::cFope,;
if(!Empty(cAdUsu),"Código de Usuario : "+cAdUsu,""),;
alltrim(cValtoChar(::hEncabezado["ordencompra"]));
}
END EASYREPORT oVRD
endif
RETURN NIL