Nesse vídeo demonstraremos a utilização da classe FWBrwRelation, que serve para criar um relacionamento entre dois browses (FWMBrowse).
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas #Include "Totvs.ch" #Include "FWMVCDef.ch" Static lEmExecucao := .F. /*/{Protheus.doc} User Function zExe208 Exemplo de tela com 2 browses de cadastro usando FWBrwRelation @type Function @author Atilio @since 20/02/2023 @obs **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao **** /*/ User Function zExe208() Local aArea := GetArea() Local cFunBkp := FunName() Local aCoors := FWGetDialogSize( oMainWnd ) Local cIdGrupo Local cIdProdut Local oPanelUp Local oTela Local oPanelDown Local oRelaction //Tratativa para impedir que seja aberta a mesma janela por cima da original do browse If ! lEmExecucao SetFunName("MATA035") DbSelectArea("SBM") DbSelectArea("SB1") //Cria a janela principal Define MsDialog oDlgPrinc Title "Grupos x Produtos" From aCoors[1], aCoors[2] To aCoors[3], aCoors[4] OF oMainWnd Pixel //Divide a tela em dois containers, um de 30% e outro de 68% oTela := FWFormContainer():New( oDlgPrinc ) cIdGrupo := oTela:CreateHorizontalBox( 30 ) cIdProdut := oTela:CreateHorizontalBox( 68 ) oTela:Activate( oDlgPrinc, .F. ) //Cria os painéis oPanelUp := oTela:GetPanel( cIdGrupo ) oPanelDown := oTela:GetPanel( cIdProdut ) //Cria o browse superior trazendo dados da SBM oBrowseUp:= FWmBrowse():New() oBrowseUp:SetOwner(oPanelUp) oBrowseUp:SetDescription("Grupos") oBrowseUp:SetAlias('SBM') oBrowseUp:DisableDetails() oBrowseUp:SetProfileID('1') oBrowseUp:ExecuteFilter(.T.) oBrowseUp:SetMainProc("MATA010") oBrowseUp:ForceQuitButton() oBrowseUp:SetMenuDef('MATA035') oBrowseUp:SetCacheView (.F.) oBrowseUp:SetOnlyFields({'BM_GRUPO', 'BM_DESC'}) oBrowseUp:Activate() //Cria o browse inferior, que irá trazer todos os produtos aRotina := FWLoadMenuDef("MATA010") oBrowseDwn:= FWMBrowse():New() oBrowseDwn:SetOwner(oPanelDown) oBrowseDwn:SetDescription("Produtos") oBrowseDwn:SetMenuDef('MATA010') oBrowseDwn:DisableDetails() oBrowseDwn:SetAlias('SB1') oBrowseDwn:SetProfileID('2') oBrowseDwn:SetMainProc("MATA035") oBrowseDwn:SetCacheView (.F.) oBrowseDwn:SetOnlyFields({'B1_COD', 'B1_DESC'}) //Faz o relacionamento entre os dois browses oRelaction:= FWBrwRelation():New() oRelaction:AddRelation( oBrowseUp , oBrowseDwn , { { 'B1_GRUPO' , 'BM_GRUPO' } } ) oRelaction:Activate() oBrowseDwn:Activate() //Atualiza os browses e cria a janela na tela oBrowseUp:Refresh() oBrowseDwn:Refresh() lEmExecucao := .T. Activate MsDialog oDlgPrinc Center lEmExecucao := .F. SetFunName(cFunBkp) EndIf RestArea(aArea) Return Static Function MenuDef() Local aRotina := FWLoadMenuDef("MATA035") Return aRotina
Bom pessoal, por hoje é só.
Abraços e até a próxima
Boa noite tenho uma duvida, é possivel criar uma relação com FWBrwRelation de duas grid que foram montadas com tabelas temporarias?
Bom dia Pablo, tudo joia?
Via FWBrwRelation, nunca fiz com duas temporárias. Mas preparamos um exemplo, que vai ao ar agora em Agosto do Ti Responde, que são duas browse comuns, cada uma com FWTemporaryTable e ao alternar uma, a outra é atualizada (igual o comportamento do FWBrwRelation).
Se você acha que esse exemplo vai te atender e você for Assinante Premium, nos mande um eMail que lhe enviamos o prw antecipadamente.
Um grande abraço.