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