acesso a dbf de terceiros

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Gelson
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 16 Abr 2005 17:04

acesso a dbf de terceiros

Mensagem por Gelson »

Preciso acessar um dbf de terceiros que é usados por outras máquinas da rede, pois faz tempos que pedi para criarem um relatório de NF emitidas no mês e nunca fizeram..

1º) Neste caso preciso usar algum parametro no meu fonte para não danificar ou não atrapalhar o acesso das outras máquinas ?

2º) No meu fonte gera um relatório de NF emitidas em um dado período porém de forma tradicional, como faço para que entre os nomes diferentes seja dado um espaço de umas duas linhas e colocado o total ?

ex:
nrazao valor
joaoc...... 1,00
joaoc..... 2,00
joaoc..... 3,00
total 6,00

// espaço duas linhas

joaod.... 2,00
joaod.... 10,00
joaod... 50,00
total 62,00

hoje ele está assim :
joaoc...... 1,00
joaoc..... 2,00
joaoc..... 3,00
joaod.... 2,00
joaod.... 10,00
joaod... 50,00
total... 68,00
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: acesso a dbf de terceiros

Mensagem por sygecom »

Gelson escreveu:1º) Neste caso preciso usar algum parametro no meu fonte para não danificar ou não atrapalhar o acesso das outras máquinas ?
Isso não tem problema desde que nem vc nem o outro sistema esteja usando em modo exclusivo....isso pensando que os dois são em clipper.
2º) No meu fonte gera um relatório de NF emitidas em um dado período porém de forma tradicional, como faço para que entre os nomes diferentes seja dado um espaço de umas duas linhas e colocado o total ?
Não entendi, vc quer dar duas linhas aonde ? no seu relatorio ? se for no relatorio...pode dar um :

Código: Selecionar todos


@ prow()+2,00 say " "
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Re: acesso a dbf de terceiros

Mensagem por Stanis Luksys »

Gelson escreveu:1º) Neste caso preciso usar algum parametro no meu fonte para não danificar ou não atrapalhar o acesso das outras máquinas ?
Precisa só abrir de modo compartilhado com SHARED, no entanto se o programa lá abriu como exclusivo, não dá. O mais indicado seria copiar o arquivo todo para outra lugar e trabalhar com o novo.
Gelson escreveu:2º) No meu fonte gera um relatório de NF emitidas em um dado período porém de forma tradicional, como faço para que entre os nomes diferentes seja dado um espaço de umas duas linhas e colocado o total ?
Não sei o que significa "forma tradicional", mas para pular uma linha, é só colocar "?" no local onde deseja.

Falou!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Gelson
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 16 Abr 2005 17:04

Mensagem por Gelson »

Óla, amigos do forum

Quanto ao dbf ser protegido ou não, vou pesquisar para ver as diferenças entre ser ou não ser protegido, para saber se ele é.

Chamei de tradicional porque não me veio a mente um nome melhor,
O relátorio gera assim, exemplo:

nome valor
carlos alberto 1,00
carlos alberto 2,00
carlos alberto 3,00
carlos batista 4,00
carlos batista 1,00
carlos celso 1,00
carlos celso 2,00

gostaria que quando nome mudasse fosse dado o espaço e ficasse assim

nome valor
carlos alberto 1,00
carlos alberto 2,00
carlos alberto 3,00
total 6,00

carlos batista 4,00
carlos batista 1,00
total 5,00

carlos celso 1,00
carlos celso 2,00
total 3,00

meu codigo ficou assim:

Código: Selecionar todos

  @4,4  SAY 'DATA'
  @4,14 SAY 'N. NF'
  @4,24 say 'NOME'
  @4,79 say 'VALOR'
  mfolha = mfolha + 1
  mlinha = 5
  end
 use nota2
 @mlinha,4   SAY NDATAEM
 @mlinha,14  SAY NNUMERONOT
 @mlinha,24  SAY NRAZAO
 @mlinha,68  SAY NVALORNOTA PICTURE '9,999,999,999.99'
 mlinha = mlinha + 1
  dbskip()
  end
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 »

Gelson escreveu:Quanto ao dbf ser protegido ou não, vou pesquisar para ver as diferenças entre ser ou não ser protegido, para saber se ele é.
Não. Os colegas se referem ao modo de abertura. Se o seu programa tentar abrir o arquivo em questão, ao mesmo tempo em que ele já se encontra aberto em modo exclusive em outra aplicação, logicamente, o acesso lhe será negado. Mas isso é fácil: tente abrir. Se não retornar erro, ótimo. Caso contrário, emita uma simples mensagem avisando da indisponibilidade temporária.

Esqueceram de falar: talvez você tenha de criar um índice temporário para ordenar de uma forma que talvez não exista nos índices do outro programa. Mas isso não é crítico. Só que terá de ser feito toda vez que alguém for emitir este relatório.

No demais, pra não causar prejuízo, basta não alterar nada no arquivo e fica tudo certo.

Para a questão do espaçamento do relatório também é simples: ao detectar a troca de nome, mande para a impressão um pulo de duas linhas, como o Leonardo sugeriu. Só que não precisa do espaço. Pode ser uma string nula que dá no mesmo.
[]'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!
Gelson
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 16 Abr 2005 17:04

Mensagem por Gelson »

O dbf não está em modo protegido, ainda bem.
ao detectar a troca de nome
Ontem a noite fiquei lendo a apostila do clipper 5.2 e não achei o comando que faz esta leitura de um campo "C". Pelo que entendi preciso usar esta função ou comando, para que o programa identifique quando o nome mudou para poder enviar o comando para pular as linhas.
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 »

Gelson escreveu:não achei o comando que faz esta leitura de um campo "C".
Como assim ? Não entendí isso.
Gelson escreveu:preciso usar esta função ou comando, para que o programa identifique quando o nome mudou para poder enviar o comando para pular as linhas.
Para saber se os lançamento se referem a mesma pessoa, você primeiramente deverá atribuir o NOME ou CODIGO_CLIENTE a uma variável. E conforme você faz o SKIP você verificará o próximo registro se é igual a essa variavél, caso contrário (ELSE) você faz pular uma linha.
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
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Pelo que entendi preciso usar esta função ou comando, para que o programa identifique quando o nome mudou para poder enviar o comando para pular as linhas.
Conforme você mostra no seu modêlo de relatório: você tem de imprimir o total por nome, não é? Para fazer isso você já tem que detectar quando aquele nome "acabou". Pois bem: ao imprimir o total, apenas acrescente mais duas linhas.
[]'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!
Gelson
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 16 Abr 2005 17:04

Mensagem por Gelson »

Maligno,

Hoje ele esta assim:
Nome valor
carlos alberto 1,00
carlos alberto 2,00
carlos alberto 3,00
carlos batista 4,00
carlos batista 1,00
carlos celso 1,00
carlos celso 2,00
Sem total por nome
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 »

Numa outra mensagem você mostrou que tinha totais. Então, sou obrigado a supor que os totais são apenas um planejamento ainda. Não foi desenvolvido. Pois bem, o esquema é como o Pablo disse: declare uma variável que armazenará os nomes ou códigos dos indivíduos. Assim que, num SKIP, você perceber a troca do nome, imprime os totais do sujeito, acrescentando as linhas separadoras.
[]'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!
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 »

Isso, mesmo. Comparando a variavel com o conteúdo do campo onde está a identificação dos individuos...

Código: Selecionar todos

VCLI:=(1->NOME)
SKIP
IF !((1->NOME)=VCLI)
   ? 
   ? "Total de "+ALLTRIM(VCLI)+": "+TRANSFORM(VTOTAL,"@E 9,999.99")
ENDIF
Quanto eu menciono (1->), quero me referir ao SELE 1 (a área em que você abriu o arquivo). esse alias, pode ser mudado, é claro.
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.
Gelson
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 16 Abr 2005 17:04

Mensagem por Gelson »

Olá amigos,

1º) Esta expresão abaixo está dizendo para remover os espaços em brancos que existerem no meu campo chamado Razão e em seguida pegar o valor numérico da variável vtotal e formata-la com as virgulas e o ponto separando as casas decimais . certo ?
? "Total de "+alltrim(razao)+" : "+transform(vtotal,"@E9,999.99")

Se for isto não entendi o porque de não estar funcionando, comentando ou não a linha no fonte nada muda.
Assim que, num SKIP, você perceber a troca do nome, imprime os totais do sujeito, acrescentando as linhas separadoras

Como proceder para que o total dos sujeitos não sejam acumulados ? Exemplo no total do segundo sujeito está sendo somado o total do primeiro sujeito, no total do terceito sujeito esta entrado o total do 1º mais o do 2º e assim vai.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

? "Total de "+alltrim(razao)+" : "+transform(vtotal,"@E9,999.99")

Se for isto não entendi o porque de não estar funcionando, comentando ou não a linha no fonte nada muda.
Veja que no exemplo que o Pablo postou essa linha esta dento de uma condição...lhe pergunto essa condição esta sendo executada ? pq se não tiver passando por dentro da condição....ele não vai mostrar o resultado...ou seja tanto faz vc ter essa Linha no fonte ou não...entendeu ?
Como proceder para que o total dos sujeitos não sejam acumulados ? Exemplo no total do segundo sujeito está sendo somado o total do primeiro sujeito, no total do terceito sujeito esta entrado o total do 1º mais o do 2º e assim vai.
A cada vez que vc apresentar um total logo abaixo vc pode zerar a variavel...segue abaixo um exemplo:

Código: Selecionar todos

IF !((1->NOME)=VCLI)
   ?
   ? "Total de "+ALLTRIM(VCLI)+": "+TRANSFORM(VTOTAL,"@E 9,999.99")
   vTOTAL=0
ENDIF
Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
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 »

amigo, como disse o maligno, crie um indice temporario.

use seu_arquivo_de_notas
index on nome,nf to temp for datanf>inicio-1 .and. datanf<fim+1

@ 01,01 say cabecalho
@ 02,01 say "nome valor"
@ 03,01 say repl("-",79)
lin=4
do while !eof()
nomep=nome
tnome=0
do while !eof() .and. nome=nomep
@ lin,01 say nomep
@ lin,40 say valor pict "@e 99,999.99"
++lin
tnome+=valor
skip
enddo
@ lin,40 say tnome pict "@e 99,999.99"
lin+=2
enddo


espero ter ajudado.
"Um passo a frente, e já não estará mais no mesmo lugar..."
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 »

sygecom escreveu:A cada vez que vc apresentar um total logo abaixo vc pode zerar a variavel
Isso aí Leonardo, isso também me lembrou que a variável VCLI (digamos) deve ser re-atribuida.

Código: Selecionar todos

IF !((1->NOME)=VCLI)
   ?
   ? "Total de "+ALLTRIM(VCLI)+": "+TRANSFORM(VTOTAL,"@E 9,999.99")
   VTOTAL=0
   VCLI:=(1->NOME)
ENDIF
Se for isto não entendi o porque de não estar funcionando
É porque a variável VCLI ficava sempre com o memsmo valor, é por isso que não funcionava.
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.
Responder