Exemplo programa vendas

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

UKclipper
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 13 Fev 2007 16:29

Exemplo programa vendas

Mensagem por UKclipper »

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

Mensagem por sygecom »

Amiguinho......

Qual sua duvida ?? o problema esta na logica ??? se quiser posso colcoar varios exemplos aqui....mas me diga para que seguimento vc quer ??

Abraços
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
UKclipper
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 13 Fev 2007 16:29

Mensagem por UKclipper »

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

Mensagem por sygecom »

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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

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
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)
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

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 !
C:\Xharbour\Xdev\Fw\VSX
UKclipper
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 13 Fev 2007 16:29

Mensagem por UKclipper »

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!
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 »

UKclipper escreveu:Resolvi o problema mais ou menos assim:
LOCATE FOR STR(PEDIDO) = STR(nPEDIDO)
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.

[]'s
Maligno
http://www.buzinello.com/prg
Responder