¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo convertir un número decimal en fracción en SAP BO: Guía para principiantes.

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

Buenos días,

Tengo un ligero inconveniente al crear un CASE que utilizo para mostrar un número dependiendo del valor de un campo original. La tarea es mostrar las medidas de un artículo expresadas en fracción, pero en SAP BO no es posible ingresar otro formato que no sea decimal.

Por lo tanto, se me ocurre separar la parte entera de un número para luego concatenarla con su parte decimal en formato de fracción. El objetivo es convertir "1.5" en "1 1/2" o "1.25" en "1 1/4". Siendo principiante (más bien retirado de la programación por mucho tiempo), me gustaría saber si hay una manera más sencilla de lograr este propósito.

La conversión se realiza en dos partes, siendo la primera la parte entera, donde solo se elimina la parte decimal sin aproximarla, por lo que no se puede utilizar Round. Si es menor a cero, no se mostrará ya que al expresar media pulgada se hace como "1/2", por lo tanto "0 1/2" sería incorrecto. Este es el query de la primera parte:

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

CASE

CUANDO Cast(T1."SLength1" Como Entero) <> 0 ENTONCES Cast(T1."SLength1" Como Entero)

FIN Como "Entero"

DESDE "SBOINMEPRODB"."OITM" T1 DONDE T1."SLength1" <> 0

En esta consulta, no se muestra nada si la parte entera es menor que 0, que es lo que necesito, pero al concatenarlo con la parte decimal, no muestra nada, independientemente de que exista una parte decimal como en los primeros registros.

Por lo tanto, agregué un ELSE al query de la siguiente manera:

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

CASE

CUANDO Cast(T1."SLength1" Como Entero) <> 0 ENTONCES Cast(T1."SLength1" Como Entero)

SINO ''

FIN Como "Entero"

DESDE "SBOINMEPRODB"."OITM" T1 DONDE T1."SLength1" <> 0

Al ejecutarlo, muestra el siguiente error:

Si alguien pudiera indicarme cómo solucionar el error con el ELSE del CASE o una manera más fácil de convertir un "1.5" en "1 1/2", se lo agradecería mucho.

Saludos,

Alejandro Soto.

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

2 Respuestas

0
Cargando...

¡Prueba este, saludos!

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

CASE

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

ELSE ''

END As "Entero"

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...

Hola!

Te paso un ejemplo que te puede ayudar:

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

Se explica bien en el siguiente enlace:

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

Saludos

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?