Imprimi Página | Fechar janela

Atualizar Pedido de compras após inserir valor

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: ADVPL
Descrição do Forum: Dúvidas sobre a programação em ADVPL
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=44499
Data da Impressão: segunda-feira, 13 de janeiro de 2025 at 18:10


Topico: Atualizar Pedido de compras após inserir valor

Postado por: FERRER
Assunto: Atualizar Pedido de compras após inserir valor
Data Postagem: quarta-feira, 17 de abril de 2024 at 10:41

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., , , , , ,)


Respostas:

Postado Por: ROBERTOMEN
Data Postagem: quarta-feira, 17 de abril de 2024 at 11:46

bom dia.

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

vc não pode aenxar o fonte completo ?





Postado Por: FERRER
Data Postagem: quarta-feira, 17 de abril de 2024 at 14:24

Boa tarde, anexei o fonte e uma imagem mostrando o campo com o valor que desejo passar pra o campo que está circulado



Postado Por: FERRER
Data Postagem: quarta-feira, 17 de abril de 2024 at 14:25

Ao clicar no botão, preciso que o campo circulado seja atualizado



Postado Por: ROBERTOMEN
Data Postagem: quarta-feira, 17 de abril de 2024 at 16:41

ok, e como a função TESTECOMBINADO() é chamada ?

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





Postado Por: FERRER
Data Postagem: quarta-feira, 17 de abril de 2024 at 16:42

Ela é chamada via ponto de entrada
MA120BUT()



Postado Por: ROBERTOMEN
Data Postagem: quinta-feira, 18 de abril de 2024 at 08:07

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.



Postado Por: FERRER
Data Postagem: quinta-feira, 18 de abril de 2024 at 08:38

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




Postado Por: FERRER
Data Postagem: quinta-feira, 18 de abril de 2024 at 09:19

Estou anexando um print com explicação do que está acontecendo, acredito que alguma coisa na hora de posicionar o produto



Postado Por: ROBERTOMEN
Data Postagem: quinta-feira, 18 de abril de 2024 at 10:51

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.



Postado Por: FERRER
Data Postagem: quinta-feira, 18 de abril de 2024 at 11:06

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



Postado Por: FERRER
Data Postagem: quinta-feira, 18 de abril de 2024 at 11:09

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



Postado Por: FERRER
Data Postagem: quinta-feira, 18 de abril de 2024 at 11:17

Não sei se ajuda, mas isso é quando clico em alterar pedido de compra



Postado Por: ROBERTOMEN
Data Postagem: quinta-feira, 18 de abril de 2024 at 16:56

boa tarde.


Não, vc não declara nI

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



Postado Por: FERRER
Data Postagem: quinta-feira, 18 de abril de 2024 at 17:07

Beleza, obrigado por me ajudar!



Postado Por: ROBERTOMEN
Data Postagem: sexta-feira, 19 de abril de 2024 at 07:20


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 !



Postado Por: FERRER
Data Postagem: sexta-feira, 19 de abril de 2024 at 08:29

Bom dia, mesmo dessa forma, se eu abro qualquer produto, e clico em salvar, ele alimenta o campo do primeiro produto



Postado Por: FERRER
Data Postagem: sexta-feira, 19 de abril de 2024 at 09:14

Debugando o fonte, [N] está vindo com valor 1



Postado Por: ROBERTOMEN
Data Postagem: sexta-feira, 19 de abril de 2024 at 09:23

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



Postado Por: ROBERTOMEN
Data Postagem: sexta-feira, 19 de abril de 2024 at 09:32

***********************
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





Postado Por: ROBERTOMEN
Data Postagem: sexta-feira, 19 de abril de 2024 at 09:43

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





Postado Por: FERRER
Data Postagem: sexta-feira, 19 de abril de 2024 at 09:45

Cliquei no segundo produto, [n] ficou = 2 e nC7_item = 1



Postado Por: ROBERTOMEN
Data Postagem: sexta-feira, 19 de abril de 2024 at 10:43


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...



Postado Por: FERRER
Data Postagem: sexta-feira, 19 de abril de 2024 at 14:36

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




Postado Por: ROBERTOMEN
Data Postagem: sexta-feira, 19 de abril de 2024 at 15:29

ok, só corrige ai....


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



O Correto é

cCodigo := aCols[n][nPosProd]






Postado Por: FERRER
Data Postagem: sexta-feira, 19 de abril de 2024 at 15:50

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?



Postado Por: ROBERTOMEN
Data Postagem: sexta-feira, 19 de abril de 2024 at 19:37

boa noite.

abra outro post por favor e encerre este,

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



Postado Por: FERRER
Data Postagem: segunda-feira, 22 de abril de 2024 at 08:57

bom dia.
beleza, obrigado pela ajuda




Imprimir Página | Fechar Janela