como criar arquivo texto
2ª DÚVIDA:
Tenho que criar esse lay-out abaixo e não sei como fazer.
Tenho que pegar o Pedido do meu sistema e criar um arquivo texto, sendo o nome do arquivo o próprio número do pedido, conforme está descrito abaixo:
A - Alfanumérico - Conteúdo em Caixa Alta (Letras Maiúsculas)
N – Numérico
O – Obrigatório
OBS: OS CAMPOS NÃO OBRIGATÓRIOS PREENCHER COM ESPAÇO EM BRANCO.
CLIENTE:
POSIÇÃO
NOME DO CAMPO
TAMANHO DO
CAMPO
EXEMPLO
A
N
O
01 a 01
CÓD.IDENTIF.REG.
01
C
X
X
02 a 11
N. CLIENTE
10
0000000001
X
X
12 a 51
NOME
40
X
X
52 a 76
APELIDO
25
X
X
77 a 96
CPF-CGC
20
X
X
97 a 116
RG
20
X
X
117 a 118
TIPO CLIENTE
02
A1 E ( A4-BLOQUEADA A VENDA )
X
X
119 a 133
VLRLIMCOMP
15
X
X
134 a 173
ENDEREÇO
40
X
X
174 a 193
BAIRRO
20
X
X
194 a 200
BRANCO
07
ITENS:
POSIÇÃO
NOME DO CAMPO
TAMANHO DO CAMPO
EXEMPLO
A
N
O
01 a 16
C.DE BARRA
16
123456----------
(ESP.EM BRANCO)
X
17 a 31
QUANTIDADE (SEM VÍRGULA E PONTO)
15
000000000001000
(03 CASAS DECIMAIS)
X
X
32 a 46
PREÇO (SEM VÍRGULA E PONTO)
15
000000000000125
(02 CASAS DECIMAIS)
X
X
VALOR DO DESCONTO:
POSIÇÃO
NOME DO CAMPO
TAMANHO DO CAMPO
EXEMPLO
A
N
O
01 a 01
CÓD.IDENTIF.REG.
01
D
X
X
02 a 16
DESCONTO (SEM VÍRGULA E PONTO)
15
000000000000125
(02 CASAS DECIMAIS)
X
X
OBS :
1- O NOME DO ARQUIVO,É O PRÓPRIO Nº DO PEDIDO COM A EXTENÇÃO.TXT.
2- CRIAR UMA PASTA : EXEMPLO( C:\PEDPDV\ ).CASO NÃO QUEIRA INFORMÁ O CLIENTE É SÓ NÃO INFORMÁ A LINHA “C”. COMO TAMBÉM O DESCONTO NA LINHA “D”
Fabio Gauna
Curtidas 0
Respostas
Guinther Pauli
25/11/2008
Arnoldo,
Os arquivos texto, devem ser montado concatenando várias variáveis, cada variável deve receber o valor especificado já com a formatação definida. Para iniciarmos vc precisar criar o arquivo texto e prepara-lo para a escrita. Para isso faça o seguinte:
Declare uma variável chamada Arq do tipo Text File, o NomeArq é uma variável tipo string que irá receber o numero do pedido mais o caminho onde deve ser criado o mesmo.
Var
Arq: TextFile;
NomeArq : String;
NomeArq := ‘c:\PEDPDV’ + NumeroPedido; O numeroPedido vc pega de uma query ou de onde vc receber o mesmo.
AssignFile(Arq, NomeArq + .TXT);
Rewrite(Arq); //abre o arquivo para escrita
Feito isso podemos começar a gravar escrever dentro do arquivo, como mostrado na linha abaixo. Declare uma variável para cara campo que vc deve preencher, exemplo:
Var
N. CLIENTE : String;
NOME: String;
APELIDO: String;
CPFCGC: String
RG: String;
Formate as variáveis conforma mostrado no arquivo de Layout. Por exemplo o nome do cliente precisa ter 40 posicoes, vc deve fazer o seguinte:
Passe o valor para a variável ,
Nome: valor do nome vindo de uma query
Crie uma função para preencher os espaços com brancos para completar as 40 posicoes como mostrado abaixo
function SpacesA(NS: Integer): String; onde NS
var
i : Integer;
begin
for i := 1 to NS do
St := St + ;
result := St;
end;
Declare uma variável para pegar a qtde de caracteres da string
Var
QtdeCaracteres: Integer;
QtdeCaracteres := 40 - Length(Nome); // o método Length retorna a qtde de caracteres de uma string estou diminuindo por 40 pois é o tamanho total que o campo deve ter.
Nome:= SpacesA(QtdeCaracteres); faça a variável nome que já esta com o nome do cliente receber os espacos necessarios para completar os 40.
Após fazer o passo acima com todas as variáveis e formatando-as conforme o arquivo de Layout basta vc ir escrevendo no arquivo. Como mostrado abaixo., o WriterLn sempre insere uma nova linha no arquivo.
WriteLn(Arq, ’01’ + // CÓD.IDENTIF.REG.
Nome +
Apelido +
CPFCgc);
Apos vc montar todo o arquivo, vc so preciso fechar o arquivo..
CloseFile(Arq)
Era isso, vc entendendo a idéia acima consegue montar se arquivo no padrão especificado no Layout.
Aguardamos seu retorno,
abs
GOSTEI 0
Arnoldo Lima
25/11/2008
Arq: TextFile;
NomeArq : String;
NomeArq := ‘c:\PEDPDV’ + NumeroPedido; O numeroPedido vc pega de uma query ou de onde vc receber o mesmo.
O que eu estou entendendo é que eu pegarei o número do pedido a partir da pasta ‘c:\PEDPDV’ , mas eu quero é fazer o contrário. Eu quero é gerar um arquivo texto no momento em que eu confirmar o Pedido. Daí pegar o número desse pedido e gravar dentro dessa pasta ‘c:\PEDPDV’ para ele irem acumulando dentro dela. Porque a partir daí eu quero pegar esse pedido e puxar para o sistema de TEF, ou seja, sistema de cartão de crétido do qual não é meu, é de outra pessoa.
Qual procedimento então?
Entrar no sistema dele "TEF" e pegar o pedido gravado em arquivo texto e gerar o CUPOUM FISCAL, para que o caixa não possa digitar o pedido novamente.
COMO É A PRIMEIRA VEZ QUE FAÇO CONSULTORIA, EU ME PERDI UM POUCO. NA REALIDADE ESSA SERIA MINHA SEGUNDA DÚVIDA. EU GOSTARIA, SE POSSÍVEL, COMEÇAR COM A OUTRA DÚVIDA QUE POSTEI, QUE PARA MIM É MAIS IMPORTANTE EU PODER CONECTAR LOGO MEU BANCO VIA INTERNET.
Aguardo respostas.
Arnoldo Nunes.
GOSTEI 0
Guinther Pauli
25/11/2008
Arnoldo,
Vc vai pegar o número do pedido de onde quiser, pode ser depois da confirmação do pedido, so vai mudar onde vc vai chamar a função que gera o arquivo texto.
Se vc entendeu a resposta anterior que era como montar um arquivo texto, nos confirme que está OK por favor e fechamos esse chamado que continua aberto.
Qto a sua outra dúvida precisamos da sua gentileza em abrir um outro chamado (regras do sistema que gerencia os chamados), ai poderemos auxiliá-lo Contamos com sua compreensão,
Aguardo seu retorno, abs
Qto a sua outra dúvida precisamos da sua gentileza em abrir um outro chamado (regras do sistema que gerencia os chamados), ai poderemos auxiliá-lo Contamos com sua compreensão,
Aguardo seu retorno, abs
GOSTEI 0
Arnoldo Lima
25/11/2008
Olá GUINTHER.
Obrigado por sua atenção.
Não, eu não entendi tudo que me passou para criar o arquivo texto.
Talvez algum exemplo fosse melhor.
Quanto ao "Se vc entendeu a resposta anterior que era como montar um arquivo texto, nos confirme que está OK por favor e fechamos esse chamado que continua aberto". Não sei como funciona aqui ainda por isso não entendo quando diz "por favor e fechamos esse chamado que continua aberto". Passar pra próxima se não resolvi ainda isso? Grato Arnoldo
Obrigado por sua atenção.
Não, eu não entendi tudo que me passou para criar o arquivo texto.
Talvez algum exemplo fosse melhor.
Quanto ao "Se vc entendeu a resposta anterior que era como montar um arquivo texto, nos confirme que está OK por favor e fechamos esse chamado que continua aberto". Não sei como funciona aqui ainda por isso não entendo quando diz "por favor e fechamos esse chamado que continua aberto". Passar pra próxima se não resolvi ainda isso? Grato Arnoldo
GOSTEI 0
Guinther Pauli
25/11/2008
Arnoldo,
Preparamos mais um exemplo para você, veja:
Criar um arquivo texto, passos básicos:
var
F:TextFile; Begin
AssignFile(f,c:\PEDPDV);
Rewrite(f); //abre o arquivo para escrita Writeln(f,Testando); escreve no arquivo e desce uma linha Write(f,CampoFormatado); //escreve no arquivo sem descer a linha
Closefile(f); //fecha o arquivo
End; ///Rotina para ler de um arquivo texto: var
f:TextFile;
linha:String; begin
AssignFile(f,c:\PEDPDV);
Reset(f); //abre o arquivo para leitura; While not eof(f) do begin
Readln(f,linha); //le do arquivo e desce uma linha. O conteúdo lido é transferido para a variável linha
Memo1.lines.add(linha);
End; Closefile(f);
end; Aguardamos seu retorno, abs
var
F:TextFile; Begin
AssignFile(f,c:\PEDPDV);
Rewrite(f); //abre o arquivo para escrita Writeln(f,Testando); escreve no arquivo e desce uma linha Write(f,CampoFormatado); //escreve no arquivo sem descer a linha
Closefile(f); //fecha o arquivo
End; ///Rotina para ler de um arquivo texto: var
f:TextFile;
linha:String; begin
AssignFile(f,c:\PEDPDV);
Reset(f); //abre o arquivo para leitura; While not eof(f) do begin
Readln(f,linha); //le do arquivo e desce uma linha. O conteúdo lido é transferido para a variável linha
Memo1.lines.add(linha);
End; Closefile(f);
end; Aguardamos seu retorno, abs
GOSTEI 0
Guinther Pauli
25/11/2008
Olá Arnoldo,
Mais alguma dúvida neste chamado ?
Se não ficou claro é só dizer.
Precisamos de seu retorno, ok ?
abs
GOSTEI 0
Arnoldo Lima
25/11/2008
Estou testando por parte o último exemplo que me enviou.
Ah! Ficou melhor assim.
Primeiro estou tentando criar o arquivo texto.
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
F:TextFile;
begin
AssignFile(F,c:\PEDPDV);
rewrite(F); //abre o arquivo para escrita
writeln(F,Testando); //escreve no arquivo e desce uma linha
//write(F,CampoFormatado); //escreve no arquivo sem descer a linha
closefile(F); //fecha o arquivo
end;
Coloquei o código acima num BitBtn para testar, mas dá uma mensagem "File acces denied" O que eu entendi: - Com esse código é para ser criado um arquivo texto de nome F dentro da pasta c:\PEDPDV. o comando rewrite(F) abre esse arquivo criado "F" e escreve a palavra "Testando" dentro dele. Depois o fecha com CloseFile(F). Sei também que se eu tivesse criado uma variável conforme abaixo daria certo var Caminho: String; onde Caminho := c:\PEDPDV; Poderia ter subitituído por: AssignFile(F,Caminho); Está certo?
Até aí beleza. Mas este: "write(F,CampoFormatado);". Que variável é essa: "CampoFormatado". E quanto ao erro: "File acces denied" ? Aguardo respostas Arnoldo Nunes
Var
F:TextFile;
begin
AssignFile(F,c:\PEDPDV);
rewrite(F); //abre o arquivo para escrita
writeln(F,Testando); //escreve no arquivo e desce uma linha
//write(F,CampoFormatado); //escreve no arquivo sem descer a linha
closefile(F); //fecha o arquivo
end;
Coloquei o código acima num BitBtn para testar, mas dá uma mensagem "File acces denied" O que eu entendi: - Com esse código é para ser criado um arquivo texto de nome F dentro da pasta c:\PEDPDV. o comando rewrite(F) abre esse arquivo criado "F" e escreve a palavra "Testando" dentro dele. Depois o fecha com CloseFile(F). Sei também que se eu tivesse criado uma variável conforme abaixo daria certo var Caminho: String; onde Caminho := c:\PEDPDV; Poderia ter subitituído por: AssignFile(F,Caminho); Está certo?
Até aí beleza. Mas este: "write(F,CampoFormatado);". Que variável é essa: "CampoFormatado". E quanto ao erro: "File acces denied" ? Aguardo respostas Arnoldo Nunes
GOSTEI 0
Guinther Pauli
25/11/2008
Arnoldo,
-> AssignFile(F,Caminho); Está certo?
Resposta: Certo, e o erro esta ocorrendo por q vc não deve ter a pasta C:\PEDPDV;
-> Até aí beleza.
Mas este: "write(F,CampoFormatado);". Que variável é essa: "CampoFormatado".
E quanto ao erro: "File acces denied" ? Resposta:O campo formatado significa as variáveis que irão receber os valores, vc lembra que
No outro post eu coloquei la as variáveis com o nome dos campos do seu arquivo
De layout que deve seguir? Enfim é o que vc precisa escrever no arquivo texto. Aguardamos seu retorno para encerrarmos esse chamado, abs
Mas este: "write(F,CampoFormatado);". Que variável é essa: "CampoFormatado".
E quanto ao erro: "File acces denied" ? Resposta:O campo formatado significa as variáveis que irão receber os valores, vc lembra que
No outro post eu coloquei la as variáveis com o nome dos campos do seu arquivo
De layout que deve seguir? Enfim é o que vc precisa escrever no arquivo texto. Aguardamos seu retorno para encerrarmos esse chamado, abs
GOSTEI 0
Arnoldo Lima
25/11/2008
Eu tenho sim a pasta "c:\PEDPDV". Primeiro a criei no Explorer, depois fiz
o procedimento. O erro continua. Não sei o que há.
Arnoldo
GOSTEI 0
Guinther Pauli
25/11/2008
Anoldo,
Fiz os testes aqui se vc montou assim:
Var
F:TextFile;
begin
AssignFile(F,c:\PEDPDV);
rewrite(F); //abre o arquivo para escrita
writeln(F,Testando); //escreve no arquivo e desce uma linha
//write(F,CampoFormatado); //escreve no arquivo sem descer a linha
closefile(F); //fecha o arquivo
end;
Adicione uma barra e nome do arquivo exemplo
Var
F:TextFile;
begin
AssignFile(F,’c:\PEDPDV\teste.txt’);
rewrite(F); //abre o arquivo para escrita
writeln(F,Testando); //escreve no arquivo e desce uma linha
//write(F,CampoFormatado); //escreve no arquivo sem descer a linha
closefile(F); //fecha o arquivo
end;
Funciona perfeitamente. Aguardo seu retorno para encerrarmos o chamado, abs
Var
F:TextFile;
begin
AssignFile(F,c:\PEDPDV);
rewrite(F); //abre o arquivo para escrita
writeln(F,Testando); //escreve no arquivo e desce uma linha
//write(F,CampoFormatado); //escreve no arquivo sem descer a linha
closefile(F); //fecha o arquivo
end;
Adicione uma barra e nome do arquivo exemplo
Var
F:TextFile;
begin
AssignFile(F,’c:\PEDPDV\teste.txt’);
rewrite(F); //abre o arquivo para escrita
writeln(F,Testando); //escreve no arquivo e desce uma linha
//write(F,CampoFormatado); //escreve no arquivo sem descer a linha
closefile(F); //fecha o arquivo
end;
Funciona perfeitamente. Aguardo seu retorno para encerrarmos o chamado, abs
GOSTEI 0
Arnoldo Lima
25/11/2008
ASSIM FUNCIONOU
Var
F:TextFile;
begin
AssignFile(F,’c:\PEDPDV\teste.txt’);
rewrite(F); //abre o arquivo para escrita
writeln(F,Testando); //escreve no arquivo e desce uma linha
//write(F,CampoFormatado); //escreve no arquivo sem descer a linha
closefile(F); //fecha o arquivo
end; Estava faltando era especificar o nome do arquivo, no caso "teste.txt" Agora, quanto ao "CampoFormatado" ? Como posso fazer? Tenho uma query com nome DM.TbPedido e nela tem os campos: CLIENTE VALORTOTAL DESCONTO etc semelhante ao layout acima. Como pego dessa query para formatar e gravar nesse arquivo texto conforme layout? Aguardo Arnoldo Nunes
F:TextFile;
begin
AssignFile(F,’c:\PEDPDV\teste.txt’);
rewrite(F); //abre o arquivo para escrita
writeln(F,Testando); //escreve no arquivo e desce uma linha
//write(F,CampoFormatado); //escreve no arquivo sem descer a linha
closefile(F); //fecha o arquivo
end; Estava faltando era especificar o nome do arquivo, no caso "teste.txt" Agora, quanto ao "CampoFormatado" ? Como posso fazer? Tenho uma query com nome DM.TbPedido e nela tem os campos: CLIENTE VALORTOTAL DESCONTO etc semelhante ao layout acima. Como pego dessa query para formatar e gravar nesse arquivo texto conforme layout? Aguardo Arnoldo Nunes
GOSTEI 0
Guinther Pauli
25/11/2008
Arnoldo,
Declare uma variável para cada campo que vc precisa preencher no arquivo. Exemplo:
Var
Cliente : String[40]; // aqui o 40 significa que a string não vai passar desse tamanho, se for maior do que isso ele corta.
ValorTotal : String;
Desconto: String;
Depois disso associe o a variável com o valor que vêm na Query
Cliente := Dm.TblPedidoNomeDoCampoQueTemONomeDoCliente.asString;
ValorTotal := FloatToStr(Dm.TblPedidoNomeDoCampoQueTemOValorTotal.asFloat);
Desconto := FloatToStr(Dm.TblPedidoNomeDoCampoQueTemODesconto.asFloat);
Feito isso basta formatar como a definição do Layout.
Por exemplo:
Crie uma função para preencher com espaços em branco para finalizar o tamanho do campo como mostrado abaixo
function AcresEspacosADireita(Valor: String; Qtde: Integer): String;
var
Tam: Integer;
Begin
Tam:= 0;
Valor:= Trim(Valor); /// Aqui tira qualquer espaço em branco que posso ter na variável cliente
Tam:= Length(Trim(Valor)); /// Aqui pega o tamanho da string
if Tam > 0 then
Qtde:= Qtde - Tam; // Aqui diminui o tamanho com o que precisa acrescentar
for I := 1 to Qtde do
begin
Valor:= Valor + ; // Aqui acrescenta o espaço a direita. Se for para acrescentar a esquerda so mude para Valor:= ‘ ‘ + Valor;
end;
Result:= Valor;
end;
Cliente:= AcresEspacosADireita(Cliente, 40); faça a variável Cliente que já esta com o nome do cliente receber os espacos necessarios para completar os 40.
E era isso, se vc precisar adiconar Zeros ao invés de espaços, crei outra função igualzinha a acima mas ao invés de acrescentar espaços colocar o Ex: Valor:= Valor + 0;
A formatação de cada campo esta definida no seu arquivo de Layout, basta seguir campo a campo e depois Concatenar tudo no arquivo texto como mostrado abaixo.
WriteLn(F, Cliente +
ValorTotal +
Desconto);
Vc pode fazer assim: WriteLn(F, Cliente + ValorTotal + Desconto) so coloquei abaixo para facilitar a visualização. Aguardo seu retorno, para finalizarmos o chamado. abs
Var
Cliente : String[40]; // aqui o 40 significa que a string não vai passar desse tamanho, se for maior do que isso ele corta.
ValorTotal : String;
Desconto: String;
Depois disso associe o a variável com o valor que vêm na Query
Cliente := Dm.TblPedidoNomeDoCampoQueTemONomeDoCliente.asString;
ValorTotal := FloatToStr(Dm.TblPedidoNomeDoCampoQueTemOValorTotal.asFloat);
Desconto := FloatToStr(Dm.TblPedidoNomeDoCampoQueTemODesconto.asFloat);
Feito isso basta formatar como a definição do Layout.
Por exemplo:
Crie uma função para preencher com espaços em branco para finalizar o tamanho do campo como mostrado abaixo
function AcresEspacosADireita(Valor: String; Qtde: Integer): String;
var
Tam: Integer;
Begin
Tam:= 0;
Valor:= Trim(Valor); /// Aqui tira qualquer espaço em branco que posso ter na variável cliente
Tam:= Length(Trim(Valor)); /// Aqui pega o tamanho da string
if Tam > 0 then
Qtde:= Qtde - Tam; // Aqui diminui o tamanho com o que precisa acrescentar
for I := 1 to Qtde do
begin
Valor:= Valor + ; // Aqui acrescenta o espaço a direita. Se for para acrescentar a esquerda so mude para Valor:= ‘ ‘ + Valor;
end;
Result:= Valor;
end;
Cliente:= AcresEspacosADireita(Cliente, 40); faça a variável Cliente que já esta com o nome do cliente receber os espacos necessarios para completar os 40.
E era isso, se vc precisar adiconar Zeros ao invés de espaços, crei outra função igualzinha a acima mas ao invés de acrescentar espaços colocar o Ex: Valor:= Valor + 0;
A formatação de cada campo esta definida no seu arquivo de Layout, basta seguir campo a campo e depois Concatenar tudo no arquivo texto como mostrado abaixo.
WriteLn(F, Cliente +
ValorTotal +
Desconto);
Vc pode fazer assim: WriteLn(F, Cliente + ValorTotal + Desconto) so coloquei abaixo para facilitar a visualização. Aguardo seu retorno, para finalizarmos o chamado. abs
GOSTEI 0
Guinther Pauli
25/11/2008
Arnoldo,
Alguma dúvida sobre este assunto ?
Podemos encerrar o chamado ?
abs
GOSTEI 0
Arnoldo Lima
25/11/2008
Obrigado por sua atenção.
Só peço que aguarde só mais um pouco enquanto faço alguns testes. Pode surgir alguma dúvida.
Arnoldo
GOSTEI 0
Guinther Pauli
25/11/2008
Arnoldo,
Preciso de sua definição se podemos encerrar o chamado,
Somos cobrados pelo tempo em que o chamado está em aberto,
Grato pela sua compreensão,
abs
GOSTEI 0
Rogerio Quessada
25/11/2008
Arnoldo,
Considerando que não obtivemos retorno sobre o êxito quanto ao esclarecimento de sua dúvida, estamos encerrando esse chamado,
De qualquer forma estamos a sua disposição,
abs
GOSTEI 0
Arnoldo Lima
25/11/2008
Testei o código.
procedure TFormSaidas.pedidotexto;
var
Arq: TextFile;
NomeArq: String;
CIR, CodCliente, Cliente, Apelido, CPFCGC, RG, TipoCliente, VlrLimComp, Endereco, Bairro, Branco: String;
CdeBarra, Quantidade, preco: String;
begin
NomeArq := C:\PEDPDV\ + MascEdit1.TexT;
AssignFile(Arq, NomeArq + .Txt); //COLOCA VARIÁVEL IGUAL AOS NOMES VINDOS DA QUERY
CIR:= C;
TipoCliente:= A1;
CodCliente:= DM.TbPedido.FieldByName(IdCliente).AsString;
Cliente:= DM.TbPedido.FieldByName(Cliente).AsString;
CPFCGC:= DM.TbPedido.FieldByName(cpfcnpj).AsString;
Endereco:= MascEdit16.Text;
Bairro:= MascEdit17.Text; Quantidade := FloatToStr(DM.TbSaida.fieldByName(Quantidade).AsFloat);
Preco := FloatToStr(DM.TbSaida.fieldByName(Preco).AsFloat);
//COLOCA FUNCTION
CodCliente:= preenchezero(CodCliente,10);
Cliente:= preenchebranco(Cliente,40);
Apelido:= preenchebranco(Apelido,25);
CPFCGC := preenchebranco(CPFCGC,20);
RG := preenchebranco(RG,20);
VlrLimComp:= preenchebranco(VlrLimComp,15);
Endereco := preenchebranco(Endereco,40);
Bairro := preenchebranco(Bairro,20);
Branco := preenchebranco(Branco,7); CdeBarra := preenchebranco(CdeBarra,16);
Quantidade := preenchezero(Quantidade,15);
Preco := preenchezero(Preco,15); //PREPARA ARQUIVO PARA ESCREVER
rewrite(Arq); //abre ou cria arquivo para escrita
writeLn (Arq,CIR + CodCliente + Cliente + Apelido + CPFCGC + RG + TipoCliente + VlrLimComp + Endereco + Bairro + Branco); writeLn (Arq,CdeBarra + Quantidade + Preco); //só coloca o 1º item, ou seja, uma linha. E os outros? CloseFile(Arq); //Como faço para adicionar todos os itens da venda?
end; Mas tenho ainda uma dúvida para fechar sobre esse assunto.
var
Arq: TextFile;
NomeArq: String;
CIR, CodCliente, Cliente, Apelido, CPFCGC, RG, TipoCliente, VlrLimComp, Endereco, Bairro, Branco: String;
CdeBarra, Quantidade, preco: String;
begin
NomeArq := C:\PEDPDV\ + MascEdit1.TexT;
AssignFile(Arq, NomeArq + .Txt); //COLOCA VARIÁVEL IGUAL AOS NOMES VINDOS DA QUERY
CIR:= C;
TipoCliente:= A1;
CodCliente:= DM.TbPedido.FieldByName(IdCliente).AsString;
Cliente:= DM.TbPedido.FieldByName(Cliente).AsString;
CPFCGC:= DM.TbPedido.FieldByName(cpfcnpj).AsString;
Endereco:= MascEdit16.Text;
Bairro:= MascEdit17.Text; Quantidade := FloatToStr(DM.TbSaida.fieldByName(Quantidade).AsFloat);
Preco := FloatToStr(DM.TbSaida.fieldByName(Preco).AsFloat);
//COLOCA FUNCTION
CodCliente:= preenchezero(CodCliente,10);
Cliente:= preenchebranco(Cliente,40);
Apelido:= preenchebranco(Apelido,25);
CPFCGC := preenchebranco(CPFCGC,20);
RG := preenchebranco(RG,20);
VlrLimComp:= preenchebranco(VlrLimComp,15);
Endereco := preenchebranco(Endereco,40);
Bairro := preenchebranco(Bairro,20);
Branco := preenchebranco(Branco,7); CdeBarra := preenchebranco(CdeBarra,16);
Quantidade := preenchezero(Quantidade,15);
Preco := preenchezero(Preco,15); //PREPARA ARQUIVO PARA ESCREVER
rewrite(Arq); //abre ou cria arquivo para escrita
writeLn (Arq,CIR + CodCliente + Cliente + Apelido + CPFCGC + RG + TipoCliente + VlrLimComp + Endereco + Bairro + Branco); writeLn (Arq,CdeBarra + Quantidade + Preco); //só coloca o 1º item, ou seja, uma linha. E os outros? CloseFile(Arq); //Como faço para adicionar todos os itens da venda?
end; Mas tenho ainda uma dúvida para fechar sobre esse assunto.
GOSTEI 0
Rogerio Quessada
25/11/2008
Arnoldo,
Faça um laço While para percorrer todos os registros da tabela, se vc estiver trabalhando com uma query que retorna esses dados, CdeBarra + Quantidade + Preço, faça o seguinte:
//COLOCA VARIÁVEL IGUAL AOS NOMES VINDOS DA QUERY
CIR:= C;
TipoCliente:= A1;
CodCliente:= DM.TbPedido.FieldByName(IdCliente).AsString;
Cliente:= DM.TbPedido.FieldByName(Cliente).AsString;
CPFCGC:= DM.TbPedido.FieldByName(cpfcnpj).AsString;
Endereco:= MascEdit16.Text;
Bairro:= MascEdit17.Text; Quantidade := FloatToStr(DM.TbSaida.fieldByName(Quantidade).AsFloat);
Preco := FloatToStr(DM.TbSaida.fieldByName(Preco).AsFloat);
//COLOCA FUNCTION
CodCliente:= preenchezero(CodCliente,10);
Cliente:= preenchebranco(Cliente,40);
Apelido:= preenchebranco(Apelido,25);
CPFCGC := preenchebranco(CPFCGC,20);
RG := preenchebranco(RG,20);
VlrLimComp:= preenchebranco(VlrLimComp,15);
Endereco := preenchebranco(Endereco,40);
Bairro := preenchebranco(Bairro,20);
Branco := preenchebranco(Branco,7); //PREPARA ARQUIVO PARA ESCREVER
rewrite(Arq); //abre ou cria arquivo para escrita
writeLn (Arq,CIR + CodCliente + Cliente + Apelido + CPFCGC + RG + TipoCliente + VlrLimComp + Endereco + Bairro + Branco); ACIMA VC ESTA PREENCHENDO O QUE VIER DA TABELA DE PEDIDO QUE DEVE APARECER APENAS UMA VEZ ! QryItem.First; While not QryItem.EOF do begin CdeBarra := preenchebranco(CdeBarra,16);
Quantidade := preenchezero(Quantidade,15);
Preco := preenchezero(Preco,15); writeLn (Arq,CdeBarra + Quantidade + Preco); QryItem.Next; end; ACIMA VC ESTA PREENCHENDO OS ITENS DENTRO DE UM LAÇO (WHILE) . VAI DO PRIMEIRO REGISTRO ATÉ O ULTIMO ESCREVENDO NO ARQUIVO SO A PARTE DO ITENS, O CABEÇARIO ESCREVEMOS APENAS UMA VEZ, COMO MOSTRADO ACIMA, POIS ESTA FORA DO LAÇO. CloseFile(Arq); Até o próximo chamado, abs
CIR:= C;
TipoCliente:= A1;
CodCliente:= DM.TbPedido.FieldByName(IdCliente).AsString;
Cliente:= DM.TbPedido.FieldByName(Cliente).AsString;
CPFCGC:= DM.TbPedido.FieldByName(cpfcnpj).AsString;
Endereco:= MascEdit16.Text;
Bairro:= MascEdit17.Text; Quantidade := FloatToStr(DM.TbSaida.fieldByName(Quantidade).AsFloat);
Preco := FloatToStr(DM.TbSaida.fieldByName(Preco).AsFloat);
//COLOCA FUNCTION
CodCliente:= preenchezero(CodCliente,10);
Cliente:= preenchebranco(Cliente,40);
Apelido:= preenchebranco(Apelido,25);
CPFCGC := preenchebranco(CPFCGC,20);
RG := preenchebranco(RG,20);
VlrLimComp:= preenchebranco(VlrLimComp,15);
Endereco := preenchebranco(Endereco,40);
Bairro := preenchebranco(Bairro,20);
Branco := preenchebranco(Branco,7); //PREPARA ARQUIVO PARA ESCREVER
rewrite(Arq); //abre ou cria arquivo para escrita
writeLn (Arq,CIR + CodCliente + Cliente + Apelido + CPFCGC + RG + TipoCliente + VlrLimComp + Endereco + Bairro + Branco); ACIMA VC ESTA PREENCHENDO O QUE VIER DA TABELA DE PEDIDO QUE DEVE APARECER APENAS UMA VEZ ! QryItem.First; While not QryItem.EOF do begin CdeBarra := preenchebranco(CdeBarra,16);
Quantidade := preenchezero(Quantidade,15);
Preco := preenchezero(Preco,15); writeLn (Arq,CdeBarra + Quantidade + Preco); QryItem.Next; end; ACIMA VC ESTA PREENCHENDO OS ITENS DENTRO DE UM LAÇO (WHILE) . VAI DO PRIMEIRO REGISTRO ATÉ O ULTIMO ESCREVENDO NO ARQUIVO SO A PARTE DO ITENS, O CABEÇARIO ESCREVEMOS APENAS UMA VEZ, COMO MOSTRADO ACIMA, POIS ESTA FORA DO LAÇO. CloseFile(Arq); Até o próximo chamado, abs
GOSTEI 0
Devmedia
25/11/2008
Arnoldo,
sua dúvida foi esclarecida, podemos concluir esse chamado?
sua dúvida foi esclarecida, podemos concluir esse chamado?
GOSTEI 0