|
|
Mensagem do
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
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 ?
|
|
|
Mensagem do
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 |
|
|
Mensagem do
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
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 ?
|
|
|
Mensagem do
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
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. |
|
|
Mensagem do
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
|
|
|
Mensagem do
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
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. |
|
|
Mensagem do
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 |
|
|
Mensagem do
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 |
|
|
Mensagem do
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
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 |
|
|
Mensagem do
FERRER
em 18/04/2024, 17:07 h
Local: SP Registro: 16/04/2024 Postagens: 55 |
Beleza, obrigado por me ajudar! |
|
|
Mensagem do
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 ! |
|
|
Mensagem do
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 |
|
|
Mensagem do
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
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
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
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...
|
|
|
Mensagem do
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
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... |
|
|
Mensagem do
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
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]
|
|
|
Mensagem do
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
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. |
|
|
Mensagem do
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
|
|