funçao p/ livro de registro...
21/02/2006
0
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
Posts
21/02/2006
Fknyght
Fortes Report
Quick Report
ETC ETC ETC....
21/02/2006
Erivando
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.
21/02/2006
Fknyght
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´] := 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
21/02/2006
Fknyght
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´] := 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
22/02/2006
Aroldo Zanela
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;
22/02/2006
Erivando
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;
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!
Clique aqui para fazer login e interagir na Comunidade :)