Impressão p/ arquivo TXT
Moderador: Moderadores
Impressão p/ arquivo TXT
Amigos,
tenho um sistema de emissão de pedidos de venda que imprime para arquivo pedido.txt, acontece que a cada pedido impresso o anterior é sobreposto pelo atual.
Teria como gerar o arquivo txt acrescentando o numero do pedido que é um campo númerico e variável? Exemplo: pedi0001.txt, pedi0002.txt, pedi0003.txt, tec...
desde já, agradeço
tenho um sistema de emissão de pedidos de venda que imprime para arquivo pedido.txt, acontece que a cada pedido impresso o anterior é sobreposto pelo atual.
Teria como gerar o arquivo txt acrescentando o numero do pedido que é um campo númerico e variável? Exemplo: pedi0001.txt, pedi0002.txt, pedi0003.txt, tec...
desde já, agradeço
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Sim Vinicius, é perfeitamente possível. Eu recomendaria que você possuisse um diretório exclusivo para armazenamento destes arquivos. Teria duas formas de fazer.
1. Tendo um contador que pudesse ser gravado. Podendo ser em um arquivo TXT, gravado através de funções de baixo nível ou até mesmo com MEMOWRIT. Também você poderia gravar em arquivo .MEM.
2. Você poderia utilizar a seguinte função que verifique qual é a próxima sequência:
Que verifica qual é o próximo arquivo em sequência, obtendo a proxima sequência bastaria você dar os nomes de arquivo conforme retorno dessa função.
Se a sua dúvida, era cómo fazer a sequência, agorea você tem. Mas se não souber como dar o nome de cada arquivo, poste o seu exemplo onde estão os comando que dão o nome do arquivo TXT.
1. Tendo um contador que pudesse ser gravado. Podendo ser em um arquivo TXT, gravado através de funções de baixo nível ou até mesmo com MEMOWRIT. Também você poderia gravar em arquivo .MEM.
2. Você poderia utilizar a seguinte função que verifique qual é a próxima sequência:
Código: Selecionar todos
VDIR:=DIRNAME()
VMARQ:=VDIR+"\PEDIDOS\PEDI"+STRZERO(VQFILE(VDIR+"\PEDIDOS","PEDI"),4,0)+".TXT"
FUNCTION VQFILE(VDIRE,VEXT)
FOR KI=1 TO 9999
IF !FILE(VDIRE+"\"+VEXT+STRZERO(KI,4,0)+".TXT")
VRET=KI
EXIT
ENDIF
IF KI=9999
ALERT("Está na hora de apagar mensagens.;Capacidade esgotada !.")
VRET=0
ENDIF
NEXT
RETURN VRETSe a sua dúvida, era cómo fazer a sequência, agorea você tem. Mas se não souber como dar o nome de cada arquivo, poste o seu exemplo onde estão os comando que dão o nome do arquivo TXT.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Beleza Pablo,
O problema é que este contador é o proprio numero do pedido que é gerado automaticamente (ultimo pedido+1), e o mais grave é que o sistema roda em rede com 7 vendedores gerando pedido on line.
Tudo bem, crio um diretório \pedidos par cada usuário, mas o arquivo teria que ter o numero do pedido com extensão .txt.
Facaria mais fácil???
O problema é que este contador é o proprio numero do pedido que é gerado automaticamente (ultimo pedido+1), e o mais grave é que o sistema roda em rede com 7 vendedores gerando pedido on line.
Tudo bem, crio um diretório \pedidos par cada usuário, mas o arquivo teria que ter o numero do pedido com extensão .txt.
Facaria mais fácil???
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Perfeito. Só não sei por quê você menciona em que pode ser um problema. Por acaso esse número repetiria ? Acho que não, não é ?. Então não vejo problema.Vinicius escreveu:O problema é que este contador é o proprio numero do pedido que é gerado automaticamente (ultimo pedido+1)
Por acaso tem um número para cada vendedor. Você precisaria separar por vendedores ?.o mais grave é que o sistema roda em rede com 7 vendedores gerando pedido on line. Tudo bem, crio um diretório \pedidos par cada usuário
Para cada vendedor, tem por acaso um número de cadastro ?. Se esse número for de 1 a 999, você poderia optar por colocar como nomeclatura da extensão do arquivo o próprio código do vendedor. Mas atenção tem que ser até o número 999.o arquivo teria que ter o numero do pedido com extensão .txt
A função que te passei é rápida e mais ainda irá fica se você desdobrar por vendedor. Outra coisa que queria te perguntar:
O número de pedido é de 1 a 9999, não é mais do que isso ?. Eu fiz o exemplo como máximo de 9999 em vista que você mencionou na sua primeira mensagem que gostaria que ficasse como nomeclatura de nome de arquivo como "PEDI"+STRZERO(9999,4,0)+".TXT". Porque se o número do pedido for maior que 9999, então acho melhor você gravar até sete dígito em padrão DOS ( 8+3 ) mas se passar de sete a numeração, aconselho gravar com nome LONGO. Tem função fa LFN que traduz do formato LONGO ao CURTO.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Ahhh agora entendí a dificuldade.filizola escreveu:considerando que voce só imprime o pedido depois que grava o numero do mesmo
Em tempo eu mandaria gerar esse relatório no C: (local) para que não houvesse possibilidade de outro terminal sobre-escrever o mesmo arquivo. Daí ficaria assim:filizola escreveu:Código: Selecionar todos
arq="ped"+strzero(nroped,3,0)+".txt" copy file pedido.txt to &arq
Código: Selecionar todos
// Exemplo 1
SET PRINTER TO ("C:\PEDIDOS\PEDIDO.TXT")
SET DEVICE TO PRINTCódigo: Selecionar todos
// Exemplo 2
SET PRINTER TO (VDIR+"\PEDIDO."+STRZERO(NR_VENDEDOR,3,0))
SET DEVICE TO PRINTCódigo: Selecionar todos
// Exemplo 1
arq=VDIR+"\PEDIDOS\PEDI"+strzero(nroped,4,0)+".TXT"
copy file ("C:\PEDIDOS\PEDIDO.TXT") to (ARQ)Código: Selecionar todos
// Exemplo 2
arq=VDIR+"\PEDIDOS\PEDI"+strzero(nroped,4,0)+"."+STRZERO(NR_VENDEDOR,3,0))
copy file (VDIR+"\PEDIDO."+STRZERO(NR_VENDEDOR,3,0)) to (ARQ)Lembrando que VDIR:=DIRNAME() // da CT.LIB ou pode conter o valor de "C:\PEDIDOS", mas para este ultimo, deverá ter certeza que são terminais com HDs e que a pasta esteja criada (senão existir a pasta, faça uma rotina de criação de diretório com DIRMAKE() também da CT.LIB).
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo,
Fiz esta rotina e não deu certo.
Consegui 90% de exito da seguinte forma:
SET PRINT TO ("PED"+STRZERO(NUMPED)+".TXT"
SET DEVICE TO PRINTER
beleza imprime o relatório em texto, gera o arquivo PED00001, mas quero que o sistema grave o arquivo PED00001 na pasta c:\pedido e
está gravando na pasta onde estou rodando o sistema, ou seja, pasta local. Executei o run copy da seguinte forma:
RUN COPY ("PED"+STRZERO(NUMPED)+".TXT" TO C:\PEDIDO
o arquivo não é gravado na pasta \PEDIDO e sim na pasta local.
E Agora???
Fiz esta rotina e não deu certo.
Consegui 90% de exito da seguinte forma:
SET PRINT TO ("PED"+STRZERO(NUMPED)+".TXT"
SET DEVICE TO PRINTER
beleza imprime o relatório em texto, gera o arquivo PED00001, mas quero que o sistema grave o arquivo PED00001 na pasta c:\pedido e
está gravando na pasta onde estou rodando o sistema, ou seja, pasta local. Executei o run copy da seguinte forma:
RUN COPY ("PED"+STRZERO(NUMPED)+".TXT" TO C:\PEDIDO
o arquivo não é gravado na pasta \PEDIDO e sim na pasta local.
E Agora???
Isso foi apenas um erro de digitação. Se ficasse assim, seria erro de sintaxe e com certeza ele teria reportado um erro de compilação. Ele diz apenas que o arquivo não foi gravado no lugar certo.SET PRINT TO "C:\PEDIDO\PED"+STRZERO(NUMPED)+".TXT"
SET DEVICE TO PRINTER
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- filizola
- Usuário Nível 3

- Mensagens: 421
- Registrado em: 19 Ago 2003 20:10
- Localização: Belo Horizonte/MG
o meu funciona assim
*isso é para que o pedido fique no c: local para nao sobrepor a nenhum *outro
set printer to c:\pedido.txt
no final
set printer to
close data
arq="ped"+strzero(nroped,3,0)+".txt"
copy file pedido.txt to Z:\sistemas\pedidos\&arq.
*isso é para que o pedido fique no c: local para nao sobrepor a nenhum *outro
set printer to c:\pedido.txt
no final
set printer to
close data
arq="ped"+strzero(nroped,3,0)+".txt"
copy file pedido.txt to Z:\sistemas\pedidos\&arq.
"Um passo a frente, e já não estará mais no mesmo lugar..."


