Como imprimir Linhas em branco no FastReport

25/02/2010

6

Olá pessoal,

Preciso imprimir um master data no FastReport e queria que mesmo que não tivesse dados para imprimir e se o número de linhas fosse menor que 24, fosse impresso estas 24 linhas. Caso Seja um número maior não há problemas, a questão é este limite mínimo de 24 linhas que precisam ser impressas mesmo que não tenha dados para serem impressos, logicamente estas linhas terão de ser impressas em branco.

Só pra detalhar mais, o cenário se trata de uma relação de parcelas a serem pagas, que deverão constar no relatório da seguinte maneira:

Supondo que existam 24 parcelas:

1 parcela    valor     data| 13 parcela    valor     data
2 parcela    valor     data| 14 parcela    valor     data
3 parcela    valor     data| 15 parcela    valor     data
4 parcela    valor     data| 16 parcela    valor     data
5 parcela    valor     data| 17 parcela    valor     data
6 parcela    valor     data| 18 parcela    valor     data
7 parcela    valor     data| 19 parcela    valor     data
8 parcela    valor     data| 20 parcela    valor     data
9 parcela    valor     data| 21 parcela    valor     data
10 parcela  valor     data| 22 parcela    valor     data
11 parcela  valor     data| 23 parcela    valor     data
12 parcela  valor     data| 24 parcela    valor     data


Supondo que só existam 4 parcelas deverá assim ser impresso:

1 parcela    valor     data                      | 13 parcela    (em branco)    (em branco)
2 parcela    valor     data                      | 14 parcela    (em branco)    (em branco)
3 parcela    valor     data                      | 15 parcela    (em branco)    (em branco)
4 parcela    valor     data                      | 16 parcela    (em branco)    (em branco)
5 parcela    (em branco)    (em branco)| 17 parcela    (em branco)    (em branco)
6 parcela    (em branco)    (em branco)| 18 parcela    (em branco)    (em branco)
7 parcela    (em branco)    (em branco)| 19 parcela    (em branco)    (em branco)
8 parcela    (em branco)    (em branco)| 20 parcela    (em branco)    (em branco)
9 parcela    (em branco)    (em branco)| 21 parcela    (em branco)    (em branco)
10 parcela  (em branco)    (em branco)| 22 parcela    (em branco)    (em branco)
11 parcela  (em branco)    (em branco)| 23 parcela    (em branco)    (em branco)
12 parcela  (em branco)    (em branco)| 24 parcela    (em branco)    (em branco)

Obs: Há um campo na tabela em que o master data que informa o número da parcela(1 parcela, 2 parcela, 3 parcela, etc.)

Sugestões, idéias, dicas, críticas serão muito bem-vindas.

Abraços.
Responder

Posts

se você estiver trabalhando com ClientDatasets, uma das possibilidades é incluir as parcelas faltantes no detail. imprima e depois descarte as alterações.

fica assim: ao abrir os datasets, você verifica a quantidade de parcelas informada no dataset principal e faz um laço para inclusão na tabela detail.

numparcelasdb := master.parcelas.asinteger;
 
if numparcelasdb < 24 then
  for parcela := numparcelasdb to 24 do
  begin
    detail.append;
    detail.numparcela.asinteger := parcela;
    detail.post; -> somente post, não execute o applyupdates
  end

depois basta imprimir.


Responder

25/02/2010

Ari Sato

Ola Emerson,

Estou trabalhando com uma query no delphi que é conectada com o frxDBDataSet também no delphi, ao qual eu chamo no form do FastReport. Só estou usando como detail o prórpio MasterData por não precisar de um detalhamento maior. Vou tentar fazer do jeito que me ensinou pra ver se funciona.
Responder

25/02/2010

Ari Sato

Não funcionou.
Responder

05/03/2010

Ari Sato

Já resolvi da seguinte forma:

Uma stored procedure que eu chamo sempre que o número de parcelas estiver entre 1 e 24, caso contrario eu passo as instruções via sql no ADOQuery conectado com o correspondente TFRXDBDataset. O código da Stored procedure:

CREATE PROCEDURE  jur_cons_mj6a1_valores
(    @idjp6a int
)

 AS


CREATE TABLE #SEQ
(IDseq Int Identity(1,1), campo int);

insert into #seq(campo)
select top  24 codcli from kcl1



SELECT idj6a1, idjp6a, nropar, valpar, datpag, criter
FROM (
    Select TOP 24      mj6a1.idj6a1, mj6a1.idjp6a,
        mj6a1.nropar 'nropar', cast(mj6a1.nropar as varchar(2)) 'nroseq',
        mj6a1.valpar, mj6a1.datpag, mj6a1.criter
    from mj6a1
    left join mjp6a on mj6a1.idjp6a = mjp6a.idjp6a
              where mj6a1.idjp6a = @idjp6a

    UNION ALL

    select 0, @idjp6a, idseq , ' ', null, null, 0
    from #seq
    where (#seq.idseq >  
        (select count(idj6a1) from mj6a1 where mj6a1.idjp6a = @idjp6a)

)) as x
ORDER BY x.nropar
GO

Espero que ajude alguém mas acho que é um caso muito específico.

Abraços
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira