Page 1 of 2

Error reallocate memory

PostPosted: Tue Nov 04, 2008 1:06 pm
by JoseLuis
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
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

PostPosted: Tue Nov 04, 2008 1:29 pm
by Antonio Linares
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 ?

PostPosted: Tue Nov 04, 2008 2:00 pm
by JoseLuis
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

PostPosted: Tue Nov 04, 2008 5:28 pm
by Antonio Linares
Jose Luis,

Podrías construirlo con Harbour ?

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

PostPosted: Thu Nov 06, 2008 8:48 am
by AHF
I've got the same problem.

Does sysrefresh work in the same way?

Antonio

PostPosted: Thu Nov 06, 2008 8:55 am
by Antonio Linares
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.

PostPosted: Thu Nov 06, 2008 9:39 am
by Carlos Mora
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.

PostPosted: Tue Nov 25, 2008 10:25 pm
by JoseLuis
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

PostPosted: Tue Nov 25, 2008 11:21 pm
by Antonio Linares
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.

PostPosted: Tue Nov 25, 2008 11:24 pm
by JoseLuis
Antonio

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

Saludos

Jose Luis

PostPosted: Tue Nov 25, 2008 11:36 pm
by Antonio Linares
Jose Luis,

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

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

return nil

PostPosted: Tue Nov 25, 2008 11:37 pm
by Antonio Linares
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.

PostPosted: Tue Nov 25, 2008 11:56 pm
by Antonio Linares
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
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.

PostPosted: Wed Nov 26, 2008 12:02 am
by Antonio Linares
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.

PostPosted: Wed Nov 26, 2008 7:58 am
by triumvirato
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!