PERGUNTAS E RESPOSTAS
 
Bem Vindo, Visitante  Todos os Fórums
  ADVPL
Enviar para a impressoraImprimir  Enviar e-mail para um amigoEnviar Para um Amigo
Precisa estar Logado

Subject Assunto:
Atualizar Pedido de compras após inserir valor
Versão:
.
Plataforma:
.
Complemento:
DB:
.
Complemento:
InformaMedio.PRW (anexo)
2 - Copy.jpg (anexo)
item do pedido vs code.jpg (anexo)
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 17/04/2024, 10:41 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Bom dia, criei um botão dentro de uma tela desenvolvida no pedido de compras que ao clicar nele, ele insere o valor que está atribuído a uma variável que tem o valor de uma soma, em outro campo no banco de dados, porém ele atualiza apenas quando eu fecho a tela (pelo botão cancelar), ai abro novamente e o campo está com o novo valor.

Mas se eu clicar no botão salvar para fechar a tela, o campo não altera seu valor (continua zerado).

Precisava que ele atualizasse a tela, o banco, sem precisar fechar o pedido de compras, para que o valor apareça e se clicar em salvar, permanecer o valor novo

função e botão que está agora:

oBtnSalva := TButton():New(180, 270, "Salvar", oInfo,{|| fsalvar()}, 036, 016, , , ,.T., , , , , ,)

Static function fsalvar()

RECLOCK("SC7", .F.)

SC7->C7_XVALCOM := nXPreco2

MsUnlock()

return()

oBtnSalva := TButton():New(180, 270, "Salvar", oInfo,{|| fsalvar()}, 036, 016, , , ,.T., , , , , ,)

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 17/04/2024, 11:46 h
Local: PR  Registro: 04/07/2017  Postagens: 546
bom dia.

só com esta parte do fonte fica difícil sugerir uma correção.

vc não pode aenxar o fonte completo ?


Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 17/04/2024, 14:24 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Boa tarde, anexei o fonte e uma imagem mostrando o campo com o valor que desejo passar pra o campo que está circulado

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 17/04/2024, 14:25 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Ao clicar no botão, preciso que o campo circulado seja atualizado

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 17/04/2024, 16:41 h
Local: PR  Registro: 04/07/2017  Postagens: 546
ok, e como a função TESTECOMBINADO() é chamada ?

Por alguma tecla de função , validação de campo ou ponto de entrada ?


Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 17/04/2024, 16:42 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Ela é chamada via ponto de entrada
MA120BUT()

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 18/04/2024, 08:07 h
Local: PR  Registro: 04/07/2017  Postagens: 546
Bom dia

A logica é esta, tente ai !


***********************
Static function fsalvar()
***********************
Local nC7_XVALCOM := := ASCAN( _aHeader , { |x| Alltrim(x[2]) = "C7_XVALCOM" } )   // Posição do C7_XVALCOM no ACols



RECLOCK("SC7", .F.)
SC7->C7_XVALCOM := nXpreco2
MsUnlock()

// n               // Atualmente Posicionado

_aCols[n][nC7_XVALCOM] := nXpreco2   // Atualiza C7_XVALCOM no ACols posicionado

Return .T.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 18/04/2024, 08:38 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Bom dia, funcionou, porém quando está em um pedido com mais de um produto, ele não está inserindo o valor no campo do produto certo.

Exemplo: produtos: 1,2,3,4,5 - eu altero do produto 5 e quando salvo ele vai para o C7_VALXCOM do produto 1 ao invés de ir para o produto 5

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 18/04/2024, 09:19 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Estou anexando um print com explicação do que está acontecendo, acredito que alguma coisa na hora de posicionar o produto

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 18/04/2024, 10:51 h
Local: PR  Registro: 04/07/2017  Postagens: 546
então nI é o cara,,,rsss

tente ai.


***********************
Static function fsalvar()
***********************
Local nC7_XVALCOM := := ASCAN( _aHeader , { |x| Alltrim(x[2]) = "C7_XVALCOM" } )   // Posição do C7_XVALCOM no ACols



RECLOCK("SC7", .F.)
SC7->C7_XVALCOM := nXpreco2
MsUnlock()

// nI               // Atualmente Posicionado

_aCols[nI][nC7_XVALCOM] := nXpreco2   // Atualiza C7_XVALCOM no ACols posicionado

Return .T.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 18/04/2024, 11:06 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Está me retornando um erro, preciso declarar nI?

variable does not exist NI on FSALVAR(PMEDIOTESTE.PRW) 18/04/2024 11:01:53 line : 199

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 18/04/2024, 11:09 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Após o erro, se eu abro novamente, o campo foi alimentado, porém eu abri o item 6, e na tela desenvolvida ele trouxe os dados do item 1, e alimentou o C7_XVALCOM do item 1
não sei o que está acontecendo kkk
posiciono no 6 e ele tras os dados do 1, está alimentando o campo do que ele trás na tela e não o posicionado

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 18/04/2024, 11:17 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Não sei se ajuda, mas isso é quando clico em alterar pedido de compra

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 18/04/2024, 16:56 h
Local: PR  Registro: 04/07/2017  Postagens: 546
boa tarde.


Não, vc não declara nI

Deixa eu ver aqui qual a variável que controla este Acols e te passo

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 18/04/2024, 17:07 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Beleza, obrigado por me ajudar!

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 19/04/2024, 07:20 h
Local: PR  Registro: 04/07/2017  Postagens: 546

Bom dia.

Como vc pode ver no anexo que enviei a variável que controla o posicionamento do Acols é realmente a n, mas tem um detalhe ai, precisamos posicionar a SC7
no item que vc está posicionado no Acols.

Pra entendimento, quando vc desce ou sobe em qualquer grid do Protheus a tabela não anda junto, tem que posicionar ela de acordo com a posição da grid, assim:


***********************
Static function fsalvar()
***********************
Local nC7_XVALCOM := := ASCAN( _aHeader , { |x| Alltrim(x[2]) = "C7_XVALCOM" } )   Local nC7_ITEM    := ASCAN( _aHeader , { |x| Alltrim(x[2]) = "C7_ITEM" } )   

Local aAreaSC7    := SC7->(getArea()) // Salva order e posição na SC7

// Variável   n é a Posicão no Grid 1,2,3,4,5... depende quantos itens tem

// cA120NUM variável que contém o número do Pedido

// _aCols[n][nC7_ITEM ] nr do item do pedido de compras posicionado no Grid


SC7->(dbsetorder(01)     // Abre o order 1 da SC7 Filial+Pedido+Item
SC7->(dbseek(xfilial("SC7")+cA120NUM+_aCols[n][nC7_ITEM ]) // Posic Pedido+Item

RECLOCK("SC7", .F.)
SC7->C7_XVALCOM := nXpreco2 // Atualiza C7_XVALCOM na SC7 Ped+Item posicionado
MsUnlock()


_aCols[n][nC7_XVALCOM] := nXpreco2   // Atualiza C7_XVALCOM no ACols posicionado



restarea(aAreaSC7) // Devolve o order e posição na SC7

return NIL



Tente ai e depois comente o resultado.


Boa sorte !

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 19/04/2024, 08:29 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Bom dia, mesmo dessa forma, se eu abro qualquer produto, e clico em salvar, ele alimenta o campo do primeiro produto

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 19/04/2024, 09:14 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Debugando o fonte, [N] está vindo com valor 1

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 19/04/2024, 09:23 h
Local: PR  Registro: 04/07/2017  Postagens: 546
No grid do Pedido de Compras você se posicionou no item que deseja alterar ?

Se vc deixar posicionado no primeiro item do grid, N vai ser 1 mesmo.

Vc precisa descer até o item do pedido que você deseja alterar.

Aqui, eu desci até a quarta linha e N assumiu o valor 4

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 19/04/2024, 09:32 h
Local: PR  Registro: 04/07/2017  Postagens: 546
***********************
Static function fsalvar()
***********************
Local nC7_XVALCOM := ASCAN( _aHeader , { |x| Alltrim(x[2]) = "C7_XVALCOM" } )
Local nC7_ITEM    := ASCAN( _aHeader , { |x| Alltrim(x[2]) = "C7_ITEM" } )   

Local aAreaSC7    := SC7->(getArea()) // Salva order e posição na SC7

// Variável   n é a Posicão no Grid 1,2,3,4,5... depende quantos itens tem

// cA120NUM variável que contém o número do Pedido

// _aCols[n][nC7_ITEM ] nr do item do pedido de compras posicionado no Grid


SC7->(dbsetorder(01)     // Abre o order 1 da SC7 Filial+Pedido+Item
SC7->(dbseek(xfilial("SC7")+cA120NUM+_aCols[n][nC7_ITEM ]) // Posic Pedido+Item

RECLOCK("SC7", .F.)
SC7->C7_XVALCOM := nXpreco2 // Atualiza C7_XVALCOM na SC7 Ped+Item posicionado
MsUnlock()


_aCols[n][nC7_XVALCOM] := nXpreco2   // Atualiza C7_XVALCOM no ACols posicionado



restarea(aAreaSC7) // Devolve o order e posição na SC7

return NIL





Se está atualizando o Acols da linha 2 como vc monstrou no print, na SC7 tb deveria posicionar o item correspondente ao Acols posicionado e alterar o campo SC7->C7_XVALCOM deste item.

Faça um breakpoint na fsalvar, aqui

SC7->C7_XVALCOM := nXpreco2

e veja o item da SC7 que ele mostra quando vc está no item 2 do grid


Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 19/04/2024, 09:43 h
Local: PR  Registro: 04/07/2017  Postagens: 546
Faz o seguinte, mande o fonte completo MA120BUT.prw pra gente analisar...


Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 19/04/2024, 09:45 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Cliquei no segundo produto, [n] ficou = 2 e nC7_item = 1

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 19/04/2024, 10:43 h
Local: PR  Registro: 04/07/2017  Postagens: 546

Está correto !!!

n=2 porque vc está posicionado na segunda linha do Grid

nC7_item =1 porque Item é a primeira coluna do Grid

nC7_XVALCOM vai ser igual a 10 pois é a decima coluna do Grid


Faz o seguinte, mande o fonte completo MA120BUT.prw pra gente analisar...

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 19/04/2024, 14:36 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Boa tarde, o problema estava na minha tela desenvolvida, eu estava passando o valor das variaveis sem pegar a posição:

cCodigo := SC7->C7_PRODUTO
Troquei por:
nPosProd:= ASCAN( aHeader , { |x| Alltrim(x[2]) = "C7_PRODUTO"})
cCodigo := := aCols[n][nPosProd]

E assim por diante

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 19/04/2024, 15:29 h
Local: PR  Registro: 04/07/2017  Postagens: 546
ok, só corrige ai....


cCodigo := := aCols[n][nPosProd]



O Correto é

cCodigo := aCols[n][nPosProd]



Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 19/04/2024, 15:50 h
Local: SP  Registro: 16/04/2024  Postagens: 55
Boa tarde, tenho 2 botoes que habilitam para alteração os 2 campos, teria como eu fazer, exemplo: alterei o valor do campo que o botao 1 altera,ai clico no botao 2 para alterar o valor do campo 2, e o valor do primeiro campo voltar a ter o valor que ele tinha antes de eu altera-lo?

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 19/04/2024, 19:37 h
Local: PR  Registro: 04/07/2017  Postagens: 546
boa noite.

abra outro post por favor e encerre este,

senão o post vai ficar enorme e com 2 assuntos.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário FERRER FERRER em 22/04/2024, 08:57 h
Local: SP  Registro: 16/04/2024  Postagens: 55
bom dia.
beleza, obrigado pela ajuda

Para postar no Fórum você precisa efetuar o seu login ou se registrar

 Mudar para Fórum

 

 

 
 
   
Pagina Principal Shopping PROTHEUS Tire suas duvidas Vagas Microsiga em todo Brasil Aprofunde seus conhecimentos Noticias Online Fale Conosco Pagina Principal