Olá, pessoal!
Alguém aí teria o exemplo de uma tela de vendas com exibição dos itens do pedido tipo TBrowse ou DBEDIT()?
Valeu!
Exemplo programa vendas
Moderador: Moderadores
Amigo Sygecom,
Pra dizer a verdade eu desenvolvi um sistema em Clipper que tem uma tela de vendas na qual o usuário digita o número do pedido, a data, o nome do cliente, etc. Após serem digitados esses dados, o sistema abre em uma área da mesma tela um DBEDIT() contendo os itens do pedido, caso o pedido já tenha sido cadastrado.
O que acontece é que, no momento que os itens do pedido são trazidos de uma outra tabela usando "SET FILTER TO PEDIDO = nPEDIDO" o usuário tem que esperar de dois a 5 minutos para os itens serem carregados! Daí eu gostaria de ver como outras pessoas fariam uma tela de vendas para ver onde estou errando, porque, mesmo que o volume de dados seja grande, não poderia demorar tanto. Já vi sistemas como o SICADII (em clipper) da Star Soft que carregam com uma velocidade até que boa.
Se você puder me enviar algum exemplo desse tipo, aqui pelo Fórum mesmo, ou via e-mail. fico muito grato!
Valeu!
Pra dizer a verdade eu desenvolvi um sistema em Clipper que tem uma tela de vendas na qual o usuário digita o número do pedido, a data, o nome do cliente, etc. Após serem digitados esses dados, o sistema abre em uma área da mesma tela um DBEDIT() contendo os itens do pedido, caso o pedido já tenha sido cadastrado.
O que acontece é que, no momento que os itens do pedido são trazidos de uma outra tabela usando "SET FILTER TO PEDIDO = nPEDIDO" o usuário tem que esperar de dois a 5 minutos para os itens serem carregados! Daí eu gostaria de ver como outras pessoas fariam uma tela de vendas para ver onde estou errando, porque, mesmo que o volume de dados seja grande, não poderia demorar tanto. Já vi sistemas como o SICADII (em clipper) da Star Soft que carregam com uma velocidade até que boa.
Se você puder me enviar algum exemplo desse tipo, aqui pelo Fórum mesmo, ou via e-mail. fico muito grato!
Valeu!
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Tche, dependendo dah sua quantidade de registro o SET FILTER nao e uma boa opçao.....eu uso o DBFCDX e uso O ORDSCOPE e tenho um bom desempenho inclusive em rede....de uma pesquisa no forum que vc vai achar varias alternativa.......e volto e lhe afirmar que se esta com lentidao e pq o SET FILTER esta trancando tudo....
Abraços
Abraços
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Sem dúvida o SET FILTER é uma pedrada nos o...Eu nunca usei ele por causa da lentidão. Eu faço da forma como explico abaixo.
Eu crio um DBF para cada venda, quando ela é fechada envio os dados para um outro arquivo e excluo o arquivo.
Exemplo :
PEDIDO = 008461
ARQUIVO = PV008461.DBF
Dessa forma não preciso usar filtro nenhum.
Até logo.
Marcelo
Eu crio um DBF para cada venda, quando ela é fechada envio os dados para um outro arquivo e excluo o arquivo.
Exemplo :
PEDIDO = 008461
ARQUIVO = PV008461.DBF
Dessa forma não preciso usar filtro nenhum.
Até logo.
Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Amigos para tudo que é pesquisa no dbf costumno usar o DBSEEK()
talves vcs ñ usem o DBSEEK() por ter que ficar criando indice , mas na minha opnião ele funciona muito bem
****Meu amigo no seu caso eu faria assim :
function pesq()
use vendas
index on (CLIENT,30)+dtos(data)+str(PEDIDO) TO xpesq
use index xpesq
chave=(cCLIENT,30)+dtos(data)+str(nPEDIDO)
if dbseek(chave)
dbedit()
elseif
alert(´resgistro nao cadastrado´)
endif
return
seria uma coisa +/- assim !
talves vcs ñ usem o DBSEEK() por ter que ficar criando indice , mas na minha opnião ele funciona muito bem
****Meu amigo no seu caso eu faria assim :
function pesq()
use vendas
index on (CLIENT,30)+dtos(data)+str(PEDIDO) TO xpesq
use index xpesq
chave=(cCLIENT,30)+dtos(data)+str(nPEDIDO)
if dbseek(chave)
dbedit()
elseif
alert(´resgistro nao cadastrado´)
endif
return
seria uma coisa +/- assim !
C:\Xharbour\Xdev\Fw\VSX
Gente, vocês não vão acreditar!
Resolvi o problema mais ou menos assim:
// AQUI EM CIMA TEM A TABELA COM INDICE.
LOCATE FOR STR(PEDIDO) = STR(nPEDIDO)
IF FOUND()
DO WHILE STR(PEDIDO) = STR(nPEDIDO)
// AQUI FAÇO O QUE TENHO QUE FAZER.
ENDDO
ENDIF
// NO CASO DO DBEDIT DA TELA VENDAS
LOCATE FOR STR(PEDIDO) = STR(nPEDIDO)
IF FOUND()
DBEDIT()
ENDIF
AS DICAS DE VOCÊS FORAM BASTANTE ÚTEIS.
VALEU!
Resolvi o problema mais ou menos assim:
// AQUI EM CIMA TEM A TABELA COM INDICE.
LOCATE FOR STR(PEDIDO) = STR(nPEDIDO)
IF FOUND()
DO WHILE STR(PEDIDO) = STR(nPEDIDO)
// AQUI FAÇO O QUE TENHO QUE FAZER.
ENDDO
ENDIF
// NO CASO DO DBEDIT DA TELA VENDAS
LOCATE FOR STR(PEDIDO) = STR(nPEDIDO)
IF FOUND()
DBEDIT()
ENDIF
AS DICAS DE VOCÊS FORAM BASTANTE ÚTEIS.
VALEU!
Apesar de ter resolvido seu problema, considere usar no futuro o recurso de montagem de escopo. Tanto SET FILTER quanto LOCATE fazem varredura registro a registro e em algumas situações isso impõe uma lentidão muito grande no sistema. Em arquivos pequenos isso não acontece. É exatamente aí que entra o recurso de ESCOPO. Através dele você pode "diminuir" o tamanho de um banco de dados, tornando o uso de um SET FILTER praticamente instantâneo. Pesquise no fórum sobre a LIB SIX, que contém esse recurso, além de muitos outros.UKclipper escreveu:Resolvi o problema mais ou menos assim:
LOCATE FOR STR(PEDIDO) = STR(nPEDIDO)
[]'s
Maligno
http://www.buzinello.com/prg



