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 |