Error reallocate memory

Error reallocate memory

Postby JoseLuis » Tue Nov 04, 2008 1:06 pm

Hola


UNRECOVERABLE ERROR 9009:
hb_xrealloc can't reallocate memory


Al pasar a la version 8.10 me da éste error en algo que antes no me lo daba, al imprimir la facturación con preview.

He probado a las soluciones que dió antonio como sysrefresh(), etc, y nada.

Si imprimo por pantalla 5 o 6 facturas, no hay problema, el problema es presentar la facturación, unas 500 facturas por pantalla.

Repito, con fwh 2.7 funciona perfectamente.

El código es el siguiente:
Code: Select all  Expand view  RUN
static function Recunon(tipo,aAlias)

   local oini
   local oFont1, oFont2, oFont3,ofont4,ofont5,oFont6,oFont7,oPen1,oPen2
   local aTamano, nWidth, nHeight, nMargin, nLblWidth, nLblHeight
   local oPrn
   local swp:=0
   local nbase:=0,nbaseimpo,nneto,nalbaran
   local tbase,tseguro,timportiva,tliquido,tbaseimpo
   local ofin
   local npiva
   local cliqui
   local nfor,nlines,cline,textoc
   local liz,nlin
   local odlg,cDomip,cPoblap,cTelfax,cemail,cweb
   local ccodpro,cnompro,cdirpro,cnifpro,cPoblapro,cProvinpro,ccp
   local cfpago,domiban,descuento,tdescuento
   local Grabar:=.F.
   local hoja:=1
   local oRadio,osay
   local nOpcion,oboton,oboton1
   local nkgs
   local pone:=space(1)
   local pasada:=1
   local corden
   local lmode:=.F.
   local cnombre
   local xcopia:=.F.
   local pinta:=.F.
   local cnif,i
   local xdatos,cvenci
   local lineas:=iif(tipo=1,22,25.5)
   local oBrush,oBrush1
   local cindi:=(aAlias[24])->( OrdSetFocus() )
   local cindi1:=(aAlias[22])->( OrdSetFocus() )   
   local primero:=space(1)
   local colu:=0
   local lpdf:=.F.
   local lnpdf:=.F.
   local tpdf:=.F.
   local ppdf,nfecha
   local mensaje:='LAS COPIAS DE ESTOS ALBARANES ESTAN DISPONIBLES EN NUESTRA PAGINA WEB'
   local treten
   Publicas:aini:=1
   Publicas:aFin:=99999
   (aAlias[22])->(OrdSetFocus("numero"))
   (aAlias[24])->(OrdSetFocus("factura"))
//------------------------
   DEFINE DIALOG oDlg RESOURCE "DESDER" BRUSH Publicas:oBrush1 TRANSPARENT Font Publicas:oWPpal:ofont
  for i = 10 to 11
    REDEFINE SAY oSay ID i OF oDlg COLOR CLR_GREEN
  next i
   REDEFINE get oini VAR Publicas:aini ID 101 OF oDlg picture "@E 99999" 
   REDEFINE get ofin VAR Publicas:aFin ID 102 OF oDlg picture "@E 99999"
   REDEFINE RADIO oRadio VAR nOpcion ID 103,104 OF oDlg
   REDEFINE CHECKBOX lpdf  ID 200 OF oDlg on change oDlg:Update() WHEN lnpdf=.F. .and. tpdf=.F.
   REDEFINE CHECKBOX lnpdf ID 201 OF oDlg on change oDlg:Update() WHEN lpdf =.F. .and. tpdf=.F.
   REDEFINE CHECKBOX tpdf ID 202 OF oDlg on change oDlg:Update() WHEN lpdf =.F. .and. lnpdf=.F.
   REDEFINE BUTTON oboton ID 550 OF oDlg PROMPT "Aceptar" ;
                                ACTION (Grabar := .T.,oDlg:End())
   REDEFINE BUTTON oboton1 ID 551 OF oDlg PROMPT "Cancelar" ;
                                ACTION (Grabar := .F.,oDlg:End()) CANCEL
   ACTIVATE DIALOG oDlg CENTERED

if grabar
  Publicas:cIni:=padl(Publicas:aini,5,"0")
  Publicas:cFin:=padl(Publicas:aFin,5,"0")
  IF !(aAlias[22])->(dbseek(Publicas:cIni))
      msginfo("no lo encuentro")
  ELSE
   lmode:=iif (nOpcion=1,.F.,.T.)
  if lpdf=.T. .or. tpdf=.T.
   (aAlias[22])->(Ordsetfocus("numero"))   
   (aAlias[22])->(oRDscope(0,(Publicas:cIni)))
   (aAlias[22])->(oRDscope(1,(Publicas:cFin)))
   imppdf(tipo,aAlias,lpdf,tpdf)
   (aAlias[22])->(oRDscope(0,Nil))
   (aAlias[22])->(oRDscope(1,Nil))
  else
   (aAlias[22])->(DbSetfilter( {|| (aAlias[22])->numero >= Publicas:cIni .and. (aAlias[22])->numero <= Publicas:cFin },'(aAlias[22])->numero >= Publicas:cIni .and. (aAlias[22])->numero <= Publicas:cFin') )
   (aAlias[22])->(Ordsetfocus("ruta"))
   (aAlias[22])->(Dbgobottom())
   (aAlias[22])->(Dbgotop())
   oPrn := PrintBegin("Imprimiendo", .T., lMode,, .F. ) 
      if Empty( oPrn:hDC )
         MsgStop( "Impresora no preparada !" )
         return nil
      endif
   DEFINE FONT oFont1 NAME "COURIER NEW" SIZE 0,-9               OF oPrn
   DEFINE FONT oFont2 NAME "COURIER NEW" SIZE 0,-12 BOLD         OF oPrn
   DEFINE FONT oFont3 NAME "COURIER NEW" SIZE 0,-12 BOLD ITALIC  OF oPrn
   DEFINE FONT oFont4 NAME "COURIER NEW" SIZE 0,-9  BOLD         OF oPrN
   DEFINE FONT oFont5 NAME "COURIER NEW" SIZE 0,-10 BOLD         OF oPrN
   DEFINE FONT oFont6 NAME "ARIAL" SIZE 0,-11              OF oPrN
   DEFINE FONT oFont7 NAME "Arial" SIZE 0,-36 BOLD OF oPrN
   DEFINE PEN oPen1 Width 3 COLOR CLR_BLUE
   DEFINE PEN oPen2 Width 8 COLOR CLR_BLUE
   DEFINE BRUSH oBrush COLOR CLR_LIGHTGRAY
   DEFINE BRUSH oBrush1 COLOR CLR_WHITE
   OpRN:Setportrait()
   oPrn:SetPage( 9)      // Selecciono el Formato A4
   aTamano:=oPrn:GetPhysize()   // Indica el Tama¤o del papel en mm. ( ancho x largo )
   nWidth :=oPrn:nHorzRes()
   nHeight:=oPrn:nVertRes()
     do while !(aAlias[22])->(Eof())
             ccodpro   :=(aAlias[22])->codigo
        (aAlias[21])->(dbseek(ccodpro))
        ppdf      :=(aAlias[21])->pdf
           if lnpdf=.T. .and. ppdf=.T. // if de pdf
        (aAlias[22])->(Dbskip())
        loop
       else
       if swp=1
             hoja:=hoja+1
             swp:=0
            else
        primero:=space(1)
             hoja:=1
             nbase:=0
             nfecha    :=dtoc((aAlias[22])->fecha)
*            ccodpro   :=(aAlias[22])->codigo
        cvenci    :=dtoc((aAlias[22])->venci)
        xdatos    :=alltrim((aAlias[22])->Datos)
        (aAlias[4])->(Dbseek((aAlias[22])->empresa))
        cnombre   :=alltrim((aAlias[4])->nombre)
             cnif      :="N.I.F. "+alltrim((aAlias[4])->nif)
        cDomip    :=alltrim((aAlias[4])->domicilio)
        cPoblap   :=alltrim((aAlias[4])->codpos)+'-'+alltrim((aAlias[4])->poblacion)+'-'+'('+alltrim((aAlias[4])->provin)+')'
             cTelfax   :='Telf. '+alltrim((aAlias[4])->Telefono)+'-'+'Fax '+alltrim((aAlias[4])->Fax)
        cemail    :='e-mail: '+alltrim((aAlias[4])->email)
        cweb      :='Página web: '+alltrim((aAlias[4])->web)
*        (aAlias[21])->(dbseek(ccodpro))
*        ppdf      :=(aAlias[21])->pdf
        corden    :=(aAlias[21])->ordenf
             cnompro   :=trim((aAlias[21])->nombre)
             cdirpro   :=trim((aAlias[21])->calle)
             cnifpro   :=(aAlias[21])->dni
             npiva     :=transform((aAlias[22])->iva,"@Z 99.99")
             ccp       :=(aAlias[21])->cp
             cPoblapro :=trim((aAlias[21])->pobla)
             cProvinpro:=trim((aAlias[21])->provin)
             cfpago    :=iif((aAlias[21])->dpago=1,"Giro","Reposicion")
             domiban   :=(aAlias[21])->entidad+space(1)+(aAlias[21])->agencia+space(1)+;
             (aAlias[21])->dc+space(1)+substr((aAlias[21])->cuenta,1,6)+"****"
        xcopia    :=iif((aAlias[21])->copia='S' .and. pinta=.F.,.T.,.F.)
             cliqui:=(aAlias[22])->numero
      if corden='A'
        (aAlias[24])->(Ordsetfocus('facturaal'))
             (aAlias[24])->(dbseek(cliqui))
      else
        (aAlias[24])->(Ordsetfocus('factura'))
             (aAlias[24])->(dbseek(cliqui))
      endif
     endif
      PAGE

      if tipo=2
             CmtToPixel( 1.5,1, 7, 2.5, oPrn )
             oPrn:Saybitmap( Publicas:nLiz, Publicas:nCiz,Publicas:rlogo,Publicas:nLDe,Publicas:nCDe)
        CmtToPixel( 3.7,4.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,cnombre,oFont6,,RGB(3,35,195),,2 )
             CmtToPixel( 4.1,4.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,cnif,oFont6,,,,2 )
        CmtToPixel( 4.5,4.5, 0, 0, oPrn )
        oPrn:Say( Publicas:nLiz, Publicas:nCiz,cDomip,oFont6,,,,2 )
             CmtToPixel( 4.9,4.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,cPoblap,oFont6,,,,2 )
             CmtToPixel( 5.6,4.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,cTelfax,oFont6,,RGB(131,186,247),,2 )
             CmtToPixel( 6,4.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,cemail,oFont6,,,,2 )
             CmtToPixel( 6.4,4.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,cweb,oFont6,,,,2 )
If Pinta
    CajaRound(12,                            ;
              0.5,                            ;
              17,        ;
              2.3 -0.1,100,100,oPrn,oPen2,oBrush )
             CmtToPixel( 0.5,14.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"COPIA",oFont7,,RGB(0,0,0),,2 )
Endif
    CajaRound(9.5,                            ;
              4 ,                            ;
              19.9,        ;
              7.8 -0.1,100,100,oPrn,oPen2,oBrush1 )
    CajaRound(0.6,                            ;
              8.1,                            ;
              19.9,        ;
              9.5 -0.1,50,50,oPrn,oPen2,oBrush1 )
    CajaRound(0.6,                            ;
              9.6,                            ;
              19.9,        ;
              28.3 -0.1,50,50,oPrn,oPen2,oBrush1 )
        CmtToPixel( 9.6,2.7, 26.2, 2.7, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 9.6,10, 26.2, 10, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 9.6,13, 26.2, 13, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 9.6,15.5, 26.2, 15.5, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 9.6,17.5, 26.2, 17.5, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 26.2,0.6, 26.2, 19.9, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 26.7,0.6, 26.7, 19.9, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 8.5,0.6, 8.5, 19.9, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 10.2,0.6, 10.2, 19.9, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 8.1,2.7, 9.4, 2.7, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 8.1,5, 9.4, 5, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 8.1,8.5, 9.4, 8.5, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 8.1,12, 9.4, 12, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 8.1,18.5, 9.4, 18.5, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 8.1,1, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"CLIENTE",oFont5,,RGB(0,0,0) )
             CmtToPixel( 8.1,2.9, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"NºFACTURA",oFont5 )
             CmtToPixel( 8.1,6, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"FECHA",oFont5 )
             CmtToPixel( 8.1,9, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"FORMA DE PAGO",oFont5 )
             CmtToPixel( 8.1,13.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"DOMICILIO DE COBRO",oFont5 )
             CmtToPixel( 8.1,18.6, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"C.REP.",oFont5 )
             CmtToPixel( 9.8,1, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"FECHA",oFont5 )
             CmtToPixel( 9.8,3.1, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"(C)CONSIGNATARIO o (R)REMITENTE",oFont5 )
             CmtToPixel( 9.8,10.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"EXPEDICION",oFont5 )
             CmtToPixel( 9.8,13.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"BULTOS",oFont5 )
             CmtToPixel( 9.8,16, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"KILOS",oFont5 )
             CmtToPixel( 9.8,18, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"IMPORTE",oFont5 )
          endif
//-------- CABECERA DEL RECIBO
           // impresion de los textos
             if ccodpro="99999"
             CmtToPixel( 4.5,10, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"CLIENTES DE CONTADO",oFont3 )
        else
             CmtToPixel( 5,10, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,cnompro,oFont3 )
             endif
        CmtToPixel( 5.5,10, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,cdirpro,oFont3 )
             CmtToPixel( 6,10, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,cPoblapro,oFont3 )
             CmtToPixel( 6.5,10, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,ccp+space(2)+cProvinpro,oFont3 )
             CmtToPixel( 7,10, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"C.I.F./N.I.F...:"+cnifpro,oFont3 )
             CmtToPixel( 4,10, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,strcapfirst(xDatos),oFont3 )
             CmtToPixel( 8.7,1, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,+ccodpro,oFont4 )
             CmtToPixel( 8.7,6, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,nfecha,oFont4 )
             CmtToPixel( 8.7,3.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,cliqui,oFont4 )
             CmtToPixel( 8.7,9, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,cfpago+iif(cfpago='Giro',' '+cvenci,' '),oFont4 )
             CmtToPixel( 8.7,12.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,domiban,oFont4 )
             CmtToPixel( 8.7,19.3, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,(aAlias[22])->ruta,oFont4 )
           if (aAlias[24])->kkilos<> 0 .and. tipo = 1
             CmtToPixel( 9.7,16, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,'KILOS',oFont5 )
      endif
        liz:=10.4
       do while .t.
             nbaseimpo:=transform((aAlias[24])->baseimpo,"@Z 99,999.99")
        if (aAlias[24])->Bk = 'B'
                nneto    :=transform((aAlias[24])->kilos,"@Z 999,999")
           nkgs     :=' '
        else
                nneto    :=transform((aAlias[24])->kkilos,"@Z 999,999")
           nkgs     :=transform((aAlias[24])->kilos,"@Z 999,999")
        endif
        if (aAlias[24])->cr<>primero .and. (aAlias[24])->obse<>.T.
        primero:=(aAlias[24])->cr
        if (aAlias[24])->cr='C'
                pone:='--- RECIBIDOS ---'
              else
                pone:='--- ENVIADOS  ---'
             endif
           CmtToPixel( liz,3, 0, 0, oPrn )
                oPrn:Say( Publicas:nLiz, Publicas:nCiz,pone,oFont5,,CLR_HRED)
      liz+=0.6
             endif
             nalbaran :=(aAlias[24])->albaran
        textoc:=(aAlias[24])->observaci
             CmtToPixel( liz,1, 0, 0, oPrn )
        oPrn:Say( Publicas:nLiz, Publicas:nCiz,dtoc((aAlias[24])->fecha),oFont1,,RGB(0,0,0))
            if (aAlias[24])->obse=.T.
               nLines   := MlCount(textoc,35)
             FOR nFor := 1 TO nLines
               cLine := MemoLine(textoc, 35, nFor)
               CmtToPixel( liz,3, 0, 0, oPrn )
               oPrn:Say(Publicas:nLiz, Publicas:nCiz,cLine,oFont1)
          liz+=0.3
               NEXT
       else
        CmtToPixel( liz,3, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,iif((aAlias[24])->datos1=space(40),(aAlias[24])->prou,(aAlias[24])->datos1),oFont1 )
            endif
        CmtToPixel( liz,12, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,nalbaran,oFont1,,,,1 )
             CmtToPixel( liz,15, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,nneto,oFont1,,,,1 )
             CmtToPixel( liz,17, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,nkgs,oFont1,,,,1 )
             CmtToPixel( liz,19.8, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,nbaseimpo,oFont1,,,,1 )
             nbase+=(aAlias[24])->baseimpo
             liz+=0.3
             (aAlias[24])->(dbskip())
              if (aAlias[24])->factura<> cliqui .or. (aAlias[24])->(eof())
                exit
              endif
              if liz >= lineas
           swp:=1
                exit
              endif
     enddo
         if swp=1
                 CmtToPixel( 26.3,15, 0, 0, oPrn )
                 oPrn:Say( Publicas:nLiz, Publicas:nCiz,"IMPORTE PARCIAL",oFont5 )
             CmtToPixel( 27.5,19.8, 0, 0, oPrn )
                 oPrn:Say( Publicas:nLiz, Publicas:nCiz,transform(nbase,"@Z 99,999.99"),oFont3,,,,1 )
                 liz:=liz+3
                 CmtToPixel( liz,1, 0, 0, oPrn )
                 oPrn:Say( Publicas:nLiz, Publicas:nCiz,"Sigue en otra hoja ............",oFont5,,,,1 )
           ENDPAGE
                 loop
               endif
             tbase     :=transform(nbase,"@Z 99,999.99")
        descuento :=(aAlias[22])->descuento
             tdescuento:=transform(descuento ,"@Z 99,999.99")
        tseguro   :=transform((aAlias[22])->seguro ,"@Z 99,999.99")
             tbaseimpo :=transform((aAlias[22])->base ,"@Z 99,999.99")
             timportiva:=transform((aAlias[22])->importiva,"@Z 99,999.99")
             treten    :=transform((aAlias[22])->retencion,"@Z 99,999.99")               
             tliquido  :=transform((aAlias[22])->total,"@Z 99,999.99")
        if tipo=1
             CmtToPixel( 24.5,3, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,tbase,oFont1,,,,1 )
             CmtToPixel( 24.5,6, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,tseguro,oFont1,,,,1 )
             CmtToPixel( 24.5,9, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,tbaseimpo,oFont1,,,,1 )
             CmtToPixel( 24.5,10.3, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,npiva,oFont1,,,,1 )
             CmtToPixel( 24.5,13, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,timportiva,oFont1,,,,1 )
             CmtToPixel( 24.5,19.8, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,tliquido,oFont3,,,,1 )
             CmtToPixel( 26,19.8, 0, 0, oPrn )
        endif
        if tipo=2
             if descuento=0
             CmtToPixel( 26.2,3.7, 28.2, 3.7, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 26.2,6.5, 28.2, 6.5, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 26.2,9.2, 28.2, 9.2, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 26.2,10.5, 28.2, 10.5, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 26.2,12.5, 28.2, 12.5, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 26.2,15.5, 28.2, 15.5, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
        CmtToPixel( 26.3,1.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"IMPORTE",oFont5 )
             CmtToPixel( 26.3,4.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"SEGURO",oFont5 )
             CmtToPixel( 26.3,6.7, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"B.IMPONIBLE",oFont5 )
             CmtToPixel( 26.3,9.3, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"%IVA.",oFont5 )
             CmtToPixel( 26.3,11, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"I.V.A.",oFont5 )
             CmtToPixel( 26.3,13, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"RETENCION",oFont5 )
        CmtToPixel( 26.3,15.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz," IMPORTE TOTAL",oFont5 )
        CmtToPixel( 27.5,3, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,tbase,oFont1,,,,1 )
             CmtToPixel( 27.5,6, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,tseguro,oFont1,,,,1 )
             CmtToPixel( 27.5,9, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,tbaseimpo,oFont1,,,,1 )
             CmtToPixel( 27.5,10.3, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,npiva,oFont1,,,,1 )
             CmtToPixel( 27.5,12.3, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,timportiva,oFont1,,,,1 )
             CmtToPixel( 27.5,15.3, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,treten,oFont1,,,,1 )
             CmtToPixel( 27.5,19.8, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,tliquido,oFont3,,,,1 )
             CmtToPixel( 28.5,10.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,mensaje,oFont3,,RGB(254,48,0),,2 )
        else
             CmtToPixel( 26.2,3.7, 28.2, 3.7, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 26.2,6, 28.2, 6, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 26.2,8, 28.2, 8, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 26.2,10.5, 28.2, 10.5, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 26.2,12, 28.2, 12, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 26.2,14, 28.2, 14, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
             CmtToPixel( 26.2,16.5, 28.2, 16.5, oPrn )
             oPrn:line( Publicas:nLiz, Publicas:nCiz,Publicas:nLDe,Publicas:nCDe,open1 )
        CmtToPixel( 26.3,1.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"IMPORTE",oFont5 )
             CmtToPixel( 26.3,4, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"DESCUENTO",oFont5 )
             CmtToPixel( 26.3,6.4, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"SEGURO",oFont5 )
             CmtToPixel( 26.3,8.1, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"B.IMPONIBLE",oFont5 )
             CmtToPixel( 26.3,10.8, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"%IVA.",oFont5 )
             CmtToPixel( 26.3,12.4, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"I.V.A.",oFont5 )
             CmtToPixel( 26.3,14.2, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,"RETENCION",oFont5 )
             CmtToPixel( 26.3,16.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz," IMPORTE TOTAL",oFont5 )
        CmtToPixel( 27.5,3, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,tbase,oFont1,,,,1 )
             CmtToPixel( 27.5,5.8, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,tdescuento,oFont1,,,,1 )
             CmtToPixel( 27.5,7.8, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,tseguro,oFont1,,,,1 )
             CmtToPixel( 27.5,10.3, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,tbaseimpo,oFont1,,,,1 )
             CmtToPixel( 27.5,11.8, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,npiva,oFont1,,,,1 )
             CmtToPixel( 27.5,13.8, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,timportiva,oFont1,,,,1 )
             CmtToPixel( 27.5,15.8, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,treten,oFont1,,,,1 )
             CmtToPixel( 27.5,19.8, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,tliquido,oFont3,,,,1 )
             CmtToPixel( 28.5,10.5, 0, 0, oPrn )
             oPrn:Say( Publicas:nLiz, Publicas:nCiz,mensaje,oFont3,,RGB(254,48,0),,2 )
        endif
        endif
        pone:=space(1)
        pinta:=.F.
      ENDPAGE
             if xcopia
        pinta:=.T.
        loop
        endif
       endif   // endif de pdf
             (aAlias[22])->(Dbskip())
          if (aAlias[22])->(eof())
          exit
          endif
      sysrefresh()
     enddo
   ENDPRINT
   oFont2:End()
   oFont1:End()
   oFont3:End()
   oFont4:End()
   oFont5:End()
   oFont6:End()
   oFont7:End()
   oPen1:End()
   oPen2:End()
   oBrush:End()
  (aAlias[22])->(Dbsetfilter())
  endif
endif
endif
// (aAlias[22])->(Dbsetfilter())
(aAlias[22])->(Ordsetfocus(cindi1))
(aAlias[24])->(Ordsetfocus(cindi))
return nil

//----------------------------------------------------------------------------//


Saludos

Jose Luis
JoseLuis
 
Posts: 428
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Postby Antonio Linares » Tue Nov 04, 2008 1:29 pm

Jose Luis,

Usas Harbour ó xHarbour ? Que versión ?

Te genera algún fichero log ?

Ten en cuenta que la gestión de la memoria es algo propio de Harbour/xharbour salvo que se esté haciendo algo mal en el código.

Has cambiado algo recientemente en ese código ?
regards, saludos

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

Postby JoseLuis » Tue Nov 04, 2008 2:00 pm

Antonio

Uso xharbour, y como digo en el post, este error me da con la version 8.10 , ya que con la 2.7 funciona perfectamente.

No genera ningun log, sólamente la ventana de aviso que he dicho anteriormente

Saludos

Jose Luis
JoseLuis
 
Posts: 428
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Postby Antonio Linares » Tue Nov 04, 2008 5:28 pm

Jose Luis,

Podrías construirlo con Harbour ?

Harbour nos proporcionará información acerca de desde donde se ha solicitado ese "realocateo" de memoria.
regards, saludos

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

Postby AHF » Thu Nov 06, 2008 8:48 am

I've got the same problem.

Does sysrefresh work in the same way?

Antonio
AHF
 
Posts: 838
Joined: Fri Feb 10, 2006 12:14 pm

Postby Antonio Linares » Thu Nov 06, 2008 8:55 am

Antonio,

Do you have a way to reproduce it, in a small example ?

>
UNRECOVERABLE ERROR 9009:
hb_xrealloc can't reallocate memory
>

FWH does not manage the memory. Harbour/xHarbour do it.

If we find a way to reproduce it here then we can try to find whats going on.
regards, saludos

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

Postby Carlos Mora » Thu Nov 06, 2008 9:39 am

José Luis,

JoseLuis wrote: este error me da con la version 8.10 , ya que con la 2.7 funciona perfectamente.


Probablemente estés usando un xHarbour diferente, ya que creo que FW 8.10 es para la version mas uneva de xHarbour y que ese xHarbour no te vale para la 2.7.

Prueba usando un xHarbour de setiembre. Yo no he tenido ese problema pq uso Harbour, pero he visto en otros foros problemas similares haciendo cosas diferentes, como consultas SQL y cosas que trastean con la memoria.

Un saludo,

Carlos.
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby JoseLuis » Tue Nov 25, 2008 10:25 pm

Antonio

He intentado recompilar todo para Harbour como me indicaste, y he desistido, ya que tengo todo estructurado para xHarbour, y si intento compilar con Harbour, empiezan los problemas de todo tipo.

El error que menciono, se da sólo cuando imprimo las facturas con preview. Si imprimo a impresora o a pdf, va correctamente.

No obstante si la impresión por pantalla es de sólo unas pocas facturas (8 o 10), tampoco falla. El problema es que tengo que imprimir por pantalla unas 400 facturas.

Repito, todo esto funciona correctamente con la version 2.7

Segun el fuente que he posteado, que puede haber dentro del do while... enddo que va cargando la memoria?, ya que cada vez que hace éste bucle es una factura.

Carlos.

La version de xharbour que utilizo es la correcta para fw8.10.


Saludos

Jose Luis
JoseLuis
 
Posts: 428
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Postby Antonio Linares » Tue Nov 25, 2008 11:21 pm

Jose Luis,

Recientemente tuve la "suerte" de encontrarme con un bug de programacion que finalmente generaba un error "hb_xrealloc can't reallocate memory" y descubri que se generaba por intentar crear una cadena realmente enorme, a base de ir anadiendole mas y mas cadenas.

Haz lo siguiente:

Antes de que llegues a las 400 visualizaciones, genera un error (por ejemplo llamando directamente a X++) y revisa en el error.log si encuentras una variable tipo cadena que sea realmente enorme. El fallo viene por ahi.
regards, saludos

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

Postby JoseLuis » Tue Nov 25, 2008 11:24 pm

Antonio

De acuerdo, mañana me pongo, lo que no entiendo es porqué con anteriores versiones no pasaba.

Saludos

Jose Luis
JoseLuis
 
Posts: 428
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Postby Antonio Linares » Tue Nov 25, 2008 11:36 pm

Jose Luis,

Este es un ejemplo que reproduce el error:
Code: Select all  Expand view  RUN
function Main()

   local cText := Space( 1000000 )
   local n
   
   for n = 1 to 1000
      cText += cText
   next   

return nil
regards, saludos

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

Postby Antonio Linares » Tue Nov 25, 2008 11:37 pm

Jose Luis,

> lo que no entiendo es porqué con anteriores versiones no pasaba

Cuando consigamos aislar el origen de esa cadena que crece, entenderemos porque esta ocurriendo.
regards, saludos

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

Postby Antonio Linares » Tue Nov 25, 2008 11:56 pm

Pensando en este error, supuse que se trata porque en 32 bits no podemos usar un bloque de memoria superior a 4 gigas, asi que he probado este ejemplo:
Code: Select all  Expand view  RUN
function Main()

   local cText := Space( 1024 * 1024 * 1024 )
   
   MsgInfo( "1 giga" )
   
   cText += cText

   MsgInfo( "2 gigas" )

return nil

y no llega a poder manejar 2 gigas, lo cual me sorprende. Salvo que me este equivocando.
regards, saludos

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

Postby Antonio Linares » Wed Nov 26, 2008 12:02 am

Parece que es correcto mi calculo, pues un giga es 2 elevado a 30:

MsgInfo( 2 ^ 30 == ( 1024 * 1024 * 1024 ) )

muestra .T.

Luego por alguna razon que habra que comentar en la lista de desarrollo de Harbour, no conseguimos llegar a los 2 gigas.
regards, saludos

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

Postby triumvirato » Wed Nov 26, 2008 7:58 am

Esto me recuerda bastante a los problemas que tuvimos con OrdWildSeek para generar un índice, en las comparaciones con SubNtx():

http://67.222.39.232/forums/viewtopic.php?t=12620&postdays=0&postorder=asc&highlight=subntx&start=15

triumvirato wrote:Pues con OrdWildSeek(), se llega a producir un error, imagino que debido al colapso de memoria¿?... (no sé si digo una burrada, pero es lo que parece), arrojando el siguiente error:

----------------------------------------
Total 16036824 allocations (5334271 reallocation), of which 16036823 freed.
Highest total allocated 6900507 bytes in 5073 blocks.
WARNING! Memory allocated but not released: 40 bytes (1 blocks)
source\vm\fm.c:778: HB_TR_ERROR Block 1 00B0B24C (size 40) ORDLISTADD(0), "4CB2B
0004CB2B000E0AD44000100020002000000000000000A000000010000000000000000000000"

Hasta este error, llevábamos 38 segundos (no sé si efectivos de búsqueda o como causa que luego arroja), con índice CDX, por lo que no creo que en velocidad lleguemos a igualar a SubNtx()

Saludos!
triumvirato
 
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 4 guests