JUSTIFICACIÓN DE CAMPO HACIA LA DERECHA:
Hace unos días una compañera de trabajo se encontró desarrollando un tema de FI de Embargos de SUNAT y se vio con un problemilla,
había que subir un archivo de texto plano algunos datos un reporte con un determinado formato Según el banco BCP ya que ellos lo cargan a su transfer para que facilite la trasferencia de los cobros de sus proveedores a la SUNAT.
El formato era justificar hacia la derecha los datos subidos, por ejemplo:
DATA: lv_valor(15) TYPE char.
lv_valor = '803'.
El valor debería estar justificado así: ' 803',
con espacios en blanco.
Entones Se me ocurrió hacer un pequeño código para ello y a lo mejor lo necesiten para otras cosas.
Uso la función que te agrega los ceros a la izquierda según la cantidad de caracteres que se le haya asignado a la variable. aqui se los dejo:
DATA: lv_val TYPE char15, "Variable contiene el valor
lv_cont TYPE i, "Contador
" datos de prueba para visualizar y comparar el resultado
lv_val2 TYPE char15,
lv_val3 TYPE char15.
" Asignamos un valores a la variable lv_var
lv_val = '8004'.
lv_val2 = '8004'.
lv_val3 = '8004'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = lv_val
IMPORTING
OUTPUT = lv_val.
" Función para valor de Prueba con ceros.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = lv_val2
IMPORTING
OUTPUT = lv_val2.
* este código cabía los ceros de la izquierda
* en espacios vacíos
* hasta que encuentre un número diferente y ahí para.
WHILE lv_val+lv_cont(1) = 0.
lv_val+lv_cont(1) = ''.
lv_cont = lv_cont + 1. " sumando 1 al contador
ENDWHILE.
"Muestra la variable justificada
WRITE:/ 'Valor Justificado ', lv_val.
"Muestra la variable con ceros
WRITE:/ 'Valor Con ceros ', lv_val2.
"Muestra la variable son justificar
WRITE:/ 'Valor sin Justificar ', lv_val3.
RESULTADO:
Y PROBLEMA SOLUCIONADO...
__________________________________________________________________________________
CONVERSIÓN DE VARIABLE TIPO MONEDA A CARACTER
Esta vez tenemos un problema al realizar un batch input.
El el recording tenemos un campo de moneda, y el batch no acepta asignaciones de tipo wrbtr por lo tanto una de las soluciones es pasar e valor a cadena, pero que pasa si solo asignamos el valor a la variable cadena, o sorpresa el valor no aparece ya que se a ido hacia la izquierda, entonces lo que tenemos que hacer es usar un WRITE para la conversión, aquí les dejo el código.
DATA:
lv_wrbtr_char(13) TYPE c, " variable caracter
lv_wrbtr TYPE wrbtr. " Variable con valor decimal
lv_wrbtr = '1239.34'.
" transfiere Valor a Variable tipo Caracter
WRITE lv_wrbtr TO lv_wrbtr_char CURRENCY 'PEN'.
y problema solucionado....
__________________________________________________________________________________
AGREGAR CAMPO A ESTRUCTURA STANDARD
Luego, botón nuevo…
Creas la estructura con los campos adicionales que quieras, ojo siempre comenzar dichos campos con ZZ…..lo que deseen.
Y LISTO PROBLEMA SOLUCIONADO...
__________________________________________________________________________________
CREAR TYPES INCLUYENDO UNA ESTRUCTURA
TYPES: BEGIN OF ty_est.
" en caso de quere adicionar un campo más se agrega TYPES: y adicionamos
" los campo que querramos.
TYPES: zers TYPE i. " incluso podemos adicionar un campo más
INCLUDE STRUCTURE ZEHR_PA0185IMP. " La estructura
TYPES: END OF ty_est.
Y LISTO ESTRUCTURA CREADA...
__________________________________________________________________________________
DOBLE CLIC EN REGISTRO PARA EJECUTAR UNA TX
Para Solucionar el inconveniente se realiza lo siguiente:
Dentro de nuestro User_Command agregamos estas lineas de código.
Hay que tener en cuenta si los datos que vamos a pasar a la transacción tiene ID, si es así no tendrán ningún problema.
Nota: lo que esta de rojo es lo que cambia. Lo de verde va exactamente igual.
REGRESAR A LA PANTALLA DE SELECCIÓN O DYNPRO ANTERIOR
Saludos Amigos, casi siempre me encuentro con colegas que tienen problemas con regresar siempre a su pantalla de selección a la una dynpro anterior.
aquí les dejo el código, pequeño, pero no me negarán que es de gran ayuda.
DATA: lv_dato(14) TYPE C.
ResponderEliminarlv_dato = 'OFV'.
WRITE :/ LV_DATO.
SHIFT lv_dato RIGHT DELETING TRAILING SPACE.
WRITE :/ LV_DATO.
Muy buena, lo bueno es usar la lógica y tenemos la función para cualquier otro caso donde se necesite agregar ceros a la izquierda.
EliminarSaludos.