Search Results for

    Show / Hide Table of Contents

    Relatório com dois níveis de dados (mestre-detalhe)

    Até agora nossos relatórios de exemplo usaram somente uma banda de dados ("Dados de 1o. Nível" ou "Dados Mestre") para controlar a saída de dados. Isso era adequado para a saída de dados de uma única tabela de BD. FastReport também permite o design de relatórios com até seis níveis de dados, todos na mesma página de design. Além disso, é possível obter um número ilimitado de níveis de dados em relatórios ao usar o objeto "Sub-relatório" – este objeto será abordado mais adiante. Em geral, a maioria dos relatórios precisa de apenas um, dois ou três níveis de dados, e números maiores de níveis de dados são raros.

    Vamos ver como fazer o design de um relatório com dois níveis de dados. O relatório irá exibir dados das tabelas de demonstração "Customer" e "Orders". A primeira tabela é uma lista de clientes e a segunda é uma lista de pedidos feitos por esses clientes. As tabelas contêm dados nos seguintes campos:

    Customer:
    
    CustNo   Company
    1221     Kauai Dive Shoppe
    1231     Unisco
    1351     Sight Diver
    ...
    
    Orders:
    
    OrderNo   CustNo   SaleDate
    1003      1351     12.04.1988
    1023      1221     01.07.1988
    1052      1351     06.01.1989
    1055      1351     04.02.1989
    1060      1231     28.02.1989
    1123      1221     24.08.1993
    ...
    

    Como você pode ver, a segunda tabela contém a lista de todos os pedidos feitos por todos os clientes. Para ver os pedidos da tabela Orders que foram feitos por um cliente da tabela Customers, as duas tabelas são vinculadas no campo "CustNo", que é comum a ambas as tabelas. A saída do relatório desses dados deve ter este aspecto:

    1221   Kauai Dive Shoppe
      1023   01.07.1988
      1123   24.08.1993
    1231   Unisco
      1060   28.02.1989
    1351   Sight Diver
      1003   12.04.1988
      1052   06.01.1989
      1055   04.02.1989
    

    Crie um relatório novo. Coloque duas "Tabelas ADO" na página e configure suas propriedades:

    ADOTable1:
    TableName = 'Customer'
    UserName = 'Customers'
    
    ADOTable2:
    TableName = 'Orders'
    UserName = 'Orders'
    

    Agora adicione uma banda "Dados Mestre" e uma "Dados de Detalhe" à página:

    Observe que a banda "DadosMestre" deve ser colocada acima da banda "DadosDeDetalhe"! Arraste-a para lá se necessário. Se a banda Mestre for colocada embaixo da banda Detalhe, o FastReport irá gerar uma mensagem de erro ao visualizar o relatório.

    Se você visualizasse o relatório agora, você veria que a lista de pedidos permaneceria igual para todos os clientes e iria conter todos os registros da tabela "Orders". Isso aconteceria porque a propriedade MasterSource da tabela "Orders" não foi configurada. Configure "MasterSource – ADOTable1" no componente "ADOTable2". Agora configuramos uma relação 'mestre-detalhe'. Depois disso, selecionamos os campos a serem vinculados. Configure a propriedade MasterFields do componente "ADOTable2".

    Precisamos vincular os campos "CustNo" das duas fontes. Para fazer isso, selecione os campos desejados e clique no botão "Adicionar". A vinculação do campo será exibida no painel inferior. Conclua ao fechar o editor clicando em OK.

    Ao criar a visualização, FastReport faz o seguinte. Após a saída de um registro da tabela mestre (Customer), ele configura o filtro na tabela detalhe (Orders). Somente os registros que cumprem a condição 'Orders.CustNo = Customer.CustNo' permanecem na tabela. Isso significa que para cada cliente somente são exibidos na banda detalhe os pedidos que correspondem ao cliente autal. É importante enteder este conceito. Apesar das bandas de dados serem do tipo mestre ou detalhe, elas somente controlam o posicionamento dos dados na página de saída (ordem e número de exibições). Os dados exibidos pelos objetos nas bandas depende dos campos aos quais os objetos estão vinculados e da vinculação externa das duas tabelas.

    Esta é a saída final:

    É possível construir relatórios com até 6 níveis de dados de maneira similar.

    Back to top © 1998-2022 Copyright Fast Reports Inc.