Capítulo 14: Formulários Mestre-Detalhes (Ordem de Frete e Itens de Carga)
🎯 Objetivo da Aula
Nesta aula de arquitetura avançada de interfaces, você aprenderá a construir a tela mais emblemática de qualquer sistema de ERP ou SIG do planeta: o Formulário Mestre-Detalhes (Parent-Child / Master-Detail Form). No laboratório de informática, você aprenderá a embutir um Subformulário (SubForm) dentro de uma tela principal, sincronizando os registros através das propriedades LinkMasterFields e LinkChildFields. Você aprenderá também a criar Totalizadores Dinâmicos, calculando subtotais no rodapé do subformulário e refletindo a soma geral instantaneamente no cabeçalho da ordem de frete.
Ao final desta aula, você terá desenvolvido a tela central de expedição da FastLog S.A. (frm_OrdemFreteMestre), permitindo o faturamento de carretas completas com múltiplos itens de mercadorias em uma única tela integrada.
🏢 Cenário Prático (FastLog S.A.)
Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: O assistente de faturamento da matriz passava por um processo burocrático e exaustivo: para lançar uma viagem de carga fracionada com 5 produtos diferentes, ele precisava abrir uma tela para cadastrar o frete (ID 105), anotar o número gerado em um pedaço de papel de rascunho, fechar a tela, abrir outra tela separada para lançar os itens, redigitar o código 105 manualmente cinco vezes e, por fim, somar os valores das mercadorias na calculadora de mesa para preencher o valor do seguro no cabeçalho. Em dias de grande movimento, erros de digitação faziam com que itens fossem faturados para a viagem errada, atrasando carretas na balança rodoviária.
Sua Missão: Como engenheiro de sistemas, você construirá uma interface Mestre-Detalhes unificada. Na parte superior da tela, o operador selecionará a data, a placa e o motorista; na parte inferior, em uma grade fluida e sincronizada, ele digitará as mercadorias, enquanto o Access preenche as chaves estrangeiras automaticamente e totaliza o peso e o valor em tempo real.
🧠 Fundamentos: A Teoria Traduzida
1. A Arquitetura Mestre-Detalhes (Master-Detail)
Em bancos de dados relacionais, quando temos um relacionamento 1:N ou N:M, a forma mais ergonômica de manipulação visual é reunir as duas tabelas em uma única janela:
- Formulário Mestre (Pai / Cabeçalho): Conectado à tabela do lado “1” (
tbl_OrdensFrete). Exibe as informações que são únicas para a viagem inteira (Código do Frete, Data, Placa, Rota, Motorista). - Subformulário Detalhe (Filho / Grade): Conectado à tabela do lado “Vários” (
tbl_ItensFrete). Exibe as múltiplas linhas de mercadorias transportadas naquela viagem específica.
flowchart TD
subgraph FORM_MESTRE["🖥️ Formulário Mestre: frm_OrdemFrete (tbl_OrdensFrete)"]
direction TB
CAB["Cabeçalho da Viagem: ID_OrdemFrete: 105 | Data: 10/10/2026 | Placa: BRA2E19"]
subgraph SUBFORM["📋 Subformulário Filho: sub_ItensFrete (tbl_ItensFrete)"]
direction TB
L1["Linha 1: Smartphones 5G | Qtd: 200 | Peso: 3.000 kg | R$ 600.000,00"]
L2["Linha 2: Cafés Especiais | Qtd: 150 | Peso: 9.000 kg | R$ 180.000,00"]
ROD["Rodapé do Subformulário: =Soma([Valor_Declarado_Item]) ➔ R$ 780.000,00"]
end
CAB --- SUBFORM
TOT["Total Geral Refletido no Mestre: R$ 780.000,00 (Dinâmico)"]
SUBFORM -.-> TOT
end
style FORM_MESTRE fill:#1a365d,stroke:#fff,stroke-width:2px,color:#fff
style CAB fill:#2980b9,stroke:#fff,stroke-width:1px,color:#fff
style SUBFORM fill:#2c3e50,stroke:#fff,stroke-width:1px,color:#fff
style L1 fill:#34495e,stroke:#fff,color:#fff
style L2 fill:#34495e,stroke:#fff,color:#fff
style ROD fill:#27ae60,stroke:#fff,color:#fff
style TOT fill:#e67e22,stroke:#fff,stroke-width:2px,color:#fff2. O Mecanismo de Sincronismo: LinkMasterFields e LinkChildFields
Como o subformulário sabe que deve mostrar apenas os itens da viagem atual?
- Vincular Campos Mestres (LinkMasterFields): É o campo-chave do formulário principal (
ID_OrdemFrete). - Vincular Campos Filhos (LinkChildFields): É a chave estrangeira do subformulário (
ID_OrdemFrete). - A Mágica do Access: Quando o operador digita uma nova linha no subformulário, o Access preenche a chave estrangeira automaticamente nos bastidores com o código da viagem atual, sem que o operador precise digitar nada!
3. Fórmulas Cruzadas entre Formulários
Para ler uma soma que está dentro do rodapé de um subformulário e exibi-la no formulário mestre: $$\text{Origem do Controle} = \text{=[\textit{NomeDoSubformulario}].[\textit{Form}]![\textit{NomeDaCaixaDeTexto}]}$$
📖 Exemplo Guiado: Passo a Passo no Laboratório
Abra o arquivo FastLog_Database.accdb. Vamos construir o subformulário de itens em primeiro lugar.
Passo 1: Criando o Subformulário de Itens (sub_ItensFrete)
- No Painel de Navegação, selecione a tabela
tbl_ItensFrete. - Acesse a guia Criar ➔ clique em Mais Formulários ➔ selecione Folha de Dados (Datasheet).
- Uma grade com as colunas da tabela de itens será criada.
- Salve o formulário com o nome:
sub_ItensFretee feche-o.
🛠️ Prática Obrigatória 1: Criando o Formulário Mestre e Acoplando o Subformulário
Agora você criará o formulário principal da ordem de frete e embutirá o subformulário de mercadorias.
Passo a Passo no Computador:
- Acesse Criar ➔ Design do Formulário (Form Design).
- Pressione
F4para abrir a Folha de Propriedades. - Na guia Dados, configure a propriedade Origem do Registro (RecordSource) como:
tbl_OrdensFrete. - Inserindo os Campos do Mestre:
- Na faixa de opções (guia Design de Formulário), clique em Adicionar Campos Existentes (ícone da tabela com campos).
- Uma lista com os campos de
tbl_OrdensFretese abrirá à direita. - Dê duplo clique em:
ID_OrdemFrete,Data_Despacho,Data_Entrega_Prevista,ID_Cliente,Placa_Veiculo,ID_Motorista,Codigo_Rota,Valor_Frete. - Posicione e organize os campos no topo da seção Detalhe.
- Embutindo o Subformulário:
- Localize o formulário
sub_ItensFreteno Painel de Navegação à esquerda. - Clique, segure e arraste
sub_ItensFretepara dentro do formulário mestre, soltando-o logo abaixo dos campos de cabeçalho!
- Localize o formulário
- Verificando os Vínculos de Sincronismo:
- Clique sobre a borda alaranjada do subformulário embutido.
- Na Folha de Propriedades (
F4), clique na guia Dados. - Verifique que o Access já configurou automaticamente:
- Vincular Campos Mestres:
ID_OrdemFrete - Vincular Campos Filhos:
ID_OrdemFrete
- Vincular Campos Mestres:
- Salve o formulário com o nome oficial:
frm_OrdemFreteMestre.
✅ Resultado Esperado (Prática 1):
O formulário mestre exibe as informações gerais da viagem na parte superior e a grade dinâmica de itens transportados na parte inferior, sincronizados pela chave ID_OrdemFrete.
🛠️ Prática Obrigatória 2: Totalizador Dinâmico no Rodapé
Você programará o cálculo automático do valor declarado e peso total das mercadorias.
Passo a Passo no Computador:
- Abra o subformulário
sub_ItensFreteno Modo Design. - Abra um espaço na seção Rodapé do Formulário (Form Footer).
- Adicione uma nova Caixa de Texto (TextBox):
- Clique sobre a caixa e abra a Folha de Propriedades (
F4). - Na guia Outro, altere o Nome para:
txt_TotalMercadorias. - Na guia Dados, na linha Origem do Controle, digite exatamente:
- Na guia Formato, altere o Formato para: Moeda.
- Clique sobre a caixa e abra a Folha de Propriedades (
- Salve e feche
sub_ItensFrete. - Abra o formulário principal
frm_OrdemFreteMestreno Modo Design. - Adicione uma nova Caixa de Texto no formulário mestre:
- Altere o Rótulo para:
VALOR TOTAL DECLARADO DA CARGA:. - Selecione a Caixa de Texto e, na propriedade Origem do Controle, digite:
- Configure o Formato como: Moeda e marque a propriedade Bloqueado: Sim (para o operador não alterar a soma na mão).
- Altere o Rótulo para:
- Mude para o Modo Formulário:
- Navegue entre as viagens existentes: observe a grade de itens mudar automaticamente a cada registro!
- Adicione um novo produto na grade e veja o total geral da carga se recalcular no mesmo instante!
✅ Resultado Esperado (Prática 2):
A tela calcula o valor total das mercadorias da viagem em tempo real, sem necessidade de calculadoras manuais ou risco de erro de digitação.
📤 Instruções de Entrega (Microsoft Teams)
- Salve todas as alterações e feche o Access.
- Nomeie o arquivo:
FastLog_BD_Cap14_SeuNome_SeuSobrenome.accdb. - Acesse o Microsoft Teams na sua turma técnica.
- Abra a tarefa: “Banco de Dados - Cap 14: Formulários Mestre-Detalhes”.
- Anexe o seu arquivo
.accdbe conclua o envio clicando em Entregar (Turn In).
💡 Checkpoint de Gestão & TI
Por que esta aula é um marco na formação técnica? Porque agora você construiu a espinha dorsal de um sistema ERP de verdade. Toda nota fiscal, todo pedido de compras e todo conhecimento de transporte rodoviário (CT-e) no Brasil opera sob a arquitetura Mestre-Detalhes. Dominar a ligação entre formulários e a propagação de cálculos em tempo real coloca você no nível mais alto de desenvolvimento desktop com SGBD.
🔥 Desafio de Fixação: Totalizador de Peso Líquido Transportado
Assim como totalizamos o valor financeiro da carga para o seguro, o departamento de tráfego precisa saber o Peso Total dos Itens em Quilos para comparar com a capacidade máxima do caminhão e evitar multas por excesso de peso na balança rodoviária.
Implemente o totalizador de peso na tela Mestre-Detalhes:
- Abra
sub_ItensFreteno Modo Design e adicione uma segunda Caixa de Texto no Rodapé do Formulário:- Nome:
txt_PesoTotalItens - Origem do Controle:
=Soma([Peso_Aferido_Kg]) - Formato: Número Padrão.
- Nome:
- No formulário mestre
frm_OrdemFreteMestre, adicione uma Caixa de Texto correspondente:- Rótulo:
PESO TOTAL AFERIDO (KG): - Origem do Controle:
=[sub_ItensFrete].[Form]![txt_PesoTotalItens] - Propriedade: Bloqueado = Sim.
- Rótulo:
- Teste a tela adicionando novos itens e verifique a soma de peso em tempo real.
📝 Atividade Extra: Questionário de Fixação (Caderno)
Instruções: Responda no caderno, de próprio punho, as 10 perguntas reflexivas abaixo com base no conteúdo deste capítulo. Ao concluir, apresente o caderno ao professor para conferência e visto.
- O que caracteriza a arquitetura de interfaces conhecida como Formulário Mestre-Detalhes (Parent-Child)?
- No Cenário Prático da FastLog, qual era o procedimento manual e arriscado realizado pelo assistente de faturamento antes da tela integrada?
- Qual tabela da transportadora atua como origem do Formulário Mestre e qual tabela atua como origem do Subformulário?
- Qual é o papel da propriedade Vincular Campos Mestres (LinkMasterFields)?
- Qual é o papel da propriedade Vincular Campos Filhos (LinkChildFields)?
- O que o Microsoft Access faz nos bastidores quando um operador digita uma nova linha na grade do subformulário?
- Em qual seção do subformulário devemos obrigatoriamente inserir as caixas de texto contendo fórmulas agregadoras como
=Soma(...)? - Qual é a sintaxe exata utilizada no formulário principal para capturar o valor calculado dentro do subformulário?
- Por que é recomendável configurar a propriedade Bloqueado = Sim nas caixas de texto que exibem totais consolidados?
- No Desafio de Fixação, qual é a importância logística de monitorar o totalizador de peso em tempo real durante a digitação dos itens da carga?