- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Pegar o conteudo de uma tabela
×
Linguagem de Programação ADVPL
Perguntas Pegar o conteudo de uma tabela
- Guto
- Autor do Tópico
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 22
- Obrigados Recebidos: 0
11 anos 2 meses atrás #17721
por Guto
Pegar o conteudo de uma tabela foi criado por Guto
Pessoal, estou com uma duvida bastante simples, estou alterando um fonte referente a um recibo de salário mas em um determinado momento eu preciso consultar se existe um valor específico na tabela "SRX" que não tem nenhuma ligação com as tabelas "SRA" e "SRC" (Tabelas utilizadas para impressão).
Como eu conseguiria pegar o valor de um registro específico?
Pensei em usar a função Tabela(), mas pelo visto essa função só permite utilizar um campo como chave de identificação, e eu preciso utilizar dois parâmetros, vou dar um exemplo utilizando um select:
SELECT RX_TXT FROM SRX WHERE RX_TIP = '06' AND RX_COD = '1'
No caso, primeiro eu precisaria saber se essa chave existe (RX_TIP = '06' AND RX_COD = '1'), se caso existir, eu preciso pegar o valor do campo RX_TXT.
Como eu conseguiria pegar o valor de um registro específico?
Pensei em usar a função Tabela(), mas pelo visto essa função só permite utilizar um campo como chave de identificação, e eu preciso utilizar dois parâmetros, vou dar um exemplo utilizando um select:
SELECT RX_TXT FROM SRX WHERE RX_TIP = '06' AND RX_COD = '1'
No caso, primeiro eu precisaria saber se essa chave existe (RX_TIP = '06' AND RX_COD = '1'), se caso existir, eu preciso pegar o valor do campo RX_TXT.
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
11 anos 2 meses atrás #17722
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Respondido por lalberto no tópico Pegar o conteudo de uma tabela
RX_TIP = '06' AND RX_COD = '1'
cTipo := '01'
cCodi := PadR('06',21)
If SRX->(dbSetOrder(1), dbSeek(xFilial("SRX")+cTipo+cCodi))
cCampo := SRX->RX_TXT
Else
Alert("Codigo ou Tipo Nao Localizado na Tabela SRX")
Return .f.
Endif
Return .t.
cTipo := '01'
cCodi := PadR('06',21)
If SRX->(dbSetOrder(1), dbSeek(xFilial("SRX")+cTipo+cCodi))
cCampo := SRX->RX_TXT
Else
Alert("Codigo ou Tipo Nao Localizado na Tabela SRX")
Return .f.
Endif
Return .t.
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Por favor Acessar ou Registrar para participar da conversa.
- Guto
- Autor do Tópico
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 22
- Obrigados Recebidos: 0
11 anos 2 meses atrás #17740
por Guto
Respondido por Guto no tópico Pegar o conteudo de uma tabela
Luiz Alberto, teoricamente seria isso mesmo que eu preciso, mas e expressão "If SRX->(dbSetOrder(1), dbSeek(xFilial("SRX")+cTipo+cCodi))" só está retornando "Falso" e o registro existe na tabela.
Tens alguma ideia do que poderia ser?
Não sei se é devido ao alinhamento do campo RX_COD pois o mesmo tem varios espaços em branco.
(Em anexo segue um print da tabela SRX)
Tens alguma ideia do que poderia ser?
Não sei se é devido ao alinhamento do campo RX_COD pois o mesmo tem varios espaços em branco.
(Em anexo segue um print da tabela SRX)
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
11 anos 2 meses atrás - 11 anos 2 meses atrás #17743
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Respondido por lalberto no tópico Pegar o conteudo de uma tabela
Faz assim:
If SRX->(dbSetOrder(1), dbSeek(xFilial("SRX")+cTipo+AllTrim(cCodi)))
If SRX->(dbSetOrder(1), dbSeek(xFilial("SRX")+cTipo+AllTrim(cCodi)))
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Ultima edição: 11 anos 2 meses atrás por lalberto.
Por favor Acessar ou Registrar para participar da conversa.
- Guto
- Autor do Tópico
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 22
- Obrigados Recebidos: 0
11 anos 2 meses atrás - 11 anos 2 meses atrás #17749
por Guto
Respondido por Guto no tópico Pegar o conteudo de uma tabela
Luiz Alberto, estamos quase lá.
O problema é o seguinte, o campo "RX_COD" tem 21 caracteres, como mostrado na imagem, quando o usuário vai preencher os parâmetros da tabela SRX através do modulo de "Gestão de Pessoal" ele tem a opção de inserir ou não a referência da filial, ficando assim:
1- Caso o usuário preencha o campo RX_COD com filial
"01...........1......."
2- Caso o usuário não preencha o campo RX_COD com filial
".............1......."
(Os pontos representam os espaços em branco)
Esse campo é uma das chaves para localização do registro "RX_TXT", e ao usar o "If SRX->(dbSetOrder(1), dbSeek(xFilial("SRX")+cTipo+AllTrim(cCodi)))" ele apenas valida o primeiro exemplo como verdadeiro e o segundo exemplo como falso.
O que preciso fazer é, caso seja utilizado o primeiro exemplo, o IF deve ser verdadeiro para os funcionário que estão apenas na filial 01, já no segundo exemplo o IF será verdadeiro para todos os funcionários.
Tem alguma ideia de como posso fazer isso?
O problema é o seguinte, o campo "RX_COD" tem 21 caracteres, como mostrado na imagem, quando o usuário vai preencher os parâmetros da tabela SRX através do modulo de "Gestão de Pessoal" ele tem a opção de inserir ou não a referência da filial, ficando assim:
1- Caso o usuário preencha o campo RX_COD com filial
"01...........1......."
2- Caso o usuário não preencha o campo RX_COD com filial
".............1......."
(Os pontos representam os espaços em branco)
Esse campo é uma das chaves para localização do registro "RX_TXT", e ao usar o "If SRX->(dbSetOrder(1), dbSeek(xFilial("SRX")+cTipo+AllTrim(cCodi)))" ele apenas valida o primeiro exemplo como verdadeiro e o segundo exemplo como falso.
O que preciso fazer é, caso seja utilizado o primeiro exemplo, o IF deve ser verdadeiro para os funcionário que estão apenas na filial 01, já no segundo exemplo o IF será verdadeiro para todos os funcionários.
Tem alguma ideia de como posso fazer isso?
Ultima edição: 11 anos 2 meses atrás por Guto.
Por favor Acessar ou Registrar para participar da conversa.
- Guto
- Autor do Tópico
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 22
- Obrigados Recebidos: 0
11 anos 2 meses atrás #17755
por Guto
Respondido por Guto no tópico Pegar o conteudo de uma tabela
Consegui resolver!
Criei uma variável cRXFilal com tamanho de 12 caracteres e outra cRXCod com 1 caracter, porque o código do registro é salvo sempre na 13° posição do campo RX_COD, ficou assim:
If SRX->(dbSetOrder(1), dbSeek(xFilial("SRX")+cTipo+cRXFilal+cRXCod))
Espero que isso possa ajudar outras pessoas.
Obrigado Luiz Alberto, sua ajuda foi imprescindível.
Criei uma variável cRXFilal com tamanho de 12 caracteres e outra cRXCod com 1 caracter, porque o código do registro é salvo sempre na 13° posição do campo RX_COD, ficou assim:
If SRX->(dbSetOrder(1), dbSeek(xFilial("SRX")+cTipo+cRXFilal+cRXCod))
Espero que isso possa ajudar outras pessoas.
Obrigado Luiz Alberto, sua ajuda foi imprescindível.
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Pegar o conteudo de uma tabela
Tempo para a criação da página:0.141 segundos