Como ler campos virtuais do tipo memo no SQL

Blog Advpl - Share knowledge

Como ler campos virtuais do tipo memo no SQL

13 de janeiro de 2016 Dicas Funções Geral SQL 0

Os campos “memos” no protheus em sua maioria é do tipo virtual, pois este utiliza uma tabela “Descrições dos campos memo” (SYP) auxiliar para armazenar o conteúdo destes campos.

Como exemplo, temos a tabela “Descrição Genérica de Produtos” (SB1).

campo_memo_1

Para entender melhor, o campo B1_VM_P (Descrição em Português) é um campo virtual do tipo memo de tamanho 36, seu inicializador padrão utiliza a função E_MSMM para ler o conteúdo do campo B1_DESC_P (Código da descrição em português), campo este que contém o código chave que servirá de referência para localizar o descrição na tabela “Descrições dos campos memo” (SYP).

campo_memo_codigo

Campo B1_DESC_P

 

campo_memo_campo

Campo B1_VM_P

 

campo_memo_opcoes

Campo B1_VM_P

Neste exemplo, para cada linha com 36 caracteres será uma nova linha na tabela SYP.

Consultando no banco de dados, o registro fica conforme a imagem abaixo:

consulta_syp


 

Agora vamos ao que interessa, preciso montar uma consulta SQL que me mostre os registros da tabela SB1 e que me traga o conteúdo do campo memo do campo B1_DESC_P.

É uma consulta simples, fazer um SELECT  na tabela SYP porém informando o código chave da tabela SB1, mas preciso trazer todas as linhas da SYP numa única linha e apresentá-la junto a consulta principal.

Uma forma fácil de fazer isso é colocando uma sub-consulta SQL usando o comando “CASE” do SQL.

Mas como disse acima, a cada 36 caracteres é uma linha na tabela SYP, esta tabela possui um campo chamado YP_SEQ, ele contém a sequência de linhas. O campo memo pode ter várias e varias linhas, neste exemplo quero pegar apenas as 3 primeiras linhas.

Consulta completa:

A consulta retornar todos os registros incluindo o conteúdo do campo memo, concatenando as 3 linhas contidas na tabela SYP.

Agora fica mais fácil apresentar campos memo dentro de um relatório no Protheus, pois o campo passa a ser do tipo caracter.

Esperamos que tenha ajudado.

abraços e até a próxima.

 

 

 

Deixe uma resposta