Sí por en contrario me llega de tipo C con este aspecto "4.000,74-" y necesito transformarlo a "-4000,74" para por ejemplo hacer cálculos:
FORM cambiar_formato_2 USING p_bwwrt.
DATA: lv_contador TYPE i.
DATA: lv_num TYPE i,
lv_num_aux(30) TYPE c.
DATA: lv_entero(16) TYPE c,
lv_decimal(3) TYPE c.
CLEAR: lv_contador, lv_num_aux, lv_num, lv_entero, lv_decimal.
"4.000,74- >>> Puede ser negativo
SPLIT p_bwwrt AT ',' INTO lv_entero lv_decimal.
IF lv_decimal+2(1) <> '-'. "-----------------------------> Positivo
lv_contador = strlen( p_bwwrt ).
*** En mi caso no necesitaba las centenas... tú sácalas si lo necesitas
"Miles
IF lv_contador = 8. "1.111,11
CONCATENATE p_bwwrt(1) p_bwwrt+2(3) INTO lv_num_aux.
ELSEIF lv_contador = 9. "11.111,11
CONCATENATE p_bwwrt(2) p_bwwrt+3(3) INTO lv_num_aux.
ELSEIF lv_contador = 10. "111.111,11
CONCATENATE p_bwwrt(3) p_bwwrt+4(3) INTO lv_num_aux.
"Millones
ELSEIF lv_contador = 12. "1.111.111,11
CONCATENATE p_bwwrt(1) p_bwwrt+2(3) p_bwwrt+6(3) INTO lv_num_aux.
ELSEIF lv_contador = 13. "11.111.111,11
CONCATENATE p_bwwrt(2) p_bwwrt+3(3) p_bwwrt+7(3) INTO lv_num_aux.
ELSEIF lv_contador = 14. "111.111.111,11
CONCATENATE p_bwwrt(1) p_bwwrt+4(3) p_bwwrt+8(3) INTO lv_num_aux.
"Billones
ELSEIF lv_contador = 16. "1.111.111.111,11
CONCATENATE p_bwwrt(1) p_bwwrt+2(3) p_bwwrt+6(3) p_bwwrt+10(3) INTO lv_num_aux.
ELSEIF lv_contador = 17. "11.111.111.111,11
CONCATENATE p_bwwrt(2) p_bwwrt+3(3) p_bwwrt+7(3) p_bwwrt+11(3) INTO lv_num_aux.
ELSEIF lv_contador = 18. "111.111.111.111,11
CONCATENATE p_bwwrt(3) p_bwwrt+4(3) p_bwwrt+8(3) p_bwwrt+12(3) INTO lv_num_aux.
ENDIF.
lv_num = lv_num_aux.
ELSE. "-----------------------------> Negativo
"Algo parecido a lo anterior pero concatenando el "-" delante... juega un poco con los 2 ejemplos
ENDIF.
ENDFORM.