Preciso criar uma relatório que pega alguns campos do B1 e também do B5 mas especificamente o campo B5_DESCNFE porem como é um campo MEMO gostaria de saber como buscar a informação deste campo.
Bom dia Prezado!
Você consegue montar o relatório pegando B1 e B5 normalmente, e tratar o campo B5_DESCNFE na própria consulta.
Esse campo é do tipo MEMO no Protheus, e no banco ele costuma ser gravado como um tipo binário grande (no SQL Server, por exemplo, vem como IMAGE/VARBINARY), então, se você fizer um SELECT direto, o conteúdo não vai aparecer legível. microsigadvpl.blogspot.com
A ideia é converter o MEMO para VARCHAR na query.
Exemplo para SQL Server
Algo nesse sentido (ajuste os JOINs de acordo com a sua modelagem):
-- Converte o MEMO (IMAGE) para texto legível
ISNULL(
CAST(CAST(B5.B5_DESCNFE AS VARBINARY(8000)) AS VARCHAR(8000)),
No SQL Server essa abordagem de CAST duplo (MEMO → VARBINARY → VARCHAR) é a forma padrão de exibir o conteúdo de campos MEMO em consultas. Terminal de Informação+1
Outros bancos (Oracle / PostgreSQL)
Se o ambiente não for SQL Server, a lógica é a mesma, mas muda a função de conversão:
- Oracle: usar algo como
utl_raw.cast_to_varchar2(DBMS_LOB.SUBSTR(B5_DESCNFE, 4000, 1))para transformar o LOB em texto. Epvconsulting - PostgreSQL: costuma-se usar
convert_from(B5_DESCNFE, 'UTF8')quando o campo é gravado como bytea. Terminal de Informação
E aí você pode complementar com o que já tinha:
Para a parte de produto (campos da B1), dá pra seguir o passo a passo desta documentação:
Adicionando um campo novo a uma query já existente - TOTVS Fast Analytics - TDNPara o campo B5_DESCNFE, por ser MEMO, é necessário fazer essa conversão na query, de acordo com o SGBD que você estiver usando (ex.: exemplo acima para SQL Server).
Agradecemos o contato.
Atenciosamente.