TRAVA ACIONADA AUTOMATICAMENTE

SACOFRITO 07/04/2010 08:56:20
#338744
;;;;bom dia glr...
entao, ddepois de mta luta semana passada, nao consegui ainda fazer o select pra calcular os dias em atraso do cl iente no meu pdv
mas enfim, meu amigo me ensinou como faz e ta funcionando corretamente

agr a duvida é um outro pedido do cliente... ela quer q a trava devedor no cadastro de cliente seja acionada automáticamente, assim q o prazo para pagamento expire...

na trava do pdv, o sistema apenas aparece a travinha [Ô]cliende devedor há X dias[Ô]
mas eu gostaria q no cadastro do cliente, o objeto Devedor (X)sim () nao
seja acionado conforme o cliente se torne devedor


aqui esta a function do select pra travinha...

Set DSCAIXA = db.OpenRecordset([Ô]select * from caixa where isnull(pagamento) and tipo =[ô]E[ô] and codcli =[Ô] & SNCLIENTES!CODIGO & [Ô] order by vencimento [Ô], dbOpenDynaset)
If DSCAIXA.RecordCount > 0 Then
X = DateDiff([Ô]d[Ô], DSCAIXA!VENCIMENTO, Date)
Else
X = 0
End If



imagino q seja a msm coisa, algo parecido com :
Set DSCAIXA = db.OpenRecordset([Ô]select * from caixa where isnull(pagamento) and tipo =[ô]E[ô] and codcli =[Ô] & SNCLIENTES!CODIGO & [Ô] order by vencimento [Ô], dbOpenDynaset)
if recordcount >0 then
snclientes!trava = [Ô]Y[Ô]
else exit sub
end if

se for essa mesma a rotina, em q form ou em q evento do pdv eu teria q aplicar essa rotina?
EDERMIR 07/04/2010 09:55:36
#338750
Pense bem:
- O sistema não precisa acionar o cliente como DEVEDOR até que o cadastro dele seja solicitado.

Então, quando você fizer uma consulta no cliente, o objeto DEVEDOR deve ser marcado e um campo no BD deve ser atualizado. Havendo a necessidade de outros acessos no cadastro, então faça a atualização no campo do BD.

Para o cliente vai parecer automático, mas você não precisa atualizar o BD todos os dias.
SACOFRITO 07/04/2010 10:10:00
#338754
entao estou fuçando aqui.. e tentei colocar a rotina no evento change do codigo do cliente
...mas o BD nao atualiza assim que aparece, acredito q seria necessário acionar o botao gravar do form de cadastro do cliente
essa rortina até alterou a Opt devedor para sim...
mas no BD nao ocorre alteraçao no campo trava que deveria ficar como [Ô]Y[Ô]..a alteraçao na tela ta certinha mas nao grava automaticamente
tem alguma dica ?
aqui ta a rotina
Set DSCAIXA = db.OpenRecordset([Ô]select * from caixa where isnull(pagamento) and tipo = [ô]E[ô] and codcli= [Ô] & DS!codigo & [Ô] order by vencimento[Ô], dbOpenDynaset)
If DSCAIXA.RecordCount > 0 Then
DS!trava = [Ô]Y[Ô]
optyes.Value = True
[ô] ou cmdGravar_click
DS.Edit
Else: Exit Sub
End If
EDERMIR 07/04/2010 11:06:57
#338761
Sim.

Para não atualizar o BD sem necessidade, quando o CAMPO do BD estiver com valor diferente do objeto, faça o update AUTOMATICAMENTE:
If rs!TRAVA <> OBJETO.VALOR then
UPDATE tabela set TRAVA = [Ô] & OBJETO.VALOR
endif

Note que é um exemplo SIMPLES onde você deve adaptar para seus valores e nomes utilizados no sistema
SACOFRITO 07/04/2010 11:16:36
#338764
agr apareceu, entao vou deixar pra q ela grave se for necessário msm
tentei chamar a funçao gravar mas achei q nao seria viável gravar a cada mudança pq iria gravar cada registro equivalente ha um digito(eu acho)

ai tentei colocar a rotinazinha no keypress do codigo cliente e nao deu certo...
entao como ela tem um objeto novo de cadastra cada cliente dela com um vendedor, ela vai ter q acionar o botao gravar de qqr jeito

enfim, a opt sim é acionada qdo é digitado o codigo do cliente q tem pendencia.... e no caixa a msg de bloqueio aparece tb..entao acredito q esteja bom
mas obrigado pela dica EDERMIR
SACOFRITO 07/04/2010 11:29:20
#338766
Nao entendi direito seu código EDERMIR rs
tentei aqui mas nao consegui fazer o [ô]bendito[ô] gravar a mudança
EDERMIR 07/04/2010 11:42:29
#338769
Vou explicar [Ô]na teoria[Ô].

Você faz a pesquisa no cliente e verifica se ele é devedor ou não.

Sendo devedor, você atualiza um objeto na tela do sistema.

ANTES de atualizar o objeto na tela, ao verificar que ele é devedor our não, você compara a resposta com um campo no BD onde há a resposta da consulta anterior. Se os resultados são diferentes, então atualize o campo no BD.

Na prática:

rs.OPEN [Ô]select * from CLIENTE where codigo = [Ô] & text1.text
Wpagamentopendente = iif(<se ele estiver devendo>,1,0)
if rs!DEVEDOR <> Wpagamentopendente then
cnn.execute [Ô]update CLIENTE set DEVEDOR = [Ô] & Wpagamentopendente & [Ô] where codigo = [Ô] & text1.text
endif

(mais ou menos assim)
SACOFRITO 07/04/2010 12:32:27
#338777
até entendi
mas o problema é q qdo é devedor, marca Y na tabela e nao 1
e N para nao devedor
ai ainda nao to conseguindo atualizar o BD
EDERMIR 07/04/2010 14:18:29
#338791
IF CAMPO = [Ô]Y[Ô] then
Wdev1 = 1
else
Wdev = 0
endif

If ATRASADO = true then
Wdev2 = 1
else
Wdev2 = 0
endif

If Wdev1 <> Wdev2 then
CONNECTION.EXECUTE [Ô]UPDATE TABELA SET CAMPO = [ô][Ô] & iif(Wdev2 = 0,[Ô]N[Ô],[Ô]Y[Ô]) & [Ô][ô] where CODIGO_DO_CLIENTE = [Ô] & TEXT_ONDE_ESTA_O_CODIGO_DO_CLIENTE.text
endif
SACOFRITO 07/04/2010 15:27:55
#338796
Agora q deram outros1q consegui resolver, lembrei q o campo vendedor passa a ser obrigatorio ai se eu chamar a funçao gravar ele pede o vendedor.. e atualizar do jeito q vc ensinou eu nao consegui msm.. acho q vou deixar só para ser impresso na tela
pq a cliente nao vai msm conferir na tabela se está Y ou N
no momento o importante para ela é a trava no caixa onde mostra o cliente devedor e os dias em q ele esta com conta em aberto

qdo meu amigo da empresa estiver aqui, ele entened mt mais q eu, vou epdir uma ajuda pra fazer do jeito certo, mas por eqto obrigado pela boa vontade EDERMIR

Abraço
Tópico encerrado , respostas não são mais permitidas