New FWH 21.06

Re: New FWH 21.06

Postby Antonio Linares » Sun Aug 01, 2021 11:07 am

Leandro,

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 :D

Image

Code: Select all  Expand view  RUN

********************************************************************************
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
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: New FWH 21.06

Postby Silvio.Falconi » Sun Aug 01, 2021 11:51 am

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 :D

Image

Code: Select all  Expand view  RUN

********************************************************************************
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
 


leandro
to understand my problem....
tries to create two different cycles (do while) in the same area

eg a list of articles on the right and another list on the left.

good luck
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
Silvio.Falconi
 
Posts: 7070
Joined: Thu Oct 18, 2012 7:17 pm

Re: New FWH 21.06

Postby Admpss » Sun Aug 01, 2021 11:52 am

Hi, how put QR in design mode, i dont see qr code in codebar types.

thanks
Admpss
 
Posts: 26
Joined: Wed Oct 31, 2018 7:37 pm

Re: New FWH 21.06

Postby Otto » Sun Aug 01, 2021 12:15 pm

Silvio, you have to set the area properties "TOP" for example of the left side to the same as the right one.

both same TOP
PRINTAREA PRINTAREA



Regards,
Otto
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6337
Joined: Fri Oct 07, 2005 7:07 pm

Re: New FWH 21.06

Postby Antonio Linares » Sun Aug 01, 2021 3:46 pm

Silvio,

Isn't this what you were looking for ?

Code: Select all  Expand view  RUN
               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 ;
                    }  
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: New FWH 21.06

Postby Silvio.Falconi » Sun Aug 01, 2021 3:54 pm

Otto wrote:Silvio, you have to set the area properties "TOP" for example of the left side to the same as the right one.

both same TOP
PRINTAREA PRINTAREA



Regards,
Otto

In private mail you wrote me i cannot make it
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
Silvio.Falconi
 
Posts: 7070
Joined: Thu Oct 18, 2012 7:17 pm

Re: New FWH 21.06

Postby Silvio.Falconi » Sun Aug 01, 2021 3:55 pm

Antonio Linares wrote:Silvio,

Isn't this what you were looking for ?

Code: Select all  Expand view  RUN
               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 ;
                    }  
 

yes at left and another one on right on the same area. memoline I afraid it no good because i not know the size of each items.

I wish make two smaller ( as body invoice part ) on the same area, see my invoice picture
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
Silvio.Falconi
 
Posts: 7070
Joined: Thu Oct 18, 2012 7:17 pm

Re: New FWH 21.06

Postby joseluispalma » Mon Aug 02, 2021 6:58 am

Leandro,¿ a qué tipo de ajustes te refieres? Te agradecería también si pudieras por favor compartir los archivos del diseño de la factura. Muchas gracias
joseluispalma
 
Posts: 109
Joined: Mon Apr 30, 2012 9:10 am

Re: New FWH 21.06

Postby leandro » Mon Aug 02, 2021 3:21 pm

Jose Luis como vas?

En cuanto a la interfase en el diseñador del informes como lo menciona Silvio, hay varios ajustes por hacer, el tema de las sombras cuando se mueven los objetos, sobre todo cuando se seleccionan varios al tiempo. En algunos casos también los tamaños de las cajas se descompensan un poco al momento de hacer la impresión final, también el tema del zoom.

Al momento de intentar imprimir una caja multilinea, no se puede hacer de manera justificada, al tiempo que el interlineado no funciona adecuadamente, creo que depende del controlador.

Cuando hemos impreso contratos laborales, nos gustaría que se pudieran colocar algunas palabras en negrilla, como por ejemplo el nombre y la cedula de la persona. No se si esto se pueda solucionar con los textos enriquecidos.

De momento estos son lo que me vienen a la mente.

Dejo el link para descarga del diseño del informe.

https://hymplus.com/forofw/fact_not.zip

Leandro,

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!


Antonio como vas?

No, en un rato lo descargo y hago algunas pruebas, el fin de semana no estuve programando. :D
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1676
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: New FWH 21.06

Postby leandro » Mon Aug 02, 2021 3:27 pm

yes at left and another one on right on the same area. memoline I afraid it no good because i not know the size of each items.

I wish make two smaller ( as body invoice part ) on the same area, see my invoice picture


Silvio esa solución es aporte de nuestro Amigo Armando Estrada.

http://forums.fivetechsupport.com/viewtopic.php?f=6&t=38315&p=229322&hilit=armando+easy&sid=932f86c6ebcbd1557fb62dc1599ec8fb&sid=5d050d3ccc67533ed43e4e3c614a9063#p228820
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1676
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: New FWH 21.06

Postby Silvio.Falconi » Mon Aug 02, 2021 7:56 pm

leandro wrote:
yes at left and another one on right on the same area. memoline I afraid it no good because i not know the size of each items.

I wish make two smaller ( as body invoice part ) on the same area, see my invoice picture


Silvio esa solución es aporte de nuestro Amigo Armando Estrada.

http://forums.fivetechsupport.com/viewtopic.php?f=6&t=38315&p=229322&hilit=armando+easy&sid=5d050d3ccc67533ed43e4e3c614a9063&sid=a86866996802aecba8e103c496299c78#p228820



por fin querido leandro estoy de acuerdo conmigo en que hay muchos problemas por resolver,

antonio y sus acompañantes entre ellos otto están obsesionados con este EasyReport

pero hay muy poca gente que usa easyreport el cual nunca será un reporte rápido y te explicaré por qué,

ayer por la tarde yo tiempo perdido en ver todo el código, las áreas que ves son en realidad diálogos es como si vieras los diálogos de una carpeta y en esta se posicionan los objetos en modo texto, líneas y casillas que no conozco u otras provenientes del clase tgroup modificada.

En cambio, como he sugerido, c5report crea un rectángulo gráfico como vista previa de la vista previa de impresión y en este, el zoom y los objetos que conozco o todos se crean en modo gráfico.

En un informe fácil es realmente difícil crear un zoom a pesar de que otto me dijo que tiene una versión con un zoom pero es muy inestable.

Probablemente nunca haya intentado dibujar con c5report, por lo que no comprende la diferencia entre EasyReport y c5report.

Ciertamente c5report no está terminado pero guarda correctamente en tres formatos el modelo tiene un zoom espectacular y el usuario no pierde datos porque tiene un sistema de guardado interno que EasyReport lamentablemente no tiene.

Sé que es una pérdida de tiempo hablar de c5report porque linares ahora está orientado a EasyReport y no hay nada que puedas hacer para que cambie de opinión, pero nunca admitirá que c5report estoy hablando de que el motor gráfico es más potente que EasyReport.

Si hubiera encontrado una solución para crear las áreas en c5report ahora, la estaría usando, pero desafortunadamente me enfrento a tres proyectos myrpt, EasyReport y c5report que todos tienen serios problemas.

Es por eso que todo el mundo usa fastreport o label & report o cristalreport porque no vale la pena.

He estado esperando un buen diseñador de informes durante más de diez años, pero nadie me da una razón, tal vez en el futuro algunos dispuestos comprendan nuestras necesidades y tal vez creen un diseñador de informes poderoso para insertar en nuestras aplicaciones. Nos prometieron los cambios en EasyReport que en realidad no ha habido o ha habido en parte cono debería sentir alguien que estaba esperando estas promesas?

Podemos intentar y volver a intentar hacer modelos con EasyReport, estoy nervioso porque todavía en 2021 tengo que usar EasyReport, tengo que dibujar en una herramienta arriesgándome a perder lo que estoy creando y luego no estoy seguro de si funciona .

Me tomó un día hacer un modelo con EasyReport, no puedo perder todo este tiempo en un solo modelo. y luego debe ser una herramienta para ser utilizada en nuestras aplicaciones, el usuario final debe poder crear su propio modelo.

mi escuela donde trabajo tiene una aplicación de Windows que usa fastreport y puedo crear las impresiones sin recurrir a la empresa que hizo el programa
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
Silvio.Falconi
 
Posts: 7070
Joined: Thu Oct 18, 2012 7:17 pm

Re: New FWH 21.06

Postby Otto » Mon Aug 02, 2021 8:12 pm

Hello Silvio,
Is c5report is included in Fivewin?
Maybe that would be something for my room planner?
Best regards,
Otto
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6337
Joined: Fri Oct 07, 2005 7:07 pm

Re: New FWH 21.06

Postby Silvio.Falconi » Mon Aug 02, 2021 8:52 pm

Otto wrote:Hello Silvio,
Is c5report is included in Fivewin?
Maybe that would be something for my room planner?
Best regards,
Otto

search on github of fivetech
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
Silvio.Falconi
 
Posts: 7070
Joined: Thu Oct 18, 2012 7:17 pm

Previous

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 53 guests