Definir campo en tabla interna

Hola, estoy necesitando definir un campo 15,2 numercio para una tabla interna, pero me da error si lo hago asi: campo(15) type p decimals 2, que otra forma podria utilizar paar definirlo que no sea esta,.

Muchas Gracias

Ana

El error que mencionas es en la definición del campo?
O cuando tratas de utilizar ese campo en alguna otra parte del código?

Sería bueno que nos compartieras parte del código para poder brindar una mejor asistencia.

Saludos!

Puedes probar definiendola con este tipo:

DATA TU_VARIABLE TYPE TKETRLG-STATTOE.

El campo STATTOE es del dominio DEC15_2.
Saludos!!

Luego que lo defino aqui: ( Es el campo sop_reg_total). Defini la tabla asi:

DATA: BEGIN OF ti_mercantil_header,
          reg_type(1)       TYPE n VALUE '1',                      " Tipo Registro
          group_code(12)    TYPE c VALUE 'BAMRVECA',               " Identificación del Banco
          lote(15)          TYPE c,                                " Nro. Archivo Cliente o Numero de Lote
          tipo_prod(5)      TYPE c VALUE 'NOMIN',                  " Tipo de Producto (Nuevo)
          pay_id(10)        TYPE n VALUE '0000000222',             " Tipo de Pago (Pago de Nomina)
          rif(1)            TYPE c,                                " Tipo de Identificacion
          cta_empresa(15)   TYPE n,                                " Numero de Identificacion de la Empresa
          total_reg(8)      TYPE n,                                " Cantidad Total Registros de Detalle (TOTAL REGISTER)
          sop_reg_total(15) TYPE p DECIMALS 2,                          " Monto Total Registros de Detalle (SUMATORIA MONTOS)
          sop_date(8)       TYPE n,                                " Fecha Valor
          bank_code(20)     TYPE n,                                " Codigo Cuenta Cliente (Empresa) valor Fijo
          campo1(7)         TYPE n VALUE '0000000',                " Area Reservada
          nro_serial(8)     TYPE n,                                " Número Serial Nota Empresa (Nuevo)
          cod_respues(4)    TYPE n,                                " Codigo Respuesta Archivo (Nuevo)
          fecha_proce(8)    TYPE n,                                " Fecha Proceso (Nuevo)
          campo2(261)       TYPE n,                                " Area Reservada 261 caracteres (Nuevo)
  END OF ti_mercantil_header.

Luego en la funcion hace un calculo:

IF t_sum_per_currency-rwbtr < 0.
    ti_mercantil_header-sop_reg_total = t_sum_per_currency-rwbtr * -100.
  ELSE.
    ti_mercantil_header-sop_reg_total = t_sum_per_currency-rwbtr * 100.
  ENDIF.

Y da el error:

Mmmm… bueno, el error indica que E_DTAM100H-H00 y TI_MERCANTIL_HEADER no tienen la misma estructura o no son del mismo tipo, es como si quisieras hacer algo como:

licuadora = refrigerador

¿Hay alguna parte en donde tratas de igualar E_DTAM100H-H00 con TI_MERCANTIL_HEADER?

He investigado un poco y E_DTAM100H-H00 unicamente es un char de 999 caracteres por lo que obviamente no será compatible con la estructura/tabla TI_MERCANTIL_HEADER…

Nos hace falta mas información para ayudarme mas (bueno, eso es lo que yo pienso) :sweat_smile:

Saludos!

1 me gusta

En la funcion que ha funcionado asi antes de agregarle este campo cone sa nueva caracteristica hay una parte donde indica:

e_dtam100h-h00 = ti_mercantil_header.
e_dtam100h-h01 = 98.

Justo lo que señalas. Y si le doy doble click a e_dtam100h-h100 me trae:

Esto es un programa que genara un archivo que luego se enviara al banco con la nomina de los empleados y ahora el banco mando que ese campo tanto en el header como en el detalle debe ser de 15,2 tipo n, antes era solo de 15 tipo n.

Que puedo hacer entonces?

Muchas Gracias

Ana

Puedes mostrarnos el código donde defines tu tabla interna ti_mercantil_header, hace falta un campo o el ultimo guion esta mal, pero para determinarlo necesitamos ver tu definición.

El problema radica en que estas tratando de asignar una tabla interna (al menos eso apreciamos por la nomenclatura) a un campo, lo cual no es posible.
Saludos!!

Ok, mi tabla interna es:

DATA: BEGIN OF ti_mercantil_header,
          reg_type(1)       TYPE n VALUE '1',                     
          group_code(12)    TYPE c VALUE 'BAMRVECA',               
          lote(15)          TYPE c,                               
          tipo_prod(5)      TYPE c VALUE 'NOMIN',                  
          pay_id(10)        TYPE n VALUE '0000000222',            
          rif(1)            TYPE c,                               
          cta_empresa(15)   TYPE n,                               
          total_reg(8)      TYPE n,                                
          sop_reg_total(15)     TYPE n,                               
          sop_date(8)       TYPE n,                               
          bank_code(20)     TYPE n,                                
          campo1(7)         TYPE n VALUE '0000000',               
          nro_serial(8)     TYPE n,                                
          cod_respues(4)    TYPE n,                               
          fecha_proce(8)    TYPE n,                               
          campo2(261)       TYPE n,                               
  END OF ti_mercantil_header.

El campo que necesito en 15,2 tipo numerico es: sop_reg_total

Gracias

Saludos

Ana

En donde haces esta asignacion: e_dtam100h-h00 = ti_mercantil_header, falta un campo que puede ser uno de los siguientes

group_code(12) TYPE c VALUE 'BAMRVECA',
lote(15) TYPE c, 
tipo_prod(5) TYPE c VALUE 'NOMIN', 
rif(1) TYPE c,

Si el programa estaba funcionando bien, en tu ambiente productivo deberías tener el respaldo (Asumo que es asi, por que mencionas el cambio del entero a decimal).
Para el cambio de tu variable de tipo n a Decimal 15,2 lo resuelves haciéndolo del tipo TKETRLG-STATTOE.

Ok Amigo ya le coloque lo que me indicas para solucionar lo del 15,2. Cuando me dices que al igualar slight_smile:e_dtam100h-h00 = ti_mercantil_header

Falta algun campo por donde me meto para verificar eso, pues esta nueva tabla interna tiene varios campos nuevos aparte del campo del 15,2, aparte que tambien que a algunos campos viejos (originales) se le cambio la longitud.

Gracias

Ana

Tienes el codigo original antes de haberle hecho cambios? (me interesa nuevamente donde asignas)

Debe lucir algo asi:

e_dtam100h-h00 = ti_mercantil_header-campo
-campo es la parte que nos falta (puede tener otro nombre :stuck_out_tongue_winking_eye:).

Saludos!!

1 me gusta

El original esta asi en Produccion:
e_dtam100h-h00 = ti_mercantil_header.
e_dtam100h-h01 = 98.

Y asi mismo esta en Desarrollo solo que con nuevos campos y algunos con definiciones cambiadas en su tipo de dato, de hecho si le coloco a ese campo que queria en 15,2 le indico campo(15) tipo n, no me da error dejandole igual su:

e_dtam100h-h00 = ti_mercantil_header.
e_dtam100h-h01 = 98.

Si le cambio la definicion a 15,2 colocandole lo que me indicas: TKETRLG-STATTOE me da el mismo error.

Mmm… lo unico que se me ocurre es que exista algun conflicto de conversión Type P(15,2) a char… talvez la solución sea manejar el el campo sop_reg_total como char y crear alguna otra variable auxiliar para que al final hagas la conversión de Type P(15,2) a char:

DATA: BEGIN OF ti_mercantil_header,
reg_type(1) TYPE n VALUE '1', 
group_code(12) TYPE c VALUE 'BAMRVECA', 
lote(15) TYPE c, 
tipo_prod(5) TYPE c VALUE 'NOMIN', 
pay_id(10) TYPE n VALUE '0000000222', 
rif(1) TYPE c, 
cta_empresa(15) TYPE n, 
total_reg(8) TYPE n, 
sop_reg_total(17) TYPE C, 
sop_date(8) TYPE n, 
bank_code(20) TYPE n, 
campo1(7) TYPE n VALUE '0000000', 
nro_serial(8) TYPE n, 
cod_respues(4) TYPE n, 
fecha_proce(8) TYPE n, 
campo2(261) TYPE n, 
END OF ti_mercantil_header.

DATA: variable_auxiliar(15) TYPE P DECIMALS 2.

Y despues, con una rutina de conversión o algo similar, hacer algo como esto:

ti_mercantil_header-sop_reg_total = variable_auxiliar.

Saludos!

Ok perfecto, Muchas Gracias, voy a probar ese punto que indicas.

Con lo que indica @pumatronx, resolveras el problema del campo N a DECIMAL 15,5.
Para resolver el otro asunto de la asignación, hagamos algo. Comenta la linea y corre tu programa, sucederá una de 2 cosas, un error o un resultado incompleto (este es el que espero!!). Si sucede el primero, tendrías que pasarnos el nuevo error, pero, si sucede el segundo, iras con tu usuario final a que identifique que hace falta!. Con eso podremos definir el campo que necesitamos.

Saludos!!

Ok entendido, Muchas Gracias.

Aunque si en Productivo el programa esta tal cual lo indicas

Entonces no sería necesario comentar la linea que indica @LDSDev, solo verifica que no marque error el programa y que llegues al resultado deseado haciendo varias pruebas.

Yo creo que se trata de un Z que un “ABAPER” libero sin hacer el check. Si no comenta la linea, el error seguira apareciendo :pensive:.

Pues si, se me hace muy raro… pero hay que estar abiertos a las posibilidades :stuck_out_tongue: … veamos que nos cuenta cuando regrese

1 me gusta

Buenas,

Se me ocurre si cuando dejas la estructura sin cambios funciona y al hacer el cambio no. Podrías intentar cambiar el valor del campo H01 que dice que es la longitud del campo H00… de pronto la función que convierte la línea de la tabla en un cadena de caracteres necesita ese valor para realizarlo correctamente. Cambiarlo de 98 a 100 por los dos decimales que aumentas.

el campo H01, dice longitud del campo H00,