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

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

Postby surGom » Mon May 25, 2020 12:20 am

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  Expand view  RUN

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.
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

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

Postby cnavarro » Mon May 25, 2020 12:49 am

Prueba a imprimir, en lugar de
? aFacpago[z,1]


Pon
? z[ 1 ]

Qué te aparece?
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Postby surGom » Mon May 25, 2020 2:00 am

queda así

Code: Select all  Expand view  RUN

   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: 640
Joined: Wed Oct 19, 2005 12:03 pm

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

Postby surGom » Mon May 25, 2020 2:11 am

No funciona porque no había puesto

return aFacpago
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 48 guests