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.
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.
Bom dia Leonardo, tudo joia graças a Deus e você?
Opa, obrigado pelo comentário.
No caso, para códigos que não não nossos, o que recomendamos, é que seja publicado no nosso grupo do WhatsApp ( https://terminaldeinformacao.com/grupo-no-whatsapp/ ), que lá sempre quando surge um tempinho, tentamos ajudar.
Ou se for o caso, se a empresa onde você trabalha tiver interesse, podemos revisar o fonte, mediante a contratação dos nossos serviços da Atilio Sistemas. Segue um link falando um pouco sobre nossa forma de trabalhar: https://atiliosistemas.com/formas-de-atendimento/
Agora, aproveitando, nós já montamos um artigo que faz algo similar ao que você precisa, segue o link – https://terminaldeinformacao.com/2017/12/26/funcao-cria-complementos-produto-sb5-atraves-cadastro-de-produtos-sb1/
Ai você poderia mudar a condição do DbSeek (tirando a exclamação) e mudando o Reclock para .F. e salvando apenas o campo que você precisa.
Um forte abraço.