Hoje vou mostrar como fazer uma validação ao clicar no botão confirmar do Documento de Entrada, deixando o campo de Pedido de Compra obrigatório para preenchimento, dependendo da TES.
Um dos meus alunos me perguntou, como ele poderia deixar um campo obrigatório, dependendo de uma condição específica.
Pois bem jovens, para esse cenário, o necessário é a montagem da regra, sendo que as perguntas a serem feitas são:
1- Qual campo será obrigatório?
2- Quando ele será obrigatório?
3- Como validar a condição?
A partir dessas perguntas, chegamos às respostas:
1- Campo de código do pedido de compra (D1_PEDIDO)
2- Quando o campo de TES (D1_TES) estiver configurado para gerar financeiro (F4_DUPLIC igual a S)
3- A validação ocorrerá antes de salvar, quando o usuário clicar em Confirmar
Com a lógica já montada, iremos partir para a customização. No caso iremos usar o ponto de entrada MTA103OK (que é acionado para validar a tela), e dentro dele iremos percorrer todas as linhas. A cada linha, iremos posicionar no cadastro de TES, se a TES gerar duplicata no financeiro, mas o campo de pedido estiver vazio, irá retornar falso para não prosseguir com o cadastro e irá mostrar uma mensagem de falha.
Abaixo o fonte desenvolvido conforme explicação acima:
User Function MTA103OK() Local aArea := GetArea() Local lRet := .T. Local nLinha := 0 Local nPosPed := GDFieldPos('D1_PEDIDO') Local nPosTes := GDFieldPos('D1_TES') Local cTes Local cPedido //Somente irá validar os pedidos, se a espécie for diferente de CTE (a variável cEspecie é private da MATA103) If Alltrim(cEspecie) != "CTE" //Faz a abertura da tabela de TES, e define o índice 1 para uso DbSelectArea('SF4') SF4->(DbSetOrder(1)) // F4_FILIAL + F4_CODIGO //Percorrendo todas as linhas do documento de entrada For nLinha := 1 To Len(aCols) //Pegando as informações de TES e Pedido conforme a grid cTes := aCols[nLinha][nPosTes] cPedido := aCols[nLinha][nPosPed] //Se conseguir posicionar na tabela de TES If SF4->(DbSeek(FWxFilial("SF4") + cTes)) //Se no cadastro de TES estiver para gerar duplicata, e o pedido estiver vazio If SF4->F4_DUPLIC == 'S' .And. Empty(cPedido) MsgStop("Na linha " + cValToChar(nLinha) + ", o cadastro de TES está indicando que gera duplicatas, mas não existe nenhum pedido preenchido! Preencha um pedido válido.", "Atenção") lRet := .F. Exit EndIf EndIf Next EndIf RestArea(aArea) Return lRet
Bom pessoal, por hoje é só.
Abraços e até a próxima.