Array
(
)

funçao p/ livro de registro...

Erivando
   - 21 fev 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


Fknyght
   - 21 fev 2006

Qual o gerador de relatorios que vc esta usando.

Fortes Report
Quick Report

ETC ETC ETC....


Erivando
   - 21 fev 2006


Citação:
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.


Fknyght
   - 21 fev 2006

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.

#Código


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;


#Código

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


#Código

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


Tenta ai. Qualquer coisa so falar


Fknyght
   - 21 fev 2006

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.

#Código


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;


#Código

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


#Código

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


Tenta ai. Qualquer coisa so falar


Aroldo Zanela
   - 22 fev 2006

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:

#Código


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:

#Código

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


No OnClick do TButton:

#Código

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


Ah! Declare como variável local do form:

#Código

Livro: TLivro;



Erivando
   - 22 fev 2006


Citação:
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:

#Código


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:

#Código

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


No OnClick do TButton:

#Código

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


Ah! Declare como variável local do form:

#Código

Livro: TLivro;


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!