Impressão de Cheques
Bom Dia,
Bom pessoal o cara apareceu aki no meu setor e diz que quer um programa de impressão de cheques pra no máximo segunda. Alguém tem alguma ideia de como que se faz isso? Se tiver por favor me ajudem. E eu já vi tb uma rotina que retorna o valor digitado por estenso, alguém poderia me passar esta rotina tb?
Desde já obrigado a todos que me ajudarem
Bom pessoal o cara apareceu aki no meu setor e diz que quer um programa de impressão de cheques pra no máximo segunda. Alguém tem alguma ideia de como que se faz isso? Se tiver por favor me ajudem. E eu já vi tb uma rotina que retorna o valor digitado por estenso, alguém poderia me passar esta rotina tb?
Desde já obrigado a todos que me ajudarem
Raphael Oliveira
Curtidas 0
Respostas
Anonymous
04/04/2003
eu utilizo um com impressão em impressoras a jato de tinta porém ele está atrelado a um sistema de tesouraria
se quizer apenas para impressão utilize um cadastro com o nome do credor, data e valor
vai abaixo uma unit de funcões que eu adaptei para isto
[color=blue:f9bdb636e9]unit funcoes;
interface
function extenso (valor: real; tipo:integer; tamanho:integer; nmoeda: array of string): string;
function dataextensa(data:Tdatetime; inicio:integer):string;
function cnpj(num: string): boolean;
function cpf(num: string): boolean;
implementation
uses
SysUtils, Dialogs;
function extenso (valor: real; tipo:integer; tamanho:integer; nmoeda: array of string): string;
var
Centavos, Centena, Milhar, Mi, Bi, Texto, msg : string;
i : integer;
const
Unidades: array[1..9] of string = (´Um´, ´Dois´, ´Três´, ´Quatro´, ´Cinco´,
´Seis´, ´Sete´, ´Oito´, ´Nove´);
Dez: array[1..9] of string = (´Onze´, ´Doze´, ´Treze´, ´Quatorze´, ´Quinze´,
´Dezesseis´, ´Dezessete´, ´Dezoito´, ´Dezenove´);
Dezenas: array[1..9] of string = (´Dez´, ´Vinte´, ´Trinta´, ´Quarenta´,
´Cinquenta´, ´Sessenta´, ´Setenta´,
´Oitenta´, ´Noventa´);
Centenas: array[1..9] of string = (´Cento´, ´Duzentos´, ´Trezentos´,
´Quatrocentos´, ´Quinhentos´, ´Seiscentos´,
´Setecentos´, ´Oitocentos´, ´Novecentos´);
function ifs(Expressao: Boolean; CasoVerdadeiro, CasoFalso: String): String;
begin
if Expressao
then result:=CasoVerdadeiro
else result:=CasoFalso;
end;
function MiniExtenso (trio: string): string;
var
Unidade, Dezena, Centena: string;
begin
Unidade:=´´;
Dezena:=´´;
Centena:=´´;
if (trio[2]=´1´) and (trio[3]<>´0´) then
begin
Unidade:=Dez[strtoint(trio[3])];
Dezena:=´´;
end
else
begin
if trio[2]<>´0´ then Dezena:=Dezenas[strtoint(trio[2])];
if trio[3]<>´0´ then Unidade:=Unidades[strtoint(trio[3])];
end;
if (trio[1]=´1´) and (Unidade=´´) and (Dezena=´´)
then Centena:=´Cem´
else
if trio[1]<>´0´
then Centena:=Centenas[strtoint(trio[1])]
else Centena:=´´;
result:= Centena + ifs((Centena<>´´) and ((Dezena<>´´) or (Unidade<>´´)), ´ e ´, ´´)
+ Dezena + ifs((Dezena<>´´) and (Unidade<>´´),´ e ´, ´´) + Unidade;
end;
begin
if (valor>999999999999.99) or (valor<0) then
begin
msg:=´O valor está fora do intervalo permitido.´;
msg:=msg+´O número deve ser maior ou igual a zero e menor que 999.999.999.999,99.´;
msg:=msg+´ Se não for corrigido o número não será escrito por extenso.´;
MessageDlg(msg,Mterror,[mbok],0);
result:=´´;
exit;
end;
if valor=0 then
begin
result:=´´;
Exit;
end;
Texto:=formatfloat(´000000000000.00´,valor);
Bi:=MiniExtenso(Copy(Texto,1,3));
result:=Bi;
if Bi<>´´ then begin
if strtofloat(copy(texto,1,3)) > 1 then
result := result + ´ Bilhões´
else
result := result + ´ Bilhão´;
if strtofloat(copy(texto,4,12))= 0 then begin
result := result +´ de ´+nmoeda[1];
exit;
end
else begin
result := result +´ ´;
end;
end;
Mi:=MiniExtenso(Copy(Texto,4,3));
if Mi<>´´ then begin
result := result + mi;
if strtofloat(copy(texto,4,3)) > 1 then
result := result + ´ Milhões ´
else
result := result + ´ Milhão ´;
if strtofloat(copy(texto,7,9))= 0 then begin
result := result +´ de ´+nmoeda[1];
exit;
end;
if (strtofloat(copy(texto,8,8))= 0) and (copy(texto,7,9) <> ´0´) then
result := result +´ e ´;
if (strtofloat(copy(texto,8,8))<> 0) and (copy(texto,7,1)<>´0´) then
result := result +´ ´;
end;
Milhar:=MiniExtenso(Copy(Texto,7,3));
if Milhar<>´´ then begin
result := result + milhar;
if strtofloat(copy(texto,10,6))= 0 then begin
result := result +´ Mil ´+nmoeda[1];
exit
end
else begin
result := result +´ Mil ´;
end;
end;
if (strtofloat(copy(texto,1,10))= 0) and (copy(texto,11,2) = ´00´) then
result := result +´ e ´;
Centena:=MiniExtenso(Copy(Texto,10,3));
Centavos:=MiniExtenso(´0´+Copy(Texto,14,2));
if (copy(texto,10,1)=´0´) and (strtofloat(copy(texto,8,2))<>0) then result := result +´ e ´;
if (Milhar+Centena <>´´) then result := result + Centena;
if (Milhar=´´) and (copy(texto,10,3)=´001´) then
result := result +´ ´+nmoeda[0]
else
if (copy(texto,10,3)<>´000´) then result := result +´ ´+nmoeda[1];
if Centavos=´´ then
begin
result := result +´ ´;
// Exit;
end
else
begin
if bi+mi+Milhar+Centena=´´ then
result := Centavos
else
result := result +´ e ´+Centavos;
if (copy(texto,14,2)=´01´) and (Centavos<>´´) then
result := result +´ ´+nmoeda[2]+´ ´
else
result := result +´ ´+nmoeda[3]+´ ´;
end;
if tipo = 2 then result := uppercase(result);
if tipo = 3 then result := lowercase(result);
if tamanho > 0 then begin
for i := 1 to (tamanho-length(result)) do begin
result := result + ´# ´;
end;
end;
end;
function dataextensa(data:tdatetime; inicio:integer): string;
var
dia, mes, ano : word;
Milhar, centena, texto: string;
const
sdia: array[1..31] of string = (´Primeiro´, ´Dois´, ´Tres´, ´Quatro´, ´Cinco´,
´Seis´, ´Sete´, ´Oito´, ´Nove´,´Dez´,´Onze´,
´Doze´, ´Treze´, ´Quatorze´, ´Quinze´,´Dezesseis´,
´Dezessete´, ´Dezoito´, ´Dezenove´,´Vinte´, ´Vinte e um´,
´Vinte e Dois´,´Vinte e Três´,´Vinte e Quatro´,´Vinte e Cinco´,
´Vinte e Seis´,´Vinte e Sete´,´Vinte e Oito´,´Vinte e Nove´,
´Trinta´,´Trinta e Um´);
Smes: array[1..12] of string = (´Janeiro´, ´Fevereiro´, ´Março´, ´Abril´,´Maio´, ´Junho´,
´Julho´,´Agosto´,´Setembro´,´Outubro´, ´Novembro´, ´Dezembro´);
Unidades: array[1..9] of string = (´Um´, ´Dois´, ´Tres´, ´Quatro´, ´Cinco´,
´Seis´, ´Sete´, ´Oito´, ´Nove´);
Dez: array[1..9] of string = (´Onze´, ´Doze´, ´Treze´, ´Quatorze´, ´Quinze´,
´Dezesseis´, ´Dezessete´, ´Dezoito´, ´Dezenove´);
Dezenas: array[1..9] of string = (´Dez´, ´Vinte´, ´Trinta´, ´Quarenta´,
´Cinquenta´, ´Sessenta´, ´Setenta´,
´Oitenta´, ´Noventa´);
Centenas: array[1..9] of string = (´Cento´, ´Duzentos´, ´Trezentos´,
´Quatrocentos´, ´Quinhentos´, ´Seiscentos´,
´Setecentos´, ´Oitocentos´, ´Novecentos´);
Function ifs(Expressao: Boolean; CasoVerdadeiro, CasoFalso: String): String;
begin
if Expressao
then result:=CasoVerdadeiro
else result:=CasoFalso;
end;
function MiniExtenso (trio: string): string;
var
Unidade, Dezena, Centena: string;
begin
Unidade:=´´;
Dezena:=´´;
Centena:=´´;
if (trio[2]=´1´) and (trio[3]<>´0´) then
begin
Unidade:=Dez[strtoint(trio[3])];
Dezena:=´´;
end
else
begin
if trio[2]<>´0´ then Dezena:=Dezenas[strtoint(trio[2])];
if trio[3]<>´0´ then Unidade:=Unidades[strtoint(trio[3])];
end;
if (trio[1]=´1´) and (Unidade=´´) and (Dezena=´´)
then Centena:=´Cem´
else
if trio[1]<>´0´
then Centena:=Centenas[strtoint(trio[1])]
else Centena:=´´;
result:= Centena + ifs((Centena<>´´) and ((Dezena<>´´) or (Unidade<>´´)), ´ e ´, ´´)
+ Dezena + ifs((Dezena<>´´) and (Unidade<>´´),´ e ´, ´´) + Unidade;
end;
begin
decodedate(data,ano,mes,dia);
Texto:=formatfloat(´000000´,ano);
if inicio = 1 then begin
if dia > 1 then
result := ´Aos ´ +sdia[dia] + ´ dias do Mês de ´+ smes[mes]+ ´ do ano de ´
else
Result := ´Ao ´ +sdia[dia] + ´ dia do Mês de ´+ smes[mes]+ ´ do ano de ´;
end
else begin
Result := sdia[dia] + ´do Mês de ´+ smes[mes]+ ´ de ´;
end;
Milhar:=MiniExtenso(Copy(Texto,1,3));
if Milhar<>´´ then begin
result := result + milhar + ´ Mil ´;
if (copy(texto,4,1)=´0´) and (copy(texto,5,2)<>´00´) then
result := result + ´e ´;
end;
Centena:=MiniExtenso(Copy(Texto,4,3));
result := result + centena;
end;
function cpf(num: string): boolean;
var
n1,n2,n3,n4,n5,n6,n7,n8,n9: integer;
d1,d2: integer;
digitado, calculado: string;
begin
n1:=StrToInt(num[1]);
n2:=StrToInt(num[2]);
n3:=StrToInt(num[3]);
n4:=StrToInt(num[5]);
n5:=StrToInt(num[6]);
n6:=StrToInt(num[7]);
n7:=StrToInt(num[9]);
n8:=StrToInt(num[10]);
n9:=StrToInt(num[11]);
d1:=n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10;
d1:=11-(d1 mod 11);
if d1>=10 then d1:=0;
d2:=d1*2+n9*3+n8*4+n7*5+n6*6+n5*7+n4*8+n3*9+n2*10+n1*11;
d2:=11-(d2 mod 11);
if d2>=10 then d2:=0;
calculado:=inttostr(d1)+inttostr(d2);
digitado:=num[13]+num[14];
if calculado=digitado then
cpf:=true
else
cpf:=false;
end;
function cnpj(num: string): boolean;
var
n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12: integer;
d1,d2: integer;
digitado, calculado: string;
begin
n1:=StrToInt(num[1]);
n2:=StrToInt(num[2]);
n3:=StrToInt(num[4]);
n4:=StrToInt(num[5]);
n5:=StrToInt(num[6]);
n6:=StrToInt(num[8]);
n7:=StrToInt(num[9]);
n8:=StrToInt(num[10]);
n9:=StrToInt(num[12]);
n10:=StrToInt(num[13]);
n11:=StrToInt(num[14]);
n12:=StrToInt(num[15]);
d1:=n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5;
d1:=11-(d1 mod 11);
if d1>=10 then d1:=0;
d2:=d1*2+n12*3+n11*4+n10*5+n9*6+n8*7+n7*8+n6*9+n5*2+n4*3+n3*4+n2*5+n1*6;
d2:=11-(d2 mod 11);
if d2>=10 then d2:=0;
calculado:=inttostr(d1)+inttostr(d2);
digitado:=num[17]+num[18];
if calculado=digitado then
cnpj:=true
else
cnpj:=false;
end;
end.[/color:f9bdb636e9]
como parametro vocâ passará o valor, o cumprimento da string que será preenchida com # (pode ser mudado no código), o tipo que identifica letra upper, lower ou pretty, e uma array contendo a descrição da moeda [´real´, ´reais´,´centavo´,´centavos´]
pode utilizar o qr para a impressão ou qrprinter se quizer fazer via código
se quizer apenas para impressão utilize um cadastro com o nome do credor, data e valor
vai abaixo uma unit de funcões que eu adaptei para isto
[color=blue:f9bdb636e9]unit funcoes;
interface
function extenso (valor: real; tipo:integer; tamanho:integer; nmoeda: array of string): string;
function dataextensa(data:Tdatetime; inicio:integer):string;
function cnpj(num: string): boolean;
function cpf(num: string): boolean;
implementation
uses
SysUtils, Dialogs;
function extenso (valor: real; tipo:integer; tamanho:integer; nmoeda: array of string): string;
var
Centavos, Centena, Milhar, Mi, Bi, Texto, msg : string;
i : integer;
const
Unidades: array[1..9] of string = (´Um´, ´Dois´, ´Três´, ´Quatro´, ´Cinco´,
´Seis´, ´Sete´, ´Oito´, ´Nove´);
Dez: array[1..9] of string = (´Onze´, ´Doze´, ´Treze´, ´Quatorze´, ´Quinze´,
´Dezesseis´, ´Dezessete´, ´Dezoito´, ´Dezenove´);
Dezenas: array[1..9] of string = (´Dez´, ´Vinte´, ´Trinta´, ´Quarenta´,
´Cinquenta´, ´Sessenta´, ´Setenta´,
´Oitenta´, ´Noventa´);
Centenas: array[1..9] of string = (´Cento´, ´Duzentos´, ´Trezentos´,
´Quatrocentos´, ´Quinhentos´, ´Seiscentos´,
´Setecentos´, ´Oitocentos´, ´Novecentos´);
function ifs(Expressao: Boolean; CasoVerdadeiro, CasoFalso: String): String;
begin
if Expressao
then result:=CasoVerdadeiro
else result:=CasoFalso;
end;
function MiniExtenso (trio: string): string;
var
Unidade, Dezena, Centena: string;
begin
Unidade:=´´;
Dezena:=´´;
Centena:=´´;
if (trio[2]=´1´) and (trio[3]<>´0´) then
begin
Unidade:=Dez[strtoint(trio[3])];
Dezena:=´´;
end
else
begin
if trio[2]<>´0´ then Dezena:=Dezenas[strtoint(trio[2])];
if trio[3]<>´0´ then Unidade:=Unidades[strtoint(trio[3])];
end;
if (trio[1]=´1´) and (Unidade=´´) and (Dezena=´´)
then Centena:=´Cem´
else
if trio[1]<>´0´
then Centena:=Centenas[strtoint(trio[1])]
else Centena:=´´;
result:= Centena + ifs((Centena<>´´) and ((Dezena<>´´) or (Unidade<>´´)), ´ e ´, ´´)
+ Dezena + ifs((Dezena<>´´) and (Unidade<>´´),´ e ´, ´´) + Unidade;
end;
begin
if (valor>999999999999.99) or (valor<0) then
begin
msg:=´O valor está fora do intervalo permitido.´;
msg:=msg+´O número deve ser maior ou igual a zero e menor que 999.999.999.999,99.´;
msg:=msg+´ Se não for corrigido o número não será escrito por extenso.´;
MessageDlg(msg,Mterror,[mbok],0);
result:=´´;
exit;
end;
if valor=0 then
begin
result:=´´;
Exit;
end;
Texto:=formatfloat(´000000000000.00´,valor);
Bi:=MiniExtenso(Copy(Texto,1,3));
result:=Bi;
if Bi<>´´ then begin
if strtofloat(copy(texto,1,3)) > 1 then
result := result + ´ Bilhões´
else
result := result + ´ Bilhão´;
if strtofloat(copy(texto,4,12))= 0 then begin
result := result +´ de ´+nmoeda[1];
exit;
end
else begin
result := result +´ ´;
end;
end;
Mi:=MiniExtenso(Copy(Texto,4,3));
if Mi<>´´ then begin
result := result + mi;
if strtofloat(copy(texto,4,3)) > 1 then
result := result + ´ Milhões ´
else
result := result + ´ Milhão ´;
if strtofloat(copy(texto,7,9))= 0 then begin
result := result +´ de ´+nmoeda[1];
exit;
end;
if (strtofloat(copy(texto,8,8))= 0) and (copy(texto,7,9) <> ´0´) then
result := result +´ e ´;
if (strtofloat(copy(texto,8,8))<> 0) and (copy(texto,7,1)<>´0´) then
result := result +´ ´;
end;
Milhar:=MiniExtenso(Copy(Texto,7,3));
if Milhar<>´´ then begin
result := result + milhar;
if strtofloat(copy(texto,10,6))= 0 then begin
result := result +´ Mil ´+nmoeda[1];
exit
end
else begin
result := result +´ Mil ´;
end;
end;
if (strtofloat(copy(texto,1,10))= 0) and (copy(texto,11,2) = ´00´) then
result := result +´ e ´;
Centena:=MiniExtenso(Copy(Texto,10,3));
Centavos:=MiniExtenso(´0´+Copy(Texto,14,2));
if (copy(texto,10,1)=´0´) and (strtofloat(copy(texto,8,2))<>0) then result := result +´ e ´;
if (Milhar+Centena <>´´) then result := result + Centena;
if (Milhar=´´) and (copy(texto,10,3)=´001´) then
result := result +´ ´+nmoeda[0]
else
if (copy(texto,10,3)<>´000´) then result := result +´ ´+nmoeda[1];
if Centavos=´´ then
begin
result := result +´ ´;
// Exit;
end
else
begin
if bi+mi+Milhar+Centena=´´ then
result := Centavos
else
result := result +´ e ´+Centavos;
if (copy(texto,14,2)=´01´) and (Centavos<>´´) then
result := result +´ ´+nmoeda[2]+´ ´
else
result := result +´ ´+nmoeda[3]+´ ´;
end;
if tipo = 2 then result := uppercase(result);
if tipo = 3 then result := lowercase(result);
if tamanho > 0 then begin
for i := 1 to (tamanho-length(result)) do begin
result := result + ´# ´;
end;
end;
end;
function dataextensa(data:tdatetime; inicio:integer): string;
var
dia, mes, ano : word;
Milhar, centena, texto: string;
const
sdia: array[1..31] of string = (´Primeiro´, ´Dois´, ´Tres´, ´Quatro´, ´Cinco´,
´Seis´, ´Sete´, ´Oito´, ´Nove´,´Dez´,´Onze´,
´Doze´, ´Treze´, ´Quatorze´, ´Quinze´,´Dezesseis´,
´Dezessete´, ´Dezoito´, ´Dezenove´,´Vinte´, ´Vinte e um´,
´Vinte e Dois´,´Vinte e Três´,´Vinte e Quatro´,´Vinte e Cinco´,
´Vinte e Seis´,´Vinte e Sete´,´Vinte e Oito´,´Vinte e Nove´,
´Trinta´,´Trinta e Um´);
Smes: array[1..12] of string = (´Janeiro´, ´Fevereiro´, ´Março´, ´Abril´,´Maio´, ´Junho´,
´Julho´,´Agosto´,´Setembro´,´Outubro´, ´Novembro´, ´Dezembro´);
Unidades: array[1..9] of string = (´Um´, ´Dois´, ´Tres´, ´Quatro´, ´Cinco´,
´Seis´, ´Sete´, ´Oito´, ´Nove´);
Dez: array[1..9] of string = (´Onze´, ´Doze´, ´Treze´, ´Quatorze´, ´Quinze´,
´Dezesseis´, ´Dezessete´, ´Dezoito´, ´Dezenove´);
Dezenas: array[1..9] of string = (´Dez´, ´Vinte´, ´Trinta´, ´Quarenta´,
´Cinquenta´, ´Sessenta´, ´Setenta´,
´Oitenta´, ´Noventa´);
Centenas: array[1..9] of string = (´Cento´, ´Duzentos´, ´Trezentos´,
´Quatrocentos´, ´Quinhentos´, ´Seiscentos´,
´Setecentos´, ´Oitocentos´, ´Novecentos´);
Function ifs(Expressao: Boolean; CasoVerdadeiro, CasoFalso: String): String;
begin
if Expressao
then result:=CasoVerdadeiro
else result:=CasoFalso;
end;
function MiniExtenso (trio: string): string;
var
Unidade, Dezena, Centena: string;
begin
Unidade:=´´;
Dezena:=´´;
Centena:=´´;
if (trio[2]=´1´) and (trio[3]<>´0´) then
begin
Unidade:=Dez[strtoint(trio[3])];
Dezena:=´´;
end
else
begin
if trio[2]<>´0´ then Dezena:=Dezenas[strtoint(trio[2])];
if trio[3]<>´0´ then Unidade:=Unidades[strtoint(trio[3])];
end;
if (trio[1]=´1´) and (Unidade=´´) and (Dezena=´´)
then Centena:=´Cem´
else
if trio[1]<>´0´
then Centena:=Centenas[strtoint(trio[1])]
else Centena:=´´;
result:= Centena + ifs((Centena<>´´) and ((Dezena<>´´) or (Unidade<>´´)), ´ e ´, ´´)
+ Dezena + ifs((Dezena<>´´) and (Unidade<>´´),´ e ´, ´´) + Unidade;
end;
begin
decodedate(data,ano,mes,dia);
Texto:=formatfloat(´000000´,ano);
if inicio = 1 then begin
if dia > 1 then
result := ´Aos ´ +sdia[dia] + ´ dias do Mês de ´+ smes[mes]+ ´ do ano de ´
else
Result := ´Ao ´ +sdia[dia] + ´ dia do Mês de ´+ smes[mes]+ ´ do ano de ´;
end
else begin
Result := sdia[dia] + ´do Mês de ´+ smes[mes]+ ´ de ´;
end;
Milhar:=MiniExtenso(Copy(Texto,1,3));
if Milhar<>´´ then begin
result := result + milhar + ´ Mil ´;
if (copy(texto,4,1)=´0´) and (copy(texto,5,2)<>´00´) then
result := result + ´e ´;
end;
Centena:=MiniExtenso(Copy(Texto,4,3));
result := result + centena;
end;
function cpf(num: string): boolean;
var
n1,n2,n3,n4,n5,n6,n7,n8,n9: integer;
d1,d2: integer;
digitado, calculado: string;
begin
n1:=StrToInt(num[1]);
n2:=StrToInt(num[2]);
n3:=StrToInt(num[3]);
n4:=StrToInt(num[5]);
n5:=StrToInt(num[6]);
n6:=StrToInt(num[7]);
n7:=StrToInt(num[9]);
n8:=StrToInt(num[10]);
n9:=StrToInt(num[11]);
d1:=n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10;
d1:=11-(d1 mod 11);
if d1>=10 then d1:=0;
d2:=d1*2+n9*3+n8*4+n7*5+n6*6+n5*7+n4*8+n3*9+n2*10+n1*11;
d2:=11-(d2 mod 11);
if d2>=10 then d2:=0;
calculado:=inttostr(d1)+inttostr(d2);
digitado:=num[13]+num[14];
if calculado=digitado then
cpf:=true
else
cpf:=false;
end;
function cnpj(num: string): boolean;
var
n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12: integer;
d1,d2: integer;
digitado, calculado: string;
begin
n1:=StrToInt(num[1]);
n2:=StrToInt(num[2]);
n3:=StrToInt(num[4]);
n4:=StrToInt(num[5]);
n5:=StrToInt(num[6]);
n6:=StrToInt(num[8]);
n7:=StrToInt(num[9]);
n8:=StrToInt(num[10]);
n9:=StrToInt(num[12]);
n10:=StrToInt(num[13]);
n11:=StrToInt(num[14]);
n12:=StrToInt(num[15]);
d1:=n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5;
d1:=11-(d1 mod 11);
if d1>=10 then d1:=0;
d2:=d1*2+n12*3+n11*4+n10*5+n9*6+n8*7+n7*8+n6*9+n5*2+n4*3+n3*4+n2*5+n1*6;
d2:=11-(d2 mod 11);
if d2>=10 then d2:=0;
calculado:=inttostr(d1)+inttostr(d2);
digitado:=num[17]+num[18];
if calculado=digitado then
cnpj:=true
else
cnpj:=false;
end;
end.[/color:f9bdb636e9]
como parametro vocâ passará o valor, o cumprimento da string que será preenchida com # (pode ser mudado no código), o tipo que identifica letra upper, lower ou pretty, e uma array contendo a descrição da moeda [´real´, ´reais´,´centavo´,´centavos´]
pode utilizar o qr para a impressão ou qrprinter se quizer fazer via código
GOSTEI 0
Raphael Oliveira
04/04/2003
Po valeu cara vou utilizar esta função aki qualquer coisa te falo mas muito obrigado pelo ajuda.
GOSTEI 0
Anonymous
04/04/2003
vai um exemplo de como uso pelo qr
//ext = label que coloca o valor por extenso
ext1.caption := copy(extenso(base.tbmovdebito.value,1,140,[´Real´,´Reais´,´Centavo´,´Centavos´]),1,70);
ext2.caption := copy(extenso(base.tbmovdebito.value,1,140,[´Real´,´Reais´,´Centavo´,´Centavos´]),71,140);
data.caption := formatdatetime(´´Cidade - uf, ´ dd ´ ´ mmmm ´ ´ yyyy´, base.tbmovdata.value);
os outros campos pode utilizar dbtext
pelo printer eu uso assim para os cheques do banco do brasil que vem em folha com quatro
procedure Tchelote.b1Click(Sender: TObject);
var linha,coluna,giro,comp,i:integer;
texto:string;
primeira:boolean;
begin
query1.sql.clear;
query1.SQL.Add(´select nrdoc, debito, data, historico from movto´);
query1.SQL.add(´ where codigo = ´+edit1.text + ´ and nrdoc >= ´+edit2.text +´ and nrdoc <=´+edit3.text);
query1.SQL.add(´ order by nrdoc ´);
Query1.Open;
linha := 18;
coluna := 5;
texto := ´´;
giro := 1;
primeira := true;
printer.BeginDoc;
while not query1.eof do begin
printer.canvas.font.name := ´arial black´;
printer.Canvas.Font.Size := 10;
texto := formatfloat(´R$ #,0.00´,query1debito.asfloat);
printer.Canvas.TextOut(2200+(200-printer.canvas.textwidth(texto)),linha,texto);
linha := linha + 40;
printer.Canvas.TextOut(50, linha, copy(query1historico.asstring,1,16));
linha := linha + printer.Canvas.TextHeight(´A´)+1;
texto := copy(extenso(Query1debito.value,1,140,[´Real´,´Reais´,´Centavo´,´Centavos´]),1,70);
printer.Canvas.TextOut(50, linha, copy(query1historico.asstring,17,16));
printer.Canvas.TextOut(730, linha, texto);
linha := linha + printer.Canvas.TextHeight(´A´)+15;
texto := copy(extenso(Query1debito.value,1,140,[´Real´,´Reais´,´Centavo´,´Centavos´]),71,140);
printer.Canvas.TextOut(100, linha, query1data.asstring);
printer.Canvas.TextOut(480, linha, texto);
linha := linha + printer.Canvas.TextHeight(´A´)+15;
printer.Canvas.TextOut(510, linha, query1historico.asstring);
linha := linha + printer.Canvas.TextHeight(´A´)+20;
printer.Canvas.TextOut(1350, linha, ´Ipumirim (SC),´);
printer.Canvas.TextOut(1750, linha, formatdatetime(´dd´,Query1data.value));
printer.Canvas.TextOut(1900, linha, formatdatetime(´mmmm´,Query1data.value));
printer.Canvas.TextOut(2340, linha, formatdatetime(´yy´,Query1data.value));
linha := linha + printer.Canvas.TextHeight(´A´)+200;
texto := formatfloat(´R$ #,0.00´,query1debito.asfloat);
printer.Canvas.TextOut(420-printer.canvas.textwidth(texto),linha,texto);
linha := linha + 312;
query1.Next;
if primeira then begin
if (giro = strtoint(edit4.text)) and not (query1.eof) then begin // pega o valor do edit caso a folha tenha menos de 4 cheques
printer.NewPage;
linha := 18;
primeira := false;
giro := 0;
end;
end
else begin
if (giro = 4) and not (query1.eof) then begin
printer.NewPage;
linha := 18;
giro := 0;
end;
end;
giro := giro + 1;
end;
printer.EndDoc;
query1.close;
end;
//ext = label que coloca o valor por extenso
ext1.caption := copy(extenso(base.tbmovdebito.value,1,140,[´Real´,´Reais´,´Centavo´,´Centavos´]),1,70);
ext2.caption := copy(extenso(base.tbmovdebito.value,1,140,[´Real´,´Reais´,´Centavo´,´Centavos´]),71,140);
data.caption := formatdatetime(´´Cidade - uf, ´ dd ´ ´ mmmm ´ ´ yyyy´, base.tbmovdata.value);
os outros campos pode utilizar dbtext
pelo printer eu uso assim para os cheques do banco do brasil que vem em folha com quatro
procedure Tchelote.b1Click(Sender: TObject);
var linha,coluna,giro,comp,i:integer;
texto:string;
primeira:boolean;
begin
query1.sql.clear;
query1.SQL.Add(´select nrdoc, debito, data, historico from movto´);
query1.SQL.add(´ where codigo = ´+edit1.text + ´ and nrdoc >= ´+edit2.text +´ and nrdoc <=´+edit3.text);
query1.SQL.add(´ order by nrdoc ´);
Query1.Open;
linha := 18;
coluna := 5;
texto := ´´;
giro := 1;
primeira := true;
printer.BeginDoc;
while not query1.eof do begin
printer.canvas.font.name := ´arial black´;
printer.Canvas.Font.Size := 10;
texto := formatfloat(´R$ #,0.00´,query1debito.asfloat);
printer.Canvas.TextOut(2200+(200-printer.canvas.textwidth(texto)),linha,texto);
linha := linha + 40;
printer.Canvas.TextOut(50, linha, copy(query1historico.asstring,1,16));
linha := linha + printer.Canvas.TextHeight(´A´)+1;
texto := copy(extenso(Query1debito.value,1,140,[´Real´,´Reais´,´Centavo´,´Centavos´]),1,70);
printer.Canvas.TextOut(50, linha, copy(query1historico.asstring,17,16));
printer.Canvas.TextOut(730, linha, texto);
linha := linha + printer.Canvas.TextHeight(´A´)+15;
texto := copy(extenso(Query1debito.value,1,140,[´Real´,´Reais´,´Centavo´,´Centavos´]),71,140);
printer.Canvas.TextOut(100, linha, query1data.asstring);
printer.Canvas.TextOut(480, linha, texto);
linha := linha + printer.Canvas.TextHeight(´A´)+15;
printer.Canvas.TextOut(510, linha, query1historico.asstring);
linha := linha + printer.Canvas.TextHeight(´A´)+20;
printer.Canvas.TextOut(1350, linha, ´Ipumirim (SC),´);
printer.Canvas.TextOut(1750, linha, formatdatetime(´dd´,Query1data.value));
printer.Canvas.TextOut(1900, linha, formatdatetime(´mmmm´,Query1data.value));
printer.Canvas.TextOut(2340, linha, formatdatetime(´yy´,Query1data.value));
linha := linha + printer.Canvas.TextHeight(´A´)+200;
texto := formatfloat(´R$ #,0.00´,query1debito.asfloat);
printer.Canvas.TextOut(420-printer.canvas.textwidth(texto),linha,texto);
linha := linha + 312;
query1.Next;
if primeira then begin
if (giro = strtoint(edit4.text)) and not (query1.eof) then begin // pega o valor do edit caso a folha tenha menos de 4 cheques
printer.NewPage;
linha := 18;
primeira := false;
giro := 0;
end;
end
else begin
if (giro = 4) and not (query1.eof) then begin
printer.NewPage;
linha := 18;
giro := 0;
end;
end;
giro := giro + 1;
end;
printer.EndDoc;
query1.close;
end;
GOSTEI 0
Raphael Oliveira
04/04/2003
Bom gostaria que me ajudassem mais um poko, tipo como que eu faço pra listar os cheques emitidos entre uma determinada data e joga-los dentro de um relatório para serem impressos.
Desde já obrigado
Desde já obrigado
GOSTEI 0
Anonymous
04/04/2003
utilize uma query do tipo
select numero, nome, valor from cheques
where data between :dataini and :datafin
se utilizar o qr defina o tamanho da página como a altura da folha de cheque e use como um relatório normal.
o problema é que os cheques serão impressos sequencialmente e se a impressora não tiver um bom carro é provável que ela faça a maior zorra com os cheques.
eu utilizo uma impressora hp 695 dando uma pausa em cada cheque impresso para evitar bagunça.
no caso do banco do brasil é mais fácil (exemplo com o tprinter) pois as folhas vem com quatro aí é só cuidar para não deixar puxar duas folhas.
se a impressão for em formulário contínuo aí a coisa é bem mais fácil
select numero, nome, valor from cheques
where data between :dataini and :datafin
se utilizar o qr defina o tamanho da página como a altura da folha de cheque e use como um relatório normal.
o problema é que os cheques serão impressos sequencialmente e se a impressora não tiver um bom carro é provável que ela faça a maior zorra com os cheques.
eu utilizo uma impressora hp 695 dando uma pausa em cada cheque impresso para evitar bagunça.
no caso do banco do brasil é mais fácil (exemplo com o tprinter) pois as folhas vem com quatro aí é só cuidar para não deixar puxar duas folhas.
se a impressão for em formulário contínuo aí a coisa é bem mais fácil
GOSTEI 0