Boa tarde, alguem poderia me ajudar. estou fazendo uma consulta para saber se foi alterado algum produto . Na consulta do while , ele nao funciona da forma que eu gostaria, gostaria que ele fizesse a consulta,deu true, ele voltasse para a rotina, mas ele fica só repetindo o msg e não volta para a rotina. Criei 2 campos e estou usando esse codigo.
INCLUDE "protheus.ch"
User Function A010TOK() Local aArea := GetArea() Local aAreaB1 := SB1->(GetArea()) Local lRet := .T.
//Se for inclusão //If INCLUI // MsgInfo("Estou em uma inclusão!", "Atenção") //EndIf
//Se for alteração If ALTERA
DO WHILE B1_CUSTOM = '1' .AND. M->B1_VALID = 01 MSGAlert("Produto Alterado !!") MsgAlert("Favor preencher o campo 'Alterações' na aba 'Outros'!") B1_VALID++ RestArea(aAreaB1) RestArea(aArea)
Return lRet
ElseIf M->B1_VALID = 02 MsgInfo("Favor preencher o campo 'Alterações' na aba 'Outros'!","Este Produto sofreu alterações !") //DO WHILE B1_CUSTOM = '1' MsgAlert("Favor preencher o campo 'Alterações' na aba 'Outros'!")
lRet := MSGRETRYCANCEL("Deseja mesmo alterar este produto ?","Atenção") //BREAK //Enddo B1_VALID++ RestArea(aAreaB1) RestArea(aArea) //Endif Return lRet
ElseIf M->B1_VALID >= 03 MsgAlert("Favor preencher o campo 'Alterações' na aba 'Outros'!","Este Produto sofreu alterações !") //WHILE B1_CUSTOM = '1' MsgAlert("Favor preencher o campo 'Alterações' na aba 'Outros'!") // Enddo lRet := MSGRETRYCANCEL("Para Mudanças neste campo, Por Favor preencha o campo alterações !!") //B1_VALID++ //RestArea(aAreaB1) //RestArea(aArea) //Endif //Return lRet
ElseIf M->B1_CUSTOM != '' MsgAlert("o campo alterações ta vazio ") lRet := MsgYesNo("nao deixa o custom vazio ") //RestArea(aAreaB1) //RestArea(aArea) //Endif //Return lRet
//Endif MsgInfo("Estou em uma alteração!", "Atenção") EndIf
//Se for cópia //If lCopia // MsgInfo("Estou em uma cópia!", "Atenção") //EndIf ENDDO
lRet := MsgYesNo("Deseja continuar", "Atenção")
RestArea(aAreaB1) RestArea(aArea) Return lRet
Lusquinhas coloca o fonte como anexo ou formata ele aqui porque está bem difícil de entender o programa.
— Cirilo Rocha 13 de Feb de 2023Lucas se entendi bem vc quer ao salvar um produto verificar se o mesmo foi alterado e barrar ou não baseado em alguma regra certo?
Se sim você não precisa do while, pois o ponto de entrada escolhido já executa no final depois do usuário terminar a entrada de dados.
— VINICIUS GATI 14 de Feb de 2023Assim sendo você pode só fazer a validaćão normal e se retornar .t. no PE ele vai salvar ok o produto, se você retornar .f. do PE a tela não vai fechar, da forma como você precisa.
— VINICIUS GATI 14 de Feb de 2023Então já estou usando meio que resolvendo por IFs, mas qual é o funcionamento? o Produto já está salvo, o usuario vai fazer alterações. dai o é verificado se o produto já foi alterado, e salvo em um novo campo quais alterações foram feitas.
— Lucas de Paulo Santos 14 de Feb de 2023não, o M-> é o que está em memória e não já salvo no banco. O seu PE deve usar o M-> e comparar com o XXX-> para ver se mudou valor. XXX é o alias da tabela que vc ta trabalhando no caso o SB1->....
— VINICIUS GATI 15 de Feb de 2023