Impressão p/ arquivo TXT

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Vinicius
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 09 Fev 2008 15:18
Localização: SÃO PAULO

Impressão p/ arquivo TXT

Mensagem por Vinicius »

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
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

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:

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 VRET
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.
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.
Vinicius
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 09 Fev 2008 15:18
Localização: SÃO PAULO

Mensagem por Vinicius »

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???
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Vinicius escreveu:O problema é que este contador é o proprio numero do pedido que é gerado automaticamente (ultimo pedido+1)
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.
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
Por acaso tem um número para cada vendedor. Você precisaria separar por vendedores ?.
o arquivo teria que ter o numero do pedido com extensão .txt
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.

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.
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

Mensagem por filizola »

considerando que voce só imprime o pedido depois que grava o numero do mesmo no arquivo que controla o numero do pedido, basta voce fazer o seguinte.

arq="ped"+strzero(nroped,3,0)+".txt"
copy file pedido.txt to &arq.
"Um passo a frente, e já não estará mais no mesmo lugar..."
Vinicius
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 09 Fev 2008 15:18
Localização: SÃO PAULO

Mensagem por Vinicius »

Pablo,

Fiz desta forma e deu certo, o arquivo ficou ped+"numero pedido" (beleza).

Agora quando executo RUN COPY (arquivo.txt) c:\pedido, esta pasta \pedido fica vazia e o arquivo é gavado na pasta local, quando deveria ser gravado na pasta \pedidos para ficar melhor organizado. Pode me ajudar?
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

filizola escreveu:considerando que voce só imprime o pedido depois que grava o numero do mesmo
Ahhh agora entendí a dificuldade.
filizola escreveu:

Código: Selecionar todos

arq="ped"+strzero(nroped,3,0)+".txt"
copy file pedido.txt to &arq
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:

Código: Selecionar todos

// Exemplo 1
SET PRINTER TO ("C:\PEDIDOS\PEDIDO.TXT")
SET DEVICE TO PRINT
ou

Código: Selecionar todos

// Exemplo 2
SET PRINTER TO (VDIR+"\PEDIDO."+STRZERO(NR_VENDEDOR,3,0))
SET DEVICE TO PRINT
E depois:

Có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)
Dependerá saber se pode utilizar três dígitos para identificar cada vendedor. Acho que 999 é um número razoável dentro de uma rede de 7 terminais. Mas isso pode ser alterado também para ".TXT".

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.
Vinicius
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 09 Fev 2008 15:18
Localização: SÃO PAULO

Mensagem por Vinicius »

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???
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Vinicius escreveu: SET PRINT TO "C:\PEDIDO\PED"+STRZERO(NUMPED)+".TXT"
SET DEVICE TO PRINTER
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

SET PRINT TO "C:\PEDIDO\PED"+STRZERO(NUMPED)+".TXT"
SET DEVICE TO PRINTER
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.
[]'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!
Vinicius
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 09 Fev 2008 15:18
Localização: SÃO PAULO

Mensagem por Vinicius »

Maligno,

Ele não diz nada, não dá erro, gera o arquivo que eu quero, no formato desejado. O problema está no

RUN COPY ("PED"+STRZERO(NUMPED)+".TXT" TO C:\PEDIDO

quero que grave o arquivo na pasta \PEDIDO e ele grava na pasta que está rodando o programa.

Grato
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

Mensagem por filizola »

SET PRINTER TO "C:\PEDIDOS\PED"+STRZERO(NUMPED)+".TXT"
"Um passo a frente, e já não estará mais no mesmo lugar..."
Vinicius
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 09 Fev 2008 15:18
Localização: SÃO PAULO

Mensagem por Vinicius »

estou usando exetamente o comando:

SET PRINTER TO "C:\PEDIDOS\PED"+STRZERO(NUMPED)+".TXT"

e não da certo.
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

Mensagem por filizola »

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.
"Um passo a frente, e já não estará mais no mesmo lugar..."
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

Mensagem por filizola »

perdao faltou o

copy file C:\pedido.txt to Z:\sistemas\pedidos\&arq.
"Um passo a frente, e já não estará mais no mesmo lugar..."
Responder