Boa tarde, sou iniciante em advpl e preciso fazer a comparação de um registro presente em uma tabela, no caso, são dois códigos,(CFD_COD e SB1_COD), porém, na CFD possuo um critério, é possível filtrar apenas os dados da CFD, e pesquisar os mesmos na SB1? consegui fazer com while anteriormente, mas agora estou tentando com posicione, alguma sugestão? Exemplo:
DbSelectArea("CFD")
dbSetOrder(1)
SET FILTER TO CFD->CFD_PERCAL = cPercal .AND. !Empty(CFD->CFD_FCICOD)
MsgInfo("entrou na cfd", "teste")
//return
if Posicione("CFD",1,xFilial("CFD")+SB1->B1_COD,"CFD_COD") == SB1->B1_COD
//posicione("SB1",1,XFilial("SB1")+cEdit1,"B1_COD")
MsgInfo("possui codigo", "Title")
//return
Uma vez que você posiciona em um ALIAS ex.: CFD e realiza os filtros, ao posicionar em outro ALIAS SB1, o ADVPL mantém a posição dos ALIASES anteriores, então uma vez que já filtrou os registros na CFD, vc pode percorrer o ALIAS SB1 comparando os registros diretamente
DbSelectArea("CFD")
dbSetOrder(1)
SET FILTER TO CFD->CFD_PERCAL = cPercal .AND. !Empty(CFD->CFD_FCICOD)
While CFD->(!EOF())
DbSelectArea("SB1")
SB1->(DbSetOrder(1))
SB1->(DbGoTop())
While SB1->(!EOF())
if CFD->CFD_COD == SB1->B1_COD
MsgInfo("possui codigo", "Title")
CFD->(DbSkip())
Exit
EndIf
EndDo
MsgInfo("deu ruim", "cTitle")
CFD->(DbSkip())
EndDo
Neste exemplo, cada registro da tabela CFD será comparado com cada registro da SB1, se encontrar o código, será exibida a mensagem e pulado para o próximo registro, senão será exibida a mensagem que "deu ruim" e pula para próximo registro.
Compreendi perfeitamente, achava que seria necessário filtrar os dados em ambos alias. Saberia me informar se é possível realizar esse mesmo tipo de comparação, utilizando o posicione?