Browse com array
Enviado: 07 Jul 2009 14:14
Como faço pra saber qual posição do array eu estou qdo teclo um ENTER, pro exemplo, num browse com array 
abc
abc
Código: Selecionar todos
**********************
FUNCTION Gera_lote_NFP
**********************
PRIVATE oGroup1, oGroup2, oBrowse1, oBrowse2, oButtonex3, oButtonex4,
oButtonex2 ;
, oButtonex1, oDatabase1
PRIVATE oSERIE, vSERIE := "1"
PRIVATE aITENS_SERIE := {}
IF eSERIE_NF > 1 // variavel publica de quantas series esta sendo usado
FOR x:=1 TO eSERIE_NF
AADD(aITENS_SERIE, ALLTRIM(STR(x)) )
NEXT
ELSE
AADD(aITENS_SERIE, vSERIE )
ENDIF
Private aARRAY_LOTE := {{0," " ,DATE()}}
//GravaLog("GERAÇÃO DE ARQUIVO DE LOTE DA NOTA FISCAL PAULISTA")
DBCLOSEALL()
USE CAG_NOT ALIAS CAG_NOT SHARED
SELE CAG_NOT
INIT DIALOG oDlg TITLE "Geração de Lote da Nota Fiscal Paulista" ;
AT 350,134 SIZE 676,482 ;
FONT HFont():Add( '',0,-13,400,,,) CLIPPER NOEXIT ;
ON INIT {||
Excluir_NF_LOTE(oBrowse1:nCurrent),Atualiza_FiltroNF3(9,vSERIE,oBrowse1),.T.}
;
STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+WS_MINIMIZEBOX+DS_CENTER
@ 10,430 say "Para Selecionar Varias Notas, preecione a Tecla CTRL e
marque com o Mouse" SIZE 300, 25;
FONT HFont():Add( '',0,-11,400,,,) ;
COLOR x_BLUE
@ 10 ,450 SAY LNOTA_AUTO CAPTION "Selecione a Serie das Notas:" SIZE
150,22 TRANSPARENT
@ 200,450 GET COMBOBOX oSERIE VAR vSERIE ITEMS aITENS_SERIE SIZE 50,22
TEXT;
ON CHANGE { || Atualiza_FiltroNF3(,vSERIE,oBrowse1) };
Style WS_TABSTOP;
TOOLTIP "Informe Qual serie de Notas você deseja Usar"
@ 16,29 BROWSE oBrowse1 DATABASE OF oGroup1 SIZE 350,379 ;
STYLE WS_TABSTOP ;
ON CLICK {|o,key|
ADD_NF_LOTE(oBrowse1:aSelected),Atualiza_FiltroNF2(oBrowse2) };
FONT HFont():Add( '',0,-11,400,,,);
MULTISELECT ;
ON POSCHANGE {|| SetFocus(oBrowse1:handle ) }
oBrowse1:bKeyDown := {|o,key| BrowseLoteNF(o, key ) }
// CREATE oBrowse1 // SCRIPT GENARATE BY DESIGNER
oBrowse1:aColumns := {}
oBrowse1:nHeadRows:= 1
oBrowse1:nFootRows:= 0
oBrowse1:lDispHead:= .T.
oBrowse1:lDispSep:= .T.
oBrowse1:lSep3d:= .F.
oBrowse1:headColor:= 0
oBrowse1:sepColor:= 12632256
oBrowse1:nLeftCol:= 2
oBrowse1:freeze:= 1
oBrowse1:alias := 'cag_not'
oBrowse1:nColumns := 4
SELECT (oBrowse1:alias)
oBrowse1:AddColumn( HColumn():New('Nº' , FieldBlock( 'nffs' ) ,'N',6 ,
0 ,.F.,0,0,'@e 999999',,,,,))
oBrowse1:AddColumn( HColumn():New('S' , FieldBlock( 'serie' ) ,'C',1 ,
0 ,.F.,0,0,'!!',,,,,))
oBrowse1:AddColumn( HColumn():New('Nome', FieldBlock( 'nome' ) ,'C',40,
0 ,.F.,0,0,'@!',,,,,))
oBrowse1:AddColumn( HColumn():New('Data', FieldBlock( 'dataem' ) ,'D',8 ,
0 ,.F.,0,0,'@D',,,,,))
@ 375,375 BUTTONEX oButtonex3 CAPTION "&Adicionar na Lista" OF oGroup1
SIZE 119,32 ;
STYLE WS_TABSTOP ;
TOOLTIP 'Clique aqui para adicionar uma nota' ;
ON CLICK {||
ADD_NF_LOTE(oBrowse1:aSelected),Atualiza_FiltroNF2(oBrowse2) }
@ 547,375 BUTTONEX oButtonex4 CAPTION "&Remover da Lista" OF oGroup1
SIZE 116,32 ;
STYLE WS_TABSTOP ;
TOOLTIP 'Clique aqui para adicionar uma nota' ;
ON CLICK {||
Excluir_NF_LOTE(oBrowse2:nCurrent),Atualiza_FiltroNF2(oBrowse2) }
@ 8,6 GROUPBOX oGroup1 CAPTION "Geração de Lote da Nota Fiscal Paulista"
SIZE 661,415 ;
COLOR 16711680
@ 380,40 BROWSE oBrowse2 ARRAY OF oGroup1 SIZE 270,310 ;
STYLE WS_VSCROLL + WS_HSCROLL;
FONT HFont():Add( '',0,-12,400,,,)
oBrowse2:bKeyDown := {|o,key| BrowseLoteNF(o, key ) }
oBrowse2:aArray := aARRAY_LOTE
CreateArList( oBrowse2, aARRAY_LOTE )
oBrowse2:aColumns[1]:heading := "Nº"
oBrowse2:aColumns[2]:heading := "S"
oBrowse2:aColumns[3]:heading := "Data"
oBrowse2:aColumns[1]:length := 6
oBrowse2:aColumns[2]:length := 1
oBrowse2:aColumns[1] :picture:="@E 999999"
oBrowse2:aColumns[2] :picture:="!!"
oBrowse2:aColumns[3] :picture:="@D"
@ 375,24 GROUPBOX oGroup2 CAPTION "Lista de Notas para o Lote" SIZE
288,347 ;
COLOR 16711680
@ 416,430 BUTTONEX oButtonex2 CAPTION "&Gerar Arquivo" SIZE 140,38 ;
STYLE WS_TABSTOP ;
BSTYLE 0;
TOOLTIP 'Clique aqui para Gerar o Lote';
ON CLICK {|| Gera_lote_nfp2(aARRAY_LOTE) }
@ 569,430 BUTTONEX oButtonex1 CAPTION "&Cancelar" SIZE 100,38 ;
STYLE WS_TABSTOP ;
BSTYLE 0;
TOOLTIP 'Clique aqui para cancelar' ;
ON CLICK {|| EndDialog() }
ACTIVATE DIALOG oDlg SHOW SW_HIDE
RETURN Nil
*************************************
Function BrowseLoteNF( oBrowse, key )
*************************************
DO CASE
CASE KEY = VK_F1
Sobre()
CASE KEY = VK_F2
BUSCA_NOME(oBrowse)
CASE KEY = VK_F4
Lista_ordem(oBrowse)
CASE KEY = VK_F9
ShellExecute("calc")
otherwise
if key=65 // tecla "A"
ADD_NF_LOTE(oBrowse1:aSelected)
Atualiza_FiltroNF2(oBrowse2)
elseif key=46 // tecla "DEL"
Excluir_NF_LOTE(oBrowse2:nCurrent)
Atualiza_FiltroNF2(oBrowse2)
elseif key=67 // tecla "C"
ADD_NF_LOTE(oBrowse1:aSelected)
Atualiza_FiltroNF2(oBrowse2)
ENDIF
ENDCASE
Return .T.
*********************************
Function Atualiza_FiltroNF2(oOBJ)
*********************************
oOBJ:Bottom()
oOBJ:SetFocus()
oOBJ:Refresh(.T.)
Return .T.
*****************************
Function ADD_NF_LOTE(vVARIAS)
*****************************
Local vADD := RECNO()
IF LEN(vVARIAS) > 0
FOR nI := 1 TO Len(oBrowse1:aSelected)
SELE CAG_NOT
DBGOTO(oBrowse1:aSelected[nI]) // RECNO DA ALTERAÇÃO
vNFFS=NFFS
vSERIE=SERIE
vDATAEM=DATAEM
IF AScan( aARRAY_LOTE, {|a| a[1] = vNFFS } )=0
AADD(aARRAY_LOTE,{vNFFS,vSERIE,vDATAEM})
ELSE
MsgInfo("A Nota Fiscal Numero: " + StrZero(vNFFS,6) + ", já foi
adicionada, Favor Revisar","Aviso do Sistema")
ENDIF
NEXT
ELSEIF vADD > 0
SELE CAG_NOT
DBGOTO(vADD) // RECNO DA ALTERAÇÃO
vNFFS=NFFS
vSERIE=SERIE
vDATAEM=DATAEM
IF AScan( aARRAY_LOTE, {|a| a[1] = vNFFS } )=0
AADD(aARRAY_LOTE,{vNFFS,vSERIE,vDATAEM})
ELSE
MsgInfo("A Nota Fiscal Numero: " + StrZero(vNFFS,6) + ", já foi
adicionada, Favor Revisar","Aviso do Sistema")
ENDIF
ELSE
msgstop("erro")
ENDIF
Return
******************************
Function Excluir_NF_LOTE(vREG)
******************************
IF vREG > 0
ADel( aARRAY_LOTE, vREG, .T. )
ELSE
msgstop("erro")
endif
Return .T.