Page 1 of 1

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

Posted: Mon May 25, 2020 12:20 am
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

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

Posted: Mon May 25, 2020 12:49 am
by cnavarro
Prueba a imprimir, en lugar de
? aFacpago[z,1]
Pon
? z[ 1 ]
Qué te aparece?

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

Posted: Mon May 25, 2020 2:00 am
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

??????

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

Posted: Mon May 25, 2020 2:11 am
by surGom
No funciona porque no había puesto

return aFacpago