matricial

Delphi

17/08/2007

estou imprimindo com esta dica que achei na internet, mas tenho uma duvida como faço se os itens da nota ultrapassarem os 20 permitidos, como eu faço para imprimir o cabecalho da nota e continuar na outra pagina



procedure TFmPedidos.btNotaClick(Sender: TObject);
var
Valorbase:DOUBLE;
valoricms:DOUBLE;
CONTADOR:Integer;
IMPRESSORA:TextFile;

begin
{POSICIONA O PONTEIRO DA TABELA DE CLIENTES,
EM RELAÇÃO À TABELA DE PEDIDOS}
DmDados.tbClientes.FindKey([DMDADOS.Tbpedidosped_Cliente.Value]);
{Relaciona a variável impressora com a
lpt1: - Poderia ser LPT, COM1,// Servidor/impressora}
AssignFile(IMPRESSORA,\´LPT1:\´);
{abre a porta da impressão }
Rewrite(IMPRESSORA);
{envia caractere de controle para comprimir a impressão}
Write(IMPRESSORA);
{ Imprime o caractere \´x\´ (marcando Nota de Saída) e salta para próxima linha}
Writeln(Impressora,Format(\´¬80s\´,[\´x\´]));
{ salta duas linhas}
Writeln(impressora);
Writeln(Impressora);
{ Imprime a string \´Vendas\´, alinhado à esquerda\´-\´ dentro de uma área de quarenta caracteres}
Write(Impressora,Format(\´¬-40s\´,[\´Vendas\´]));
{ Imprime a string \´5.12\´, e salta para próxima linha}
WriteLn(Impressora,Format(\´¬10s\´, [\´5.12\´]));
{ Salta duas linhas}
Writeln(impressora);
Writeln(Impressora);
{ ---- Impressão dos Dados do Consumidor-----}
{ Imprime a Razão Social, alinhado à esquerda dentro de uma área de 90 caracteres}
Write (Impressora,Format(\´¬-90s\´, [ dmdados.tbClientesCli_Razao.Value]));
{ Imprime a CGC, alinhado à esquerda dentro de umaárea de 30 caracteres}
Write(Impressora,Format(\´¬-30s\´, [dmdados.tbClientesCli_CGC.Value]));
{ Imprime a Data de Emissão, baseada na data atual e salta para próxima linha}
Writeln(Impressora,DatetoStr(Date));
{ Salta uma linha}
Writeln(Impressora);
{ Imprime Endereço,alinhado à esquerda\´-\´ dentro de uma área de 70 carcateres}
Write(Impressora,Format(\´¬-70s\´,[dmdados.tbClientesCli_Endereco.Value]));
{Imprime Bairro, dentro de uma área de 35 carcateres}
Write(Impressora,Format(\´¬-35s\´,[dmdados.tbClientesCli_Bairro.Value]));
{ Imprime CEP, dentro de uma área de 15 carcateres}
Write(Impressora,Format(\´¬-15s\´, [dmdados.tbClientesCli_CEP.Value]));
{Imprime a Data de Saída, baseada na Hora Atual e Salta para próxima Linha}
Writeln(Impressora,DatetoStr(Date));
{ Salta uma linha}
Writeln(Impressora);
{ Imprime Munícipio, dentro de uma área de 60 caracteres}
Write(Impressora, Format(\´¬-60s\´, [dmdados.tbClientesCli_Cidade.Value]));
{ Imprime DD+Telefone, dentro de uma área de 30 caracteres}
Write(Impressora,Format(\´¬-30s\´,[dmdados.tbClientesCli_DDD.Value+\´ \´+ dmdados.tbClientesCli_Fone1.Value]));
{ Imprime Estado (UF), dentro de uma área de 5 caracteres}
Write(Impressora,Format(\´¬-5s\´,[dmdados.tbClientesCli_Estado.Value]));
{ Imprime Inscrição Estadual, dentro de uma área de 25 caracteres}
Write(Impressora,Format(\´¬-25s\´,[dmdados.tbClientesCli_Inscricao.value]));
{ Imprime a Hora de Saída, baseada na Hora Atual e Salta para próxima Linha}
Writeln(Impressora,TimetoStr(time));
{ Salta três linhas}
Writeln(Impressora);
Writeln(Impressora);
Writeln(Impressora);
{----- Fase de Emissão dos Itens da Nota -----}
{ Zero variáveis}
Valorbase:=0;
valoricms:=0;
{ Move o ponteiro de registro da tabela de Itens para o primeiro}
Dmdados.TbItens.First;
{ Início do Laço}
While not (Dmdados.tbItens.Eof) do
Begin
{ Imprime Código produto}
Write(Impressora,Format(\´¬-15s\´, [InttoStr(Dmdados.tbItensIT_Produto.Value)]));
{ Imprime Descrição do produto}
Write(Impressora,Format(\´¬-68s\´, [dmdados.TbitensProdutos.value]));
{ Imprime Quantidade Comercializada}
Write(Impressora,Format(\´¬12.2n\´,[Dmdados.tbItensIt_Quantidade.value]));
{ Imprime Preço Unitário produto}
Write(Impressora,Format(\´¬15.2m\´,[dmdados.tbitensit_valor.value]));
{ Imprime o valor Total do Item e salta uma linha}
Writeln(Impressora,Format(\´&15.2f\´, [dmdados.tbItensValorItem.Value]));
{ Soma o valor Base de Cálculo do ICMS}
Valorbase:=ValorBase + dmdados.tbItensValorItem.Value;
{ Próximo Item}
Dmdados.Tbitens.next;
end;
{ laço de Itens}
{ Salta o núemro de linhas necessárias para completar o espaço restante de itens}
For Contador:= 1 to (20- dmdados.tbItens.recordCount)do
Writeln(Impressora);
{ Salta duas Linhas}
Writeln(Impressora);
Writeln(Impressora);
{ Imprime o valor total dos produtos e salta uma linha}
Writeln(Impressora,Format(\´¬120.2f\´,[ValorBase]));
{ Salta duas linhas}
Writeln(Impressora);
Writeln(Impressora);
{ Cálculo do Imposto - baseada na Alíquota de 12¬}
valoricms:=(Valorbase*0.12);
{ Imprime Valor base}

Write(Impressora,Format(\´¬30.2f\´,[Valorbase]));
{ Imprime Valor ICMS e salta \´p/ próxima linha}
Write(Impressora, Format(\´¬30.2f\´,[ ValorICMS]));
{ Salta uma linha}
Writeln(Impressora);
{ Imprime o valor total da Nota e salta uma linha}
Writeln(Impressora,Format(\´¬120.2f\´,[Valorbase]));
{ Salta duas linhas}
Writeln(Impressora);
Writeln(Impressora);
{ Imprime informações transportador}
Writeln(Impressora,Format(\´¬-30s\´, [\´o mesmo\´]));
{ salta tr6es Linhas}
Writeln(Impressora);
Writeln(Impressora);
Writeln(Impressora);
{ Fecha a porta de impressão}
System.Close(Impressora);
end; { final da procedure}


Famatec

Famatec

Curtidas 0

Respostas

Leufmt

Leufmt

17/08/2007

Tu vai ter que contar os itens. Se ultrapassar os 20, então tu imprime novamento o cabeçalho e depois continua a impressão dos itens


GOSTEI 0
Famatec

Famatec

17/08/2007

blz vou implementar isto


GOSTEI 0
POSTAR