- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Função POSICIONE passo a passo
×
Linguagem de Programação ADVPL
Perguntas Função POSICIONE passo a passo
- mleandro
- Autor do Tópico
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 31
- Obrigados Recebidos: 0
11 anos 11 meses atrás #8939
por mleandro
Função POSICIONE passo a passo foi criado 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!
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
11 anos 11 meses atrás #8941
por kanaamlrr
Respondido por kanaamlrr no tópico Re: Função POSICIONE passo a passo
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.
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.
- mleandro
- Autor do Tópico
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 31
- Obrigados Recebidos: 0
11 anos 11 meses atrás #8945
por mleandro
Respondido por mleandro no tópico Re: Função POSICIONE passo a passo
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!
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.
- mleandro
- Autor do Tópico
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 31
- Obrigados Recebidos: 0
11 anos 11 meses atrás #8946
por mleandro
Respondido por mleandro no tópico Re: Função POSICIONE passo a passo
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
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
11 anos 11 meses atrás #8947
por kanaamlrr
Respondido por kanaamlrr no tópico Re: Função POSICIONE passo a passo
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!
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.
- leanroxx
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 6
- Obrigados Recebidos: 0
11 anos 2 meses atrás #16659
por leanroxx
Respondido por leanroxx no tópico Re: Função POSICIONE passo a passo
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.
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.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Função POSICIONE passo a passo
Tempo para a criação da página:0.087 segundos