como cargar una selección de xbrowse en un array SOLUCIONADO

Post Reply
surGom
Posts: 624
Joined: Wed Oct 19, 2005 12:03 pm
Contact:

como cargar una selección de xbrowse en un array SOLUCIONADO

Post by surGom »

Hola otra vez recurro a Uds porque no puedo solucionar este código
sigo con el mismo ejemplo, lo que no puedo es cargar la selección del xbrowse en un array

Code: Select all

function asocio1(aElectro, nclia)
local oFac, odlg1
local z , n
local aItems := array(0)
 aFacpago := Array(0)



if !pasaje("factura");return nil;endif
   database oFac
   oFac:setorder(3)


   oFac:ordscope(0,nclia)
   oFac:ordscope(1,nclia)

   //oFac:gotop()   */
   //  oFac:setfilter("paga" != "S" .and. "nota" != "C" .)

   //FW_DbfToArray ( cFieldList, bFor, bWhile, nNext, nRec, lRest, aData )


   //aRows := FW_DbfToArray( "DATE,TERMINAL,VALUE", { || FIELD->DATE = dDate } )
   aItems := fw_dbftoarray("fechida,nota,nrofac,Importe,tipofac",{||  paga != "S" .and. nota != "C"})
   oFac:deactivate()



   xbrNumFormat( "E", .T. )

   DEFINE DIALOG odlg1 resource "DIA_ASOCIO1"

   redefine xBrowse oBrw Of odlg1 array aItems ;               //             Columns 'fechida','nrofac','Importe'  ;
             columns {1,2,3,4};
             Headers 'Fecha','nota','Número', 'Abona';
             JUSTIFY  , .T., .T.,.T.;
             ColSizes 80,40,120,180 id 101  UpDate Cell AutoSort



    With Object oBrw:InsCol(1)
        :bEditValue    := { || AScan( oBrw:aSelected, oBrw:BookMark ) > 0 }
        :SetCheck()
        :nHeadBmpNo    := { || If( Len( oBrw:aSelected ) == oBrw:nLen, 1, 2 ) }
    End

   WITH OBJECT oBrw
      :lDisplayZeros := .F.
      :nMarqueeStyle := MARQSTYLE_HIGHLROWRC
      :nStretchCol := STRETCHCOL_WIDEST
      :bClrStd := { || { CLR_BLACK, Colores(oBrw:aRow[2]) } }
      :lColDividerComplete := .T.
      :lAllowColHiding := .F.
      :lRecordSelector := .F.

   END WITH





    oBrw:bLClicked := { |r,c,f,oBrw| If( oBrw:MouseColPos( c ) == 1 , ;
                   If( ( f := AScan( oBrw:aSelected, oBrw:BookMark ) ) == 0, ;
                     AAdd( oBrw:aSelected, oBrw:BookMark ), ;
                     ADel( oBrw:aSelected, f, .t. ) ), Nil ), ;
                     oBrw:RefreshCurrent() }

   ACTIVATE DIALOG odlg1 ON INIT oBrw:gobottom()

  
if LEN(oBrw:aSelected) > 0
   ? Len(oBrw:aselected)                                 (1)

FOR EACH z IN (oBrw:aSelected)
   ? oBrw:aArrayData[z,1]                                (2)
   ? oBrw:aArrayData[z,2] 
 

   AAdd(aFacpago,{oBrw:aArrayData[z,1] ,oBrw:aArrayData[z,2],oBrw:aArrayData[z,3],oBrw:aArrayData[z,4],oBrw:aArrayData[z,5]})

NEXT
 ? Len(aFacpago)                                 (3)
   FOR EACH z IN aFacpago
      ? aFacpago[z,1]                             (4)
   NEXT   
endif       
return aFacpago

(1) muestra correctamente las filas seleccionados
(2) muestra correctamente los datos recorridos
(3) muestra correctamente la cantidad de elementos del array
(4) acá da este error

Error description: Error BASE/1068 Error de argumento: acceso al array
Args:
[ 1] = A { ... } length: 2
[ 2] = A { ... } length: 4

Stack Calls
===========
Called from: megandc1.prg => ASOCIO1( 2005 )
Called from: megandc1.prg => FACELECTRO( 1543 )

Indudablemente no entiendo como trabaja oBrw:aArrayData

Gracias por su atención

Luis
Last edited by surGom on Mon May 25, 2020 2:11 am, edited 1 time in total.
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: como cargar una selección de xbrowse en un array

Post by cnavarro »

Prueba a imprimir, en lugar de
? aFacpago[z,1]
Pon
? z[ 1 ]
Qué te aparece?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
surGom
Posts: 624
Joined: Wed Oct 19, 2005 12:03 pm
Contact:

Re: como cargar una selección de xbrowse en un array

Post by surGom »

queda así

Code: Select all

   aFacpago :=  asocio1(aElectro,aCliente:nclia)
   for each z in aFacpago
      ?  z[1]                                                (1)
   next


/////////
function asocio1(aElectro, nclia)

if LEN(oBrw:aSelected) > 0
 

FOR  z = 1 to len(oBrw:aSelected)
 
 
   AAdd(aFacpago,{oBrw:aArrayData[z,1] ,oBrw:aArrayData[z,2],oBrw:aArrayData[z,3],oBrw:aArrayData[z,4],oBrw:aArrayData[z,5]})

NEXT
 
   FOR z = 1 to Len(aFacpago)                       (2)
       aFacpago[z,  1 ] 
   NEXT
endif
return  aFacpago


 
(1) es La linea 1544

Error occurred at: 24/05/2020, 22:42:39
Error description: Error BASE/1132 Error de rango: acceso al array
Args:
[ 1] = U
[ 2] = N 7362366

Stack Calls
===========
Called from: => __DBGVMVARLGET( 0 )
Called from: .\source\function\HARBOUR.PRG => HB_DBG_VMVARLGET( 9 )
Called from: .\source\function\HARBOUR.PRG => GETLOCAL( 197 )
Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG( 275 )
Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS( 23 )
Called from: megandc1.prg => FACELECTRO( 1544 )
Called from: megandc1.prg => (b)NDEBITO( 252 )

(2) Aquí funciona

??????
surGom
Posts: 624
Joined: Wed Oct 19, 2005 12:03 pm
Contact:

Re: como cargar una selección de xbrowse en un array

Post by surGom »

No funciona porque no había puesto

return aFacpago
Post Reply