Olá pessoal…
Na aula de hoje vou mostrar como fazer um MarkBrowse em MVC (browse com opção de flagar / checar um registro).
Abaixo o código fonte completo usado na aula:
//Bibliotecas #Include 'Protheus.ch' #Include 'FwMVCDef.ch' /*/{Protheus.doc} zMkMVC MarkBrow em MVC da tabela de Artistas @author Atilio @since 03/09/2016 @version 1.0 @obs Criar a coluna ZZ1_OK com o tamanho 2 no Configurador e deixar como não usado /*/ User Function zMkMVC() Private oMark //Criando o MarkBrow oMark := FWMarkBrowse():New() oMark:SetAlias('ZZ1') //Setando semáforo, descrição e campo de mark oMark:SetSemaphore(.T.) oMark:SetDescription('Seleção do Cadastro de Artistas') oMark:SetFieldMark( 'ZZ1_OK' ) //Setando Legenda oMark:AddLegend( "ZZ1->ZZ1_COD <= '000005'", "GREEN", "Menor ou igual a 5" ) oMark:AddLegend( "ZZ1->ZZ1_COD > '000005'", "RED", "Maior que 5" ) //Ativando a janela oMark:Activate() Return NIL /*---------------------------------------------------------------------* | Func: MenuDef | | Autor: Daniel Atilio | | Data: 03/09/2016 | | Desc: Criação do menu MVC | *---------------------------------------------------------------------*/ Static Function MenuDef() Local aRotina := {} //Criação das opções ADD OPTION aRotina TITLE 'Visualizar' ACTION 'VIEWDEF.zModel1' OPERATION 2 ACCESS 0 ADD OPTION aRotina TITLE 'Alterar' ACTION 'VIEWDEF.zModel1' OPERATION 4 ACCESS 0 ADD OPTION aRotina TITLE 'Processar' ACTION 'u_zMarkProc' OPERATION 2 ACCESS 0 ADD OPTION aRotina TITLE 'Legenda' ACTION 'u_zMod1Leg' OPERATION 2 ACCESS 0 Return aRotina /*---------------------------------------------------------------------* | Func: ModelDef | | Autor: Daniel Atilio | | Data: 03/09/2016 | | Desc: Criação do modelo de dados MVC | *---------------------------------------------------------------------*/ Static Function ModelDef() Return FWLoadModel('zModel1') /*---------------------------------------------------------------------* | Func: ViewDef | | Autor: Daniel Atilio | | Data: 03/09/2016 | | Desc: Criação da visão MVC | *---------------------------------------------------------------------*/ Static Function ViewDef() Return FWLoadView('zModel1') /*/{Protheus.doc} zMarkProc Rotina para processamento e verificação de quantos registros estão marcados @author Atilio @since 03/09/2016 @version 1.0 /*/ User Function zMarkProc() Local aArea := GetArea() Local cMarca := oMark:Mark() Local lInverte := oMark:IsInvert() Local nCt := 0 //Percorrendo os registros da ZZ1 ZZ1->(DbGoTop()) While !ZZ1->(EoF()) //Caso esteja marcado, aumenta o contador If oMark:IsMark(cMarca) nCt++ //Limpando a marca RecLock('ZZ1', .F.) ZZ1_OK := '' ZZ1->(MsUnlock()) EndIf //Pulando registro ZZ1->(DbSkip()) EndDo //Mostrando a mensagem de registros marcados MsgInfo('Foram marcados <b>' + cValToChar( nCt ) + ' artistas</b>.', "Atenção") //Restaurando área armazenada RestArea(aArea) Return NIL
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Boa Tarde, como eu poderia neste exemplo colocar na parte superior ou inferior da tela uma variável que eu pudesse colocar a quantidade de títulos selecionadas e outra a soma dos valores selecionados, tipo o que existe na tela padrão do protheus de liberação automática de títulos a pagar no financeiro.
Boa noite Paulo, tudo bem?
Rapaz, com o FWMarkBrowse eu nunca vi (apenas com o MSSelect mesmo), mas talvez o que você poderia fazer, é criar uma Dialog, e criar um Panel e vincular o seu mark com esse panel através do médoto SetOwner.
Ai você criaria gets em outro panel, e nos métodos de marcar os registros, você poderia incrementar as variáveis desses gets.
Qualquer dúvida, fico à disposição.
Um grande abraço.
Boa tarde.
Preciso criar um markbrowse como este na mesma tela onde terá um formulário, de forma que eu teria um formulário acima, e um markbrowse abaixo.
Como eu consigo fazer isso em MVC?
Obrigado desde já.
Bom dia Wexlei, tudo bem?
Na verdade você teria que criar um fonte MVC normal (sem ser markbrowse), e no viewdef dele, teria que criar uma struct de uma tabela, e nessa struct criar um campo tipo check, futuramente irei fazer uma vídeo aula sobre esse assunto.
Um grande abraço.
Obrigado pela resposta.
Consegui fazer dessa forma, porém não carrega nada na inclusão. Precisaria que carregasse nessa grid as informações de uma tabela independente de ser inclusão, alteração ou exclusão, porque o usuário irá selecionar alguns dos registros dela que será associado ao que estiver sendo incluído no formulário de cima.
Entendi Wexlei, estou tentando conseguir um tempo para voltar com as vídeo aulas, mas fique de olho, que irei tentar postar.
Um grande abraço.
Boa tarde, gostaria de saber como fazer este markbrowse com tela modelo 3, onde no cabeçalho tenho o titulo e no detalhe tenho os produtos da NF que deu origem ao titulo.
Obrigada
Boa noite Maria, tudo bem?
No caso, você teria que criar um campo na sua grid do tipo checkbox, seja via banco de dados (campo lógico) ou diretamente no ModelDef.
Um grande abraço.
Bom dia Dan_Atilo,
Estou usando este fonte que voce disponibilizou porem usando uma tabela fora do protheus, carregada os dados corretamente, quando excluo um dado ele não atualiza a tela, já usei o refresh() e não atualiza os dados o oMark
Bom dia Wanderson.
No caso, você está excluindo via RecLock na sua temporária?
Nesse link tem outro exemplo de FWMarkBrowse com temporária – https://terminaldeinformacao.com/knowledgebase/fwmarkbrowse-com-tabela-temporaria/