Perguntas Visualizar informações de um arquivo de dados e navegar entre o registro anterior e o próximo

Mais
7 anos 8 meses atrás - 7 anos 8 meses atrás #30992 por alexcarvalhodasilva
Caros,

Aqui na empresa existe uma customização com uma grid usando msselect e um botão visualizar no final da tela. Apesar do usuário poder selecionar vários itens na grid, ao clicar no botão visualizar, é executada a função AxVisual para exibir somente as informações do item posicionado.

Preciso mudar o comportamento desse botão visualizar, ao clicar nele o usuário irá ver o primeiro item selecionado na msselect e o usuário teria a opção de navegar entre o registro anterior e o próximo.

Alguém pode me ajudar?

A primeira parte é tranquilo, visualizar o primeiro item selecionado na msselect:
DbSelectArea(cAlias)
DbGoTop()
Do While !Eof()
	IF (cAlias)->E2_OK == cMarca
		DbSelectArea("SZ4")
		DbSetOrder(1)
		If DbSeek(xFilial("SZ4") + (cAlias)->Z4_NUMERO + (cAlias)->Z4_ITEM)
			RegToMemory("SZ4")
			AxVisual("SZ4",SZ4->(Recno()),2,,,,,aButtons,,,,,,,,,)
			SZ4->(Dbclosearea())
			RestArea(aArea)
			Return
		EndIf
	Else
		Dbskip()
	Endif
EndDo

O problema é como fazer para ir para o registro anterior e próximo:

Dúvidas:

1 - Ao clicar em próximo, como eu fecho a Axvisual aberta para poder reposicionar no próximo registro. Fiz a tentativa oImvisu:End() mas não funcionou.

2 - Quando o usuário clicar no botão fechar, como sair do loop?
Static Function IM002Vis(cAlias)
Local aArea := GetArea()
Local nReg  := 0
Local cnumero
Local citem
Local cacao := "Dbskip()"
Private oImvisu
Private  aButtons := {}
Private cCadastro := "Solicitação de pagamento"

//adiciona botoes na Enchoice                       
aAdd( aButtons, { "PRÓXIMO", {|| oImvisu:End(),cacao := "Dbskip()}, "Próximo", "Próximo" } )
aAdd( aButtons, { "ANTERIOR", {|| oImvisu:End(),cacao := "Dbskip(-1)",MsgAlert("Anterior novamente")}, "Anterior", "Anterior" } ) 

DbSelectArea(cAlias)
DbGoTop()
Do While !Eof()
	IF (cAlias)->E2_OK == cMarca
		DbSelectArea("SZ4")
		DbSetOrder(1)
		If DbSeek(xFilial("SZ4") + (cAlias)->Z4_NUMERO + (cAlias)->Z4_ITEM)
			RegToMemory("SZ4")
			oImvisu := AxVisual("SZ4",SZ4->(Recno()),2,,,,,aButtons,,,,,,,,,)
		EndIf
		&cacao
	Else
		&cacao
	Endif
EndDo

SZ4->(Dbclosearea())
RestArea(aArea)
Return
Ultima edição: 7 anos 8 meses atrás por alexcarvalhodasilva.

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 8 meses atrás #30995 por kanaamlrr
Acho que no caso o ideal seria você montar uma tela com um componente MsMGet e adicionar os botões próximo/anterior na tela.
Cada vez que clicar em próximo/anterior você só atualiza as variáveis de memória e dá um refresh no MsMget
Dessa forma você conseguirá o efeito desejado.
Obs: O AxVisual implementa o MsMget internamente, dessa forma você não utilizará mais o AxVisual.
Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 8 meses atrás #30996 por alexcarvalhodasilva
Perfeito! Você tem toda razão.

Muito obrigado!!!!!!

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 8 meses atrás #31000 por kanaamlrr
Por nada!
Se tiver alguma dúvida no processo de desenvolvimento da tela posta ai.
Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 8 meses atrás #31007 por alexcarvalhodasilva

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.094 segundos
Joomla templates by a4joomla