|
Bem Vindo, Visitante
|
Todos os Fórums
ADVPL
|
Imprimir
Enviar Para um Amigo Precisa estar Logado
|
|
|
Assunto: |
RecLock |
|
Versão: |
12.1.7 |
|
Plataforma: |
Microsoft |
Complemento: |
|
|
DB: |
SQL Server |
Complemento: |
|
|
|
|
|
Mensagem do
HARDJF
em 04/01/2018, 08:46 h
Local: MG Registro: 10/05/2016 Postagens: 35 |
Criei uma função onde ela é chamada se o campo desconto é preenchido no pedido de venda (Edição).
Porém, a função não está alterando o campo customizado (C6_MOTDESC) no item do pedido de venda.
Alguém pode me dar um Help;
Segue o trecho;
Static Function Inserir(cComboBx1)
LOCAL aArea := GetArea()
DbSelectarea("SC6")
DbSetOrder(1)
dbSeek(xFilial("SC6")+ C6_NUM + C6_ITEM + C6_PRODUTO)
RECLOCK("SC6", .F.)
SC6->C6_MOTDESC := cComboBx1
MsUnlock()
MSGINFO("Motivo do desconto gravado com sucesso !!")
RestArea(aArea)
Return
|
|
|
Mensagem do
HARDJF
em 04/01/2018, 10:07 h
Local: MG Registro: 10/05/2016 Postagens: 35 |
A função está funcionando, mas chamo a função na validação de usuário do campo (C6_VALDESC), confirmo a alteração, nesse ponto meu campo C6_MOTDESC recebe o valor fornecida, porém quando salvo o formulário de pedido de venda, o campo C6_MOTDESC perde os dados.
Acredito que tenho que chamar a função em algum ponto de entrada ou posso fazer de outra forma ?
Estou iniciando agora e tenho algumas dúvidas. |
|
|
Mensagem do
JALBERTO
em 04/01/2018, 13:38 h
Local: RS Registro: 20/08/2009 Postagens: 167 |
Vou tentar explicar o que deve ser feito...
1-) Quando tu está incluindo um registro, no Banco de Dados não vai ter gravado na tabela SC6, portanto o DbSeek() não vai funcionar, esse é um grave problema;
2-) Tu pode fazer um Gatilho disparado pelo campo C6_VALDESC chamar uma função, essa função vai retornar um texto e esse gatilho vai gravar no campo C6_MOTDESC;
3-) Tu pode fazer uma validação no PE da gravação do Pedido, que valide se o campo C6_VALDESC tem valor maior do que zero e o campo C6_MOTDESC está vazio, dessa forma obrigaria o usuário a digitar algum texto no campo de Motivo de Desconto;
Dúvidas é só falar !
Jorge Alberto
|
|
|
Mensagem do
AD_CANDIDO
em 04/01/2018, 14:14 h
Local: SP Registro: 02/01/2018 Postagens: 3 |
Static Function Inserir(cComboBx1)
LOCAL aArea := GetArea()
DbSelectarea("SC6")
DbSetOrder(1)
dbSeek(xFilial("SC6")+ C6_NUM + C6_ITEM + C6_PRODUTO)
RECLOCK("SC6", .F.)
SC6->C6_MOTDESC := cComboBx1
//tenta na linha acima coloca isso (m->C6_MOTDESC := cComboBx1)
MsUnlock()
MSGINFO("Motivo do desconto gravado com sucesso !!")
RestArea(aArea)
Return |
|
|
Mensagem do
EMERSON.EN
em 04/01/2018, 15:10 h
Local: SP Registro: 20/08/2010 Postagens: 669 |
Quando você está editando um pedido de venda você não está editando a tabela SC6; você está editando o array aCols.
acredito que o ideal seria alterar o seu gatilho para preencher o campo do aCols e deixar que o sistema se encarregue de transferir o valor pra tabela SC6.
Quando você trabalha com a edição de pedidos (pelo padrão) o sistema torna a variável n disponível para uso. Essa variável indica a linha do item do pedido. Também são disponibilizados os arrays aHeader e aCols.
faça algo assim:
static function inserir(cComboBx1)
local nC6MOTDESC
if (type("aHeader") == "A") .and. (nC6MOTDESC := aScan( aHeader, {|x| upper(alltrim(x[2])) == "C6_MOTDESC"})) > 0
aCols[n,nC6MOTDESC] := cComboBx1
endif
Return
|
|
|
Mensagem do
HARDJF
em 04/01/2018, 16:31 h
Local: MG Registro: 10/05/2016 Postagens: 35 |
Jorge, obrigado pela explicação de fato o DbSeek não funcionou. |
|
|
Mensagem do
HARDJF
em 04/01/2018, 16:33 h
Local: MG Registro: 10/05/2016 Postagens: 35 |
AD_CANDIDO
Usando a variável de memória não obtive sucesso |
|
|
Mensagem do
HARDJF
em 04/01/2018, 16:34 h
Local: MG Registro: 10/05/2016 Postagens: 35 |
Emerson,
De fato vc tem razão, perfeita sua colocação !! realizei as alterações e funcionou perfeitamente.. |
|
|
Mensagem do
HARDJF
em 04/01/2018, 16:36 h
Local: MG Registro: 10/05/2016 Postagens: 35 |
obrigado a todos pelas respostas e o interesse em ajudar !! |
|
Para postar no Fórum você precisa efetuar o seu login ou se registrar
|
|