Base de conhecimento
Encontre respostas para suas dúvidas em quatro fontes de conhecimento diferentes ao mesmo tempo, simplificando o processo de pesquisa.

Cross Segmentos - TOTVS Backoffice (Linha Protheus) - ADVPL - É possível criar um formulário MVC com duas entidades sem utilizar grid

time.pngTempo aproximado para leitura:00:04:00 min

Dúvida

É possível criar um formulário MVC com duas entidades sem utilizar grid (relação 1:1 | duas enchoices)

Ambiente
Cross Segmentos - Backoffice (Linha Protheus) – ADVPL – A partir da versão 11.8

Solução
Sim, é possível contudo as duas tabelas envolvidas no formulário devem ter relacionamento de chave primária x chave estrangeira:

Exemplo:
[PK] B1_COD (entidade forte) x [FK] B5_COD (entidade fraca)

Fonte

// BIBLIOTECAS NECESSÁRIAS
#Include "TOTVS.ch"
#Include "FWMVCDEF.ch"

// FUNÇÃO PRINCIPAL
User Function MVCFLD()
Local oBrowse := FwLoadBrw("MVCFLD") // NAVEGADOR

// ATIVAÇÃO DA TELA
    oBrowse:Activate()
Return (NIL)

// NAVEGADOR (BROWSER)
Static Function BrowseDef()
    Local oBrowse := FwMBrowse():New() // OBJETO DO NAVEGADOR

// DEFINE A TABELA PRINCIPAL E A DESCRIÇÃO
    oBrowse:SetAlias("SB1")
    oBrowse:SetDescription("Cadastro de Produtos Customizado")

// DEFINE DE QUAL FONTE SERÁ UTILIZADO O MENUDEF
    oBrowse:SetMenuDef("MVCFLD")
Return (oBrowse)

// OPERAÇÕES DA ROTINA (AROTINA)
Static Function MenuDef()
Return (FwMVCMenu("MVCFLD"))

// REGRA DE NEGÓCIOS (MODEL)
Static Function ModelDef()
// INSTANCIA O MODELO
Local oModel := MPFormModel():New("XMVCFLD")

// INSTANCIA OS SUBMODELOS
Local oStruSB1 := FwFormStruct(1, "SB1")
Local oStruSB5 := FwFormStruct(1, "SB5")

// DEFINE O CAMPO B5_COD COMO OBRIGATÓRIO
oStruSB5:SetProperty("B5_COD", MODEL_FIELD_OBRIGAT, .F.)

// DEFINE SE OS SUBMODELOS SERÃO FIELD OU GRID
oModel:AddFields("MD_MASTERSB1", NIL, oStruSB1)
oModel:AddFields("MD_DETAILSB5", "MD_MASTERSB1", oStruSB5)

// DEFINE A RELAÇÃO ENTRE OS SUBMODELOS (CSUBMODELO, {ARELATION1, ARELATION2}, CINDEX)
oModel:SetRelation("MD_DETAILSB5", {{"B5_FILIAL", "FwXFilial('SB5')"}, {"B5_COD", "B1_COD"}}, SB5->(IndexKey(1)))

// DEIXA O MODELO SB5 COMO OPCIONAL
oModel:GetModel("MD_DETAILSB5"):SetOptional(.T.)

// DESCRIÇÃO DO MODELO
oModel:SetDescription("Cadastro de Produtos Customizado")

// DESCRIÇÃO DOS SUBMODELOS
oModel:GetModel("MD_MASTERSB1"):SetDescription("Dados Brutos do Produto")
oModel:GetModel("MD_DETAILSB5"):SetDescription("Dados Científicos do Produto")
Return (oModel)

// INTERFACE GRÁFICA (VIEW)
Static Function ViewDef()
// INSTANCIA A VIEW
Local oView := FwFormView():New()

// RECEBE O MODELO DE DADOS
Local oModel := FwLoadModel("MVCFLD")

// INSTANCIA AS SUBVIEWS
Local oStruSB1 := FwFormStruct(2, "SB1")
Local oStruSB5 := FwFormStruct(2, "SB5")

// REMOVE O CAMPO DA VISÃO
oStruSB5:RemoveField("B5_COD")

// INDICA O MODELO DA VIEW
oView:SetModel(oModel)

// CRIA ESTRUTURA VISUAL DE CAMPOS
oView:AddField("VW_MASTERSB1", oStruSB1, "MD_MASTERSB1")
oView:AddField("VW_DETAILSB5", oStruSB5, "MD_DETAILSB5")

// CRIA BOXES HORIZONTAIS
oView:CreateHorizontalBox("BOX_SUPERIOR", 70)
oView:CreateHorizontalBox("BOX_INFERIOR", 30)

// RELACIONA OS BOXES COM AS ESTRUTURAS VISUAIS
oView:SetOwnerView("VW_MASTERSB1", "BOX_SUPERIOR")
oView:SetOwnerView("VW_DETAILSB5", "BOX_INFERIOR")

oView:EnableTitleView("MD_MASTERSB1", "Dados Brutos do Produto")
oView:EnableTitleView("MD_DETAILSB5", "Dados Científicos do Produto")
Return (oView)
Esse artigo foi útil?
Usuários que acharam isso útil: 0 de 0

1 Comentários

  • Avatar
    Allan Cristhian Oliveira de Aguiar

    Boa Tarde, ao compilar o exempli acima, esta apresentando o error.log a seguir:

    -

    THREAD ERROR ([8980], Administrator, SERVER) 17/03/2022 17:02:09

    variable is not an object on U_MVCFLD(TELA DE BONIFICADOS.PRW) 17/03/2022 17:01:20 line : 10

     

     

    0
    Ações de comentário Permalink
Por favor, entre para comentar.
X Fechar

Olá ,

Há pendência referente a um de seus produtos contratados para a empresa ().

Entre em contato com o Centro de Serviços TOTVS para tratativa.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cobrança – Verificação de pendências financeiras . clique aqui.

TOTVS

X Fechar

Olá ,

Seu contato não está cadastrado no Portal do Cliente como um perfil autorizado a solicitar consultoria telefônica.

Por gentileza, acione o administrador do Portal de sua empresa para: (1)configurar o seu acesso ou (2)buscar um perfil autorizado para registro desse atendimento.

Em caso de dúvidas sobre a identificação do contato administrador do Portal, ligue (11) 4003-0015, opção 7 e, em seguida, opção 4 para buscar o suporte com o time de Assessoria ao Portal do Cliente. . clique aqui.

TOTVS

X Fechar

Olá ,

Para o atendimento de "Consultoria Telefônica" você deverá estar de acordo com o Faturamento.

TOTVS

X Fechar

Olá,

Algo inesperado ocorreu, e o usuario nao foi reconhecido ou você nao se encontra logado

Por favor realize um novo login

Em caso de dúvidas, entre em contato com o administrador do Portal de Clientes de sua empresa para verificação do seu usuário, ou Centro de Serviços TOTVS.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cadastros . clique aqui.

TOTVS

Chat _

Preencha os campos abaixo para iniciar o atendimento:

Chat _