funçao p/ livro de registro...

21/02/2006

Bom Dia!

Amigos!

Em uma atualização no meu sistema de escola, para imprimir o certificado do ensino fundamental, preciso da seguinte função:

Temos o livro de registro nº 1, que a cada novo número gerado seqüencialmente (que quer dizer certificado impresso) , gere outro número também seqüencialmente(que quer dizer folha do livro) a cada 78 (certificados impressos), porque cada folha do livro de registro cabe 78 nomes, o livro tem 100 folhas e ao chegar na folha nº 100 no final da contagem dos 78 seja solicitado o livro nº 2.

A cada impressão de certificado, estes resultados ou cálculos desta função ficará armazenado em um banco de dados interbase 6

Tenho os seguintes campos:

LIVRO_NUMERO {número do livro ex: Livro Nº 1}
FOLHA_NUMERO {folha do livro ex: Folha Nº 1}
REGISTRO_NUMERO {número do registro ex: (primeira linha) Nº 1 - Princesa Isabel}
TOTAL_FOLHAS_LIVRO{quantidade de folhas do livro ex: 100 folhas}
TOTAL_REG_FOLHA {quantidade de registros por folha ex: 78 linhas por folha}

Espero ter sido um pouco claro, e que alguém possa mim ajudar...

Um abraço!

r@mos


Erivando

Respostas

21/02/2006

Fknyght

Qual o gerador de relatorios que vc esta usando.

Fortes Report
Quick Report

ETC ETC ETC....


Responder Citar

21/02/2006

Erivando

Qual o gerador de relatorios que vc esta usando. Fortes Report Quick Report ETC ETC ETC....


Estou usando o Quick Report , e eu estou querendo estes calculos para manter salvos em banco de dados e imprimir o certificado usando dados do cadastro do aluno, depois baseado nestes dados irei desenvolver a impressão das folhas do livro, é uma livro com uma abertura e um encerramento no final de cada livro e o numero sempre dando sequencia, acho que vcs sabe como que funciona estes livros numerados, a numeração é bem parecida com o livro de inventário de estoque.


Responder Citar

21/02/2006

Fknyght

Olha so, no componente do TQuickRep tem tres eventos que vc pode usar.
São eles :

BeforePrint -> Antes de Imprimir
AfterPrint -> Depois de Imprimir
StartPage -> Quando o quick report starta uma nova pagina

No beforeprint vc vai usar para verificar qual a ultima pagina impressa/livro. Dai se a ultima pagina for 99, a 100 deve ser o termo de encerramento. Tipo Voce pode montar um outro relatorio a parte para so imprimir o termo de abertura e encerramento e fazer sua chamada nele.

Var
  PaginasImpressas : Integer;

procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
  PaginasImpressas := 0; // zerar as pagina impressas
  uPaginaImpressa := PegaUltimaPaginaImpressa;
   If uPaginaImpressa = 99 then
     Begin
       ImprimirTermoDeEncerramento;
       ImprimirTermoDeAbertura;
     end;
end;


procedure TForm1.QuickRep1StartPage(Sender: TCustomQuickRep);
Begin
  Inc( PaginasImpressas );
End;


procedure TForm1.QuickRep1AfterPrint(Sender: TObject);
begin
    { Aqui voce soma as paginas impressas a qtde ja impressas no banco de dados }
    SUATABELA.FIELDSVALUES[´CAMPOPAGINA´&93; :=  SUATABELA.FIELDSVALUES&91;´CAMPOPAGINA´&93; + PaginasImpressas;
  IF SUATABELA.FIELDSVALUES&91;´CAMPOPAGINA´&93; >= 100  THEN
   Begin
      ImprimirTermoDeEncerramento;
       SUATABELA.FIELDSVALUES&91;´CAMPOPAGINA´&93; := SUATABELA.FIELDSVALUES&91;´CAMPOPAGINA´&93;  -  100;
       ImprimirTermoDeAbertura;
       SUATABELA.FIELDSVALUES&91;´CAMPOLIVRO´&93;   :=  SUATABELA.FIELDSVALUES&91;´CAMPOLIVRO´&93;  + 1;
   End;
end;


Tenta ai. Qualquer coisa so falar


Responder Citar

21/02/2006

Fknyght

Olha so, no componente do TQuickRep tem tres eventos que vc pode usar.
São eles :

BeforePrint -> Antes de Imprimir
AfterPrint -> Depois de Imprimir
StartPage -> Quando o quick report starta uma nova pagina

No beforeprint vc vai usar para verificar qual a ultima pagina impressa/livro. Dai se a ultima pagina for 99, a 100 deve ser o termo de encerramento. Tipo Voce pode montar um outro relatorio a parte para so imprimir o termo de abertura e encerramento e fazer sua chamada nele.

Var
  PaginasImpressas : Integer;

procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
  PaginasImpressas := 0; // zerar as pagina impressas
  uPaginaImpressa := PegaUltimaPaginaImpressa;
   If uPaginaImpressa = 99 then
     Begin
       ImprimirTermoDeEncerramento;
       ImprimirTermoDeAbertura;
     end;
end;


procedure TForm1.QuickRep1StartPage(Sender: TCustomQuickRep);
Begin
  Inc( PaginasImpressas );
End;


procedure TForm1.QuickRep1AfterPrint(Sender: TObject);
begin
    { Aqui voce soma as paginas impressas a qtde ja impressas no banco de dados }
    SUATABELA.FIELDSVALUES[´CAMPOPAGINA´&93; :=  SUATABELA.FIELDSVALUES&91;´CAMPOPAGINA´&93; + PaginasImpressas;
  IF SUATABELA.FIELDSVALUES&91;´CAMPOPAGINA´&93; >= 100  THEN
   Begin
      ImprimirTermoDeEncerramento;
       SUATABELA.FIELDSVALUES&91;´CAMPOPAGINA´&93; := SUATABELA.FIELDSVALUES&91;´CAMPOPAGINA´&93;  -  100;
       ImprimirTermoDeAbertura;
       SUATABELA.FIELDSVALUES&91;´CAMPOLIVRO´&93;   :=  SUATABELA.FIELDSVALUES&91;´CAMPOLIVRO´&93;  + 1;
   End;
end;


Tenta ai. Qualquer coisa so falar


Responder Citar

22/02/2006

Aroldo Zanela

Colega,

Não entendi exatamente sobre a sua dúvida, portanto, vou complementar a resposta do colega com a construção de uma classe TLivro (que deverá ser finalizado por vc) para incrementar número de linhas e páginas.

Classe TLivro:

type TLivro = class(TObject)
  FLivroAtual: SmallInt;
  FPaginaAtual: SmallInt;
  FLinhaAtual: SmallInt;
  FPaginasPPLivro: SmallInt;
  FLinhasPPagina: SmallInt;
  private
    procedure SetLivroAtual(const Value: SmallInt);
    procedure SetPaginaAtual(const Value: SmallInt);
    procedure SetLinhaAtual(const Value: SmallInt);
  public
    constructor Create;
    procedure AdicionaCertificado;
    property LivroAtual: SmallInt read FLivroAtual write SetLivroAtual;
    property PaginaAtual: SmallInt read FPaginaAtual write SetPaginaAtual;
    property LinhaAtual: SmallInt read FLinhaAtual write SetLinhaAtual;
    property LinhasPPagina: SmallInt read FLinhasPPagina;
    property PaginasPLivro: SmallInt read FPaginasPPLivro;
  end;
{ TLivro }

constructor TLivro.Create;
begin
  inherited Create;
  FPaginasPPLivro := 78;
  FLinhasPPagina  := 100;
end;

procedure TLivro.AdicionaCertificado;
begin
  if FLinhaAtual < FLinhasPPagina then
    Inc(FLinhaAtual)
  else
  begin
    FLinhaAtual := 1;
    Inc(FPaginaAtual);
  end;
end;

procedure TLivro.SetLinhaAtual(const Value: SmallInt);
begin
  FLinhaAtual   := Value;
  if FLinhaAtual>=FLinhasPPagina then
    PaginaAtual := PaginaAtual + 1;
end;

procedure TLivro.SetLivroAtual(const Value: SmallInt);
begin
  FLivroAtual   := Value;
end;

procedure TLivro.SetPaginaAtual(const Value: SmallInt);
begin
  FPaginaAtual  := Value;
end;


Adicione um TMemo (mmo1) e TButton (btn1) sobre o formulário. No OnCreate do formulário:

begin
  mmo1.Lines.Clear;
  Livro := TLivro.Create;
  Livro.LivroAtual    := 1;
  Livro.PaginaAtual   := 1;
end;


No OnClick do TButton:

  Livro.AdicionaCertificado;
  mmo1.Lines.Add(IntToStr(Livro.PaginaAtual)+ ´-´+ IntToStr(Livro.LinhaAtual));


Ah! Declare como variável local do form:

  Livro: TLivro;



Responder Citar

22/02/2006

Erivando

[quote:fdbfd05116=´Aroldo Zanela´]Colega,

Não entendi exatamente sobre a sua dúvida, portanto, vou complementar a resposta do colega com a construção de uma classe TLivro (que deverá ser finalizado por vc) para incrementar número de linhas e páginas.

Classe TLivro:

type TLivro = class(TObject)
  FLivroAtual: SmallInt;
  FPaginaAtual: SmallInt;
  FLinhaAtual: SmallInt;
  FPaginasPPLivro: SmallInt;
  FLinhasPPagina: SmallInt;
  private
    procedure SetLivroAtual(const Value: SmallInt);
    procedure SetPaginaAtual(const Value: SmallInt);
    procedure SetLinhaAtual(const Value: SmallInt);
  public
    constructor Create;
    procedure AdicionaCertificado;
    property LivroAtual: SmallInt read FLivroAtual write SetLivroAtual;
    property PaginaAtual: SmallInt read FPaginaAtual write SetPaginaAtual;
    property LinhaAtual: SmallInt read FLinhaAtual write SetLinhaAtual;
    property LinhasPPagina: SmallInt read FLinhasPPagina;
    property PaginasPLivro: SmallInt read FPaginasPPLivro;
  end;
{ TLivro }

constructor TLivro.Create;
begin
  inherited Create;
  FPaginasPPLivro := 78;
  FLinhasPPagina  := 100;
end;

procedure TLivro.AdicionaCertificado;
begin
  if FLinhaAtual < FLinhasPPagina then
    Inc(FLinhaAtual)
  else
  begin
    FLinhaAtual := 1;
    Inc(FPaginaAtual);
  end;
end;

procedure TLivro.SetLinhaAtual(const Value: SmallInt);
begin
  FLinhaAtual   := Value;
  if FLinhaAtual>=FLinhasPPagina then
    PaginaAtual := PaginaAtual + 1;
end;

procedure TLivro.SetLivroAtual(const Value: SmallInt);
begin
  FLivroAtual   := Value;
end;

procedure TLivro.SetPaginaAtual(const Value: SmallInt);
begin
  FPaginaAtual  := Value;
end;


Adicione um TMemo (mmo1) e TButton (btn1) sobre o formulário. No OnCreate do formulário:

begin
  mmo1.Lines.Clear;
  Livro := TLivro.Create;
  Livro.LivroAtual    := 1;
  Livro.PaginaAtual   := 1;
end;


No OnClick do TButton:

  Livro.AdicionaCertificado;
  mmo1.Lines.Add(IntToStr(Livro.PaginaAtual)+ ´-´+ IntToStr(Livro.LinhaAtual));


Ah! Declare como variável local do form:

  Livro: TLivro;
[/quote:fdbfd05116]

Amigo, Aroldo Zanela

O que eu estou precisando para o momento é somente o seguinte:

Quero ter armazenado em um banco dados IB os dados nos seguintes campos:

´LIVRO_NUMERO´VARCHAR(3),
´FOLHA_NUMERO´VARCHAR(3),
´REGISTRO_NUMERO´VARCHAR(10),
´TOTAL_FOLHAS_LIVRO´VARCHAR(3),
´TOTAL_REG_FOLHA´VARCHAR(3),


- no LIVRO_NUMERO informo o numero do livro atual (ele vai aumentar a cada livro preenchido)
- no FOLHA_NUMERO vai ser informado a folha atual que se encontra o livro (ele vai aumentar a cada folha preenchida)
- no REGISTRO_NUMERO vai ser informado sempre o ultimo numero gerado
- no TOTAL_FOLHAS_LIVRO informo quantas folhas tem o livro (sempre vai ser 100 ou poderá variar de acordo com o livro)
- no TOTAL_REG_FOLHA informo quantas linhas irá ter por folha (sempre vai ser 78 ou poderá variar de acordo com o livro)

a tal de função que mencionei antes, é para eu apartir destas informações fixas no banco de dados eu poder ir autoincrementando as outras através de um formulario ou no quickRep quando foi feita as impressões.

tipo assim a cada registro que será nova impressão no meu caso será um certificado gera um novo numero(REGISTRO_NUMERO) quando estes atingir sempre 78 registros (TOTAL_REG_FOLHA ) é hora de mudar apara a página 2 (FOLHA_NUMERO) e assim sem repetir o (REGISTRO_NUMERO) até atingir as 100 folhas(TOTAL_FOLHAS_LIVRO) e quando chegar neste final será solicitado um novo livro(LIVRO_NUMERO) mas aí o numero de registro continuará sem repetir(REGISTRO_NUMERO) mas agora zera o numero da folha para 1(FOLHA_NUMERO) e assim sucessivamente....

Deu para vc enteder Colega? estou precisandoi desta força!

Grato!


Responder Citar