Mais um dúvida de Report Builder

Delphi

08/10/2007

Pessoal, tenho um While na tabela de funcionário. Esse While me chama uma procedure que descarrega o conteúdo dela no Relatório. Até aí funciona bem. Acontece, que existe um outro critério de carregar a minha procedure, que seria por grupo ou centro de custo(vários funcionários pertencem a um mesmo centro de custo). Só que, para cada funcionário, deveria imprimir em páginas diferentes(uma para cada funcionário). Preciso, que após o Next(ponteiro posicionado no próximo registro), eu reimprima tudo novamente, cabeçalho, banda Header e detalhe e subrelatórios e etc... Não sei como fazer isso usando o Report Builder.


Paulo

Paulo

Curtidas 0

Respostas

Comodelphi

Comodelphi

08/10/2007

Precisa realmente de um ´While´ para gerar o relatório no BeportBuilder. No modo design do ReportBuilder vc controla todas essas propriedades de grupo.


GOSTEI 0
Paulo

Paulo

08/10/2007

Creio que sim, pois em realidade, o nome do funcionário não vem de uma tabela, são necessários várias tabbelas, para trazer o resultado, por isso tenho uma função PegarFunc.... Aqui na empresa trabalhamos com RxMemoryData, por isso, que seu criar mais campo para carregar o nome dos funcs e fazer uma quebra por grupo, posso ter muita coisa em memória e ai complica. Para acabar com o RxMemory, nem toque nesse assunto, pois já tentei também e não consegui, pois todos os relatório da empresa usam esse cara.


GOSTEI 0
Comodelphi

Comodelphi

08/10/2007

vc popula o rxMemory e depois manda o reportBuilder imprimir, ou vc executa um print no relatorio para cada registro. Se for a primeira situação é tranquilo. Agora se for o segundo caso ja fica mais complicado. Eu até tenho alguns relatorios em RB que uso código, mas os dados já vem do jeito que preciso direto da query. Até acredito que deva existir RB os metodos para controlar quebra de pagina e etc. Se puder detalhar mais como vc gera esse relatorio.


GOSTEI 0
Paulo

Paulo

08/10/2007

Eu populo o Rx e depois descarrego. Voui tentar explicar melhor. No programa eu tenho o centro de custo(CC). Em cada CC, há um ou vários funcionários. No menu de impressão, eu tenho Impressão Individual e Coletiva. No Individual, funciona, pois eu passo somente um cara. Quando clico no radiobutton de Coletivo, aparece um Edit para eu escolher o centro de custo. Para esse tipo de impressão, tem que ser um Funcionário por página, ou seja, se houver 100 caras no CC, deve imprimir 100 páginas, com o nome de cada um. O RX é populado com o resultado de uma função, que está funcionando. Esta função, não retorna nem o CC e nem o nome do funcionário(Tem que ser assim). Então o nome, eu carrego no próprio While do Funcionário. O problema é que se eu carregar o RX com o nome e se CC, por exemplo, tiver muitos Funcionários, é mais espaço em memória para ocupar, por isso eu prefiro quebrar no código, assim:
QFunc.Firts; While not QFunc.Eof do begin ... Faço todas as validações aqui QFunc.Next; if QFunc.FieldByName(´Nome´).AsString <> vNomeFunc then //vNomeFunc - Variável que carrega o nome do funcionário begin //Aqui começo a reimpressão em outra página end; end;


Mas isso não tem que ser assim, pois se houver outra forma, mas interessante, claro que eu aceito. Essa foi a forma que veio em minha cabeça no momento, mas nada definitivo. Só quero evitar o RX, pelo problema da memória, mas se não der, vai ele mesmo.


GOSTEI 0
Paulo

Paulo

08/10/2007

comodelphi, você tinha razão. Bastou um agrupamento e funcionou. Estava dando erro, é porque o Master/Detail, estava apontando para o campo errado. Valeu, problema resolvido. Um grupo e o master/detail, fazendo com o campo da quebra.


GOSTEI 0
POSTAR