× Linguagem de Programação ADVPL

Perguntas Função POSICIONE passo a passo

Mais
11 anos 4 meses atrás #8939 por mleandro
Olá, alguém por gentileza poderia explicar bem didaticamente, usando um exemplo, sobre o funcionamento da função POSICIONE?
Principalmente a parte da chave (terceiro parâmetro). Estou com dificuldades, pois é pouco intuitivo e já procurei em vários lugares, porém "a ficha não caiu".

Obrigado!

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 4 meses atrás #8941 por kanaamlrr
Conforme documentação, a estrutura é a seguinte:

Posicione(cAlias,nOrdem,cSeek,cField,cNickName)

Sendo:

cAlias - Alias da tabela a ser posicionada (onde você quer buscar a informação)

nOrdem - Ordem de índice a ser utilizada (ordem do índice que contém os campos que serão usados na busca)

cSeek - Expressão a ser utilizada na busca (è a sua chave de busca, contendo os campos que foram escolhidos no índice pelo parâmetro nOrdem)

cField - Campo da tabela a ser retornado (o conteúdo que você deseja capturar)

cNickName - NickName da ordem de índice a ser posicionado, se informado o parametro nOrdem será desconsiderado

Por exemplo:

Desejo retornar o nome do cliente com base na minha nota fiscal
Assumindo que estou posicionado na minha nota, utilizo o comando:


Posicione("SA1",1,xFilial("SA1")+SF2->F2_CLIENTE,"A1_NOME")

Essa expressão irá retornar o nome do cliente, buscando pelo código armazenado no campo F2_CLIENTE

Espero ter ajudado.

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 4 meses atrás #8945 por mleandro
Perfeito...

Dentre os campos citados nos parâmetros (cAlias,nOrdem,cSeek,cField,cNickName), ainda não havia encontrado o quinto (cNickName). Gostaria de saber se dos quatro primeiros (cAlias,nOrdem,cSeek,cField) algum deles pode não ser preciso em alguma ocasião. Pergunto pois, em algum lugar achei que o campo cField era opcional.

Como disse anteriormente minha principal dúvida era compreender a chave (cSeek). Agora ficou bem claro, que esta se deriva do índice. Só confirmando: a chave será sempre exatamente o que contém o índice? E na mesma ordem?

Muito obrigado, ajudou bastante!

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 4 meses atrás #8946 por mleandro
Kanaãm,

Mais uma questão...

Para o índice SA1 ordem 1 a chave correspondente é A1_FILIAL+A1_COD+A1_LOJA. Pelo exemplo que foi utilizado, Posicione("SA1",1,xFilial("SA1")+SF2->F2_CLIENTE,"A1_NOME"), a chave xFilial("SA1")+SF2->F2_CLIENTE não estaria completa, pois não contempla o campo LOJA. Está correto mesmo assim esta forma de uso?

Obrigado

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 4 meses atrás #8947 por kanaamlrr
Então cara, você pode utilizar a chave completa ou não, dependendo da quantidade de informação que você tem.

O mais correto é utilizá-la completa.
O campo cField é sempre obrigatório, já o cNickname não.
A ordem da chave tem que ser sempre a mesma do índice, mas não necessáriamente com todos elementos.
Abraços!

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 8 meses atrás #16659 por leanroxx
Opa, desculpe ressucitar um tópico antigo.

Tenho dúvidas se consigo usar um IF neste mesmo caso

Posicione("SA1",1,xFilial("SA1")+SF2->F2_CLIENTE,"A1_NOME")

Desta forma só trará o cliente, mas se for uma nota de devolução de compras por exemplo ele usará o cadastro de fornecedor, alguém sabe dizer como tratar isso??
Teria que usar algo que diga que se o Tipo da Nota for = a 'D' buscar na SA2.

Abraço.

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.111 segundos
Joomla templates by a4joomla