acesso a dbf de terceiros
Moderador: Moderadores
acesso a dbf de terceiros
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
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
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: acesso a dbf de terceiros
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.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 ?
Não entendi, vc quer dar duas linhas aonde ? no seu relatorio ? se for no relatorio...pode dar um :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 ?
Código: Selecionar todos
@ prow()+2,00 say " "Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Re: acesso a dbf de terceiros
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:1º) Neste caso preciso usar algum parametro no meu fonte para não danificar ou não atrapalhar o acesso das outras máquinas ?
Não sei o que significa "forma tradicional", mas para pular uma linha, é só colocar "?" no local onde deseja.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 ?
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.
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.
Ó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:
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
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.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 é.
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!
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!
O dbf não está em modo protegido, ainda bem.
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.ao detectar a troca de nome
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Como assim ? Não entendí isso.Gelson escreveu:não achei o comando que faz esta leitura de um campo "C".
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.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.
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.
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.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.
[]'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!
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!
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!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Isso, mesmo. Comparando a variavel com o conteúdo do campo onde está a identificação dos individuos...
Quanto eu menciono (1->), quero me referir ao SELE 1 (a área em que você abriu o arquivo). esse alias, pode ser mudado, é claro.
Código: Selecionar todos
VCLI:=(1->NOME)
SKIP
IF !((1->NOME)=VCLI)
?
? "Total de "+ALLTRIM(VCLI)+": "+TRANSFORM(VTOTAL,"@E 9,999.99")
ENDIFUm 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.
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.
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.
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.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
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 ?? "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.
A cada vez que vc apresentar um total logo abaixo vc pode zerar a variavel...segue abaixo um exemplo: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.
Código: Selecionar todos
IF !((1->NOME)=VCLI)
?
? "Total de "+ALLTRIM(VCLI)+": "+TRANSFORM(VTOTAL,"@E 9,999.99")
vTOTAL=0
ENDIFLeonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- filizola
- Usuário Nível 3

- Mensagens: 421
- Registrado em: 19 Ago 2003 20:10
- Localização: Belo Horizonte/MG
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.
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..."
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Isso aí Leonardo, isso também me lembrou que a variável VCLI (digamos) deve ser re-atribuida.sygecom escreveu:A cada vez que vc apresentar um total logo abaixo vc pode zerar a variavel
Código: Selecionar todos
IF !((1->NOME)=VCLI)
?
? "Total de "+ALLTRIM(VCLI)+": "+TRANSFORM(VTOTAL,"@E 9,999.99")
VTOTAL=0
VCLI:=(1->NOME)
ENDIFÉ porque a variável VCLI ficava sempre com o memsmo valor, é por isso que não funcionava.Se for isto não entendi o porque de não estar funcionando
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.
