Operadores .And. e .Or. para utilização em condições – Maratona AdvPL e TL++ 012

Nesse vídeo demonstraremos a utilização de .And. e .Or. em condições.

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "TOTVS.ch"
 
/*/{Protheus.doc} User Function zExe012
Exemplo de como utilizar os operadores .And. e .Or. nos testes
@type Function
@author Atilio
@since 26/11/2022
@see https://tdn.engpro.totvs.com.br/display/tec/Operadores+Comuns
@obs
    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/
 
User Function zExe012()
    Local aArea   := FWGetArea()
    Local nVar1   := 2
    Local nVar2   := 2
 
    //Somente se a primeira condição E a segunda forem verdadeiras
    If (nVar1 == nVar2) .And. fTstFunc()
        FWAlertInfo("Resultado é verdadeiro", "Teste com .And.")
    EndIf
 
    //Se a primeira condição OU a segunda for verdadeira
    If fTstFunc() .Or. FWAlertYesNo("Pergunta de Teste", "Continua?")
        FWAlertInfo("Resultado é verdadeiro", "Teste com .Or.")
    EndIf
 
    FWRestArea(aArea)
Return
 
Static Function fTstFunc()
    Local lRet := .T.
Return lRet

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

2 Responses

  1. Leonardo disse:

    Bom dia Atílio tudo bem , desenvolvi um uma rotina para atualizar a descrição do B1_DESC com o B5_CEME, ou seja pegar o valor do campo B5_CEME e jogar lá no B1, porém ao fazer alguns testes ele não está respeitando as condições que eu tinha adicionado , você consegue da uma avalidada nesse código , segue abaixo .

    USER FUNCTION sb1atsb5()

    DBSELECTAREA(‘SB1’)
    DBSETORDER(1)
    DBGOTOP()

    WHILE SB1->(!EOF())
    DBSelectArea(‘SB5’)
    DBSETORDER(1)
    If DBSeek(xFilial(‘SB5’)+SB1->B1_COD)

    IF ALLTRIM(SB1->B1_COD) == ‘008873’ .AND. ALLTRIM(SB5->B5_COD) == ‘008873’ .AND. ALLTRIM(SB5->B5_CEME) != ”

    RECLOCK(‘SB1’, .F.)
    SB1-> B1_DESC := SB5->B5_CEME
    MSUNLOCK()
    MSGINFO( “Registro alterado”,”alerta”)

    // ELSE
    // MSGINFO( “NAO ALTERADO “,”alerta”)
    // exitS
    // SB1->(dbskip())
    EndIf

    // SB5->(dbskip())
    EndIf
    SB1->(dbskip())
    ENDDO

    return

    já tentei coloca um skip de todas as maneiras mais mesmo assim ele não respeita o condicional , fica apenas em loop e não sai do while IF ALLTRIM(SB1->B1_COD) == ‘008873’ .AND. ALLTRIM(SB5->B5_COD) == ‘008873’ .AND. ALLTRIM(SB5->B5_CEME) != ”.

    vale lembrar que eu preciso fazer uma alteração em massa mais ele deve respeitar essa condição ,. desde já agradeço seu trabalho.

    att.

Deixe uma resposta

Terminal de Informação