Error ABAP Query

Buenas noches!,

Disculpen la hora, ¿qué tal? les escribo porque tengo ya horas revisando un Query que creé con un campo adicional que me esta sacando ronchas y de verdad necesito ayuda con esto, por eso me preguntaba si podría apoyarme con ustedes.

Creé un campo adicional para mi Query (M_PRES) donde se depositan el dato del campo NTSP-TWERT bajo unas condiciones en una búsqueda. El campo NTSP-TWERT tiene un valor numérico entero pero el tipo de dato es “C”, resulta que ademas hay que dividir el valor que aparece ahí entre 100 y al final me refleja un monto con decimal, necesito el campo “Z” como un tipo “P” pero me arroja el siguiente Error de programación ABAP:

UC_OBJECTS_NOT_CHARLIKE

In statement “CONVERSION_EXIT_ALPHA_OUTPUT”, only character-type data objects
are supported at
argument position “INPUT”.

In the present case, operand “INPUT” has the non character-type type “?”.
The current program is a Unicode program. In Unicode, type X or
structures that do not just contain character-type components are
regarded as non-numeric.

He intentado de todo para convertir el dato de Character a Package o a Floating point pero el resultado final es el mismo.

El código que estoy usando para la sentencia es la siguiente:

IF NLEI-MATNR IS INITIAL.
  DATA: VALOR LIKE ZISH_PR_MA_PR-PRECIOB.
  DATA: BEGIN OF IT_NTSP,
        TWERT LIKE NTSP-TWERT,
        END OF IT_NTSP.

  SELECT NTSP~TWERT
    INTO CORRESPONDING FIELDS OF IT_NTSP
    FROM NTSP
    WHERE NTSP~TALST = NLEI-LEIST
    AND NTSP~TASPA = 10
    AND NTSP~BEGDT <= NLEI-IBGDT
    AND NTSP~ENDDT >= NLEI-IBGDT.
  ENDSELECT.

  VALOR = IT_NTSP-TWERT / 100.

  M_PRES = VALOR.

  CLEAR IT_NTSP.
ELSE.
  M_PRES = ''.
ENDIF.

Cualquier aporte es de agradecer.

Quedo atento de cualquier tipo de aporte. Mil gracias!!

Buenas,
Pero el dump te lo está tirando cuando llamas a la funcion “CONVERSION_EXIT_ALPHA_OUTPUT”, y esa función es para llamar con un string o char… .deberías revisar como la estás llamando.

2 Me gusta

Intenta utilizar la función ‘MOVE_CHAR_TO_NUM’ esta devuelve un tipo P

1 me gusta

Si eso noté, pero no lo estoy llamando yo, lo está haciendo un programa cuando ejecuto el Query.

Al final y lo que yo estoy suponiendo es que el “campo adicional” creado, como tipo de dato “Packed” no coincide con la estructura que el query creaba al momento de ejecutarlo… la estructura hace referencia a la tabla que estoy usando en un SELECT para obtener el dato y como este es tipo de dato “Char” generaba el error.

Solucione el problema integrando este campo con otros, donde necesitaba al final que salieran por este mismo.

Dejo el cod. para quien le interese:

Código
* Si la prestación no es un material entonces
IF NLEI-MATNR IS INITIAL.
  DATA: KNUMH LIKE A522-KNUMH.
* Verifico si la prestación tiene un baremos por recargo
  SELECT A522~KNUMH
    INTO KNUMH
    FROM A522
    WHERE A522~ISHABLST = NLEI-LEIST
    AND A522~DATAB <= NLEI-IBGDT
    AND A522~DATBI >= NLEI-IBGDT.
  ENDSELECT.
* Si no tiene baremos por recargo entonces
  IF SY-SUBRC <> 0.
    DATA: TWERT LIKE NTSP-TWERT.
*   Busco el monto del baremos base de la prestación
    SELECT NTSP~TWERT
      INTO TWERT
      FROM NTSP
      WHERE NTSP~TALST = NLEI-LEIST
      AND NTSP~TASPA = 10
      AND NTSP~BEGDT <= NLEI-IBGDT
      AND NTSP~ENDDT >= NLEI-IBGDT.
    ENDSELECT.
*   Lo divido entre 100 ya que el número me aparece como num. entero
    TWERT = TWERT / 100.
    M_C_PRES = TWERT.
    CLEAR TWERT.
* Si tiene baremos por recargo entonces
  ELSE.
      DATA: KBETR LIKE KONP-KBETR.
*   Busco el monto del baremos por recargo
    SELECT KONP~KBETR
      INTO KBETR
      FROM KONP
      WHERE KONP~KNUMH = KNUMH.
    ENDSELECT.
      M_C_PRES = KBETR.
      CLEAR KBETR.
  ENDIF.
* Si la prestación es realmente un material
ELSE.
  DATA: CHARG LIKE NMATV-CHARG.
* Busco cual es la clase de valoración/lote
  SELECT NMATV~CHARG
    INTO CHARG
    FROM NMATV
    WHERE NMATV~FALNR = NLEI-FALNR
    AND NMATV~MATNR = NLEI-MATNR
    AND NMATV~CONSDT = NLEI-IBGDT
    AND NMATV~CONSTM = NLEI-IBZT.
  ENDSELECT.
  DATA: MATKL LIKE MARA-MATKL.
* Buscar el grp. de material
  SELECT MARA~MATKL
    INTO MATKL
    FROM MARA
    WHERE MARA~MATNR = NLEI-MATNR.
  ENDSELECT.
  DATA: BEGIN OF IT_ZPMP,
    PRECIOB LIKE ZISH_PR_MA_PR-PRECIOB,
    PRECIOV LIKE ZISH_PR_MA_PR-PRECIOV,
  END OF IT_ZPMP.
* Buscar el costo del material con fecha de carga de precio al del día de la carga y que sea menor o igual a la hora de la car
  SELECT ZISH_PR_MA_PR~PRECIOB ZISH_PR_MA_PR~PRECIOV
    INTO CORRESPONDING FIELDS OF IT_ZPMP
    FROM ZISH_PR_MA_PR
    WHERE ZISH_PR_MA_PR~MATNR = NLEI-MATNR
    AND ZISH_PR_MA_PR~BUDAT = NLEI-IBGDT
    AND ZISH_PR_MA_PR~CPUTM <= NLEI-IBZT
    AND ZISH_PR_MA_PR~BWTAR = CHARG
    ORDER BY ZISH_PR_MA_PR~CPUTM.
  ENDSELECT.
* Si no encontró resultado entonces
  IF SY-SUBRC <> 0.
    CLEAR IT_ZPMP.
*   Buscar el precio del material pero que sea menor a la fecha
    SELECT ZISH_PR_MA_PR~PRECIOB ZISH_PR_MA_PR~PRECIOV
      INTO CORRESPONDING FIELDS OF IT_ZPMP
      FROM ZISH_PR_MA_PR
      WHERE ZISH_PR_MA_PR~MATNR = NLEI-MATNR
      AND ZISH_PR_MA_PR~BUDAT < NLEI-IBGDT
      AND ZISH_PR_MA_PR~BWTAR = CHARG
      ORDER BY ZISH_PR_MA_PR~BUDAT.
    ENDSELECT.
  ENDIF.
* Si el precio base es igual a "0" entonces
  IF IT_ZPMP-PRECIOB = 0 OR CHARG = 'REGULAD0'.
    M_C_PRES = IT_ZPMP-PRECIOV.
* Si el precio base no es igual a "0" entonces
  ELSE.
    DATA: ACU LIKE ZISH_PR_MA_PR-PRECIOB.
*   En caso de que el grp. de material sea
    CASE MATKL.
*     Esterilización o Admisión entonces
      WHEN '0117' OR '0701'.
*       Aplicar la suma del 50% del precio base para el calculo del PvP
        ACU = IT_ZPMP-PRECIOB * 50.
        ACU = ACU / 100.
        M_C_PRES = ACU + IT_ZPMP-PRECIOB.
*     Otros
      WHEN OTHERS.
*       Aplicar la suma del 30% del precio base para el calculo del Pvp
        ACU = IT_ZPMP-PRECIOB * 30.
        ACU = ACU / 100.
        M_C_PRES = ACU + IT_ZPMP-PRECIOB.
    ENDCASE.
    CLEAR ACU.
  ENDIF.
  CLEAR IT_ZPMP.
ENDIF.

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.