Avalados por :

Como converter um número decimal em fração no SAP BO: Guia para iniciantes.

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 3 Vistas
0
Cargando...

Bom dia,

Estou com um pequeno problema ao criar um CASE que uso para exibir um número dependendo do valor de um campo original. A tarefa é mostrar as medidas de um item expressas em fração, mas no SAP BO não é possível inserir outro formato que não seja decimal.

Portanto, pensei em separar a parte inteira de um número para depois concatená-la com sua parte decimal no formato de fração. O objetivo é converter "1.5" em "1 1/2" ou "1.25" em "1 1/4". Sendo iniciante (ou melhor, afastado da programação por muito tempo), gostaria de saber se há uma maneira mais simples de alcançar esse propósito.

A conversão é feita em duas partes, sendo a primeira a parte inteira, onde apenas a parte decimal é removida sem arredondamento, então não é possível usar Round. Se for menor que zero, não será exibido, pois ao expressar meio polegada, é feito como "1/2", portanto "0 1/2" estaria incorreto. Este é o query da primeira parte:

SELECT T1."SLength1" Como "Campo Original",

CASE

QUANDO Cast(T1."SLength1" Como Inteiro) <> 0 ENTÃO Cast(T1."SLength1" Como Inteiro)

FIM Como "Inteiro"

DE "SBOINMEPRODB"."OITM" T1 ONDE T1."SLength1" <> 0

Nesta consulta, nada é exibido se a parte inteira for menor que 0, o que é o que eu preciso, mas ao concatená-lo com a parte decimal, nada é exibido, independentemente de haver uma parte decimal nos primeiros registros.

Portanto, adicionei um ELSE à query da seguinte forma:

SELECT T1."SLength1" Como "Campo Original",

CASE

QUANDO Cast(T1."SLength1" Como Inteiro) <> 0 ENTÃO Cast(T1."SLength1" Como Inteiro)

SENÃO ''

FIM Como "Inteiro"

DE "SBOINMEPRODB"."OITM" T1 ONDE T1."SLength1" <> 0

Ao executá-lo, é exibido o seguinte erro:

Se alguém puder me indicar como resolver o erro com o ELSE do CASE ou uma maneira mais fácil de converter um "1.5" em "1 1/2", ficaria muito grato.

Saudações,

Alejandro Soto.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

2 Respuestas

0
Cargando...

°Experimente isso, cumprimentos!

SELECT T1."SLength1" As "Campo Original",

CASE

WHEN Cast(T1."SLength1" As Integer) <> 0 THEN Cast(T1."SLength1" As Integer)

ELSE ''

END As "Inteiro"

FROM SBOINMEPRODB .dbo.oitm T1 WHERE T1."SLength1" <> 0

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá!

Aqui está um exemplo que pode te ajudar:

DATA: ls_vbak TYPE vbak,

ld_vbeln LIKE vbak-vbeln.

PARAMETERS: p_vbeln like vbak-vbeln.

CONSTANTS: lc_name1(5) TYPE c VALUE 'name1',

lc_name2(5) TYPE c VALUE 'name2',

lc_name3(5) TYPE c VALUE 'name3'.

ld_vbeln = p_vbeln.

SELECT vbeln, vbtyp,

CASE

WHEN auart = 'ZAMA' THEN @lc_name1

WHEN auart = 'ZACR' THEN @lc_name2

ELSE @lc_name3

END AS ernam

FROM vbak

WHERE vbeln = @ld_vbeln

INTO CORRESPONDING FIELDS of @ls_vbak.

ENDSELECT.

SELECT vbeln, vbtyp,

CASE

WHEN auart = 'ZAMA' THEN @lc_name1

WHEN auart = 'ZACR' THEN @lc_name2

ELSE @lc_name3

END AS ernam

FROM vbak

WHERE vbeln = @ld_vbeln

INTO CORRESPONDING FIELDS of @ls_vbak.

ENDSELECT

Este conceito é explicado em detalhes no seguinte link:

https://abap.ar/declaraciones-case-en-consultas-open-sql-usando-abap-7-4/

Saudações

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?