PDA

Ver la Versión Completa : Error con META4


sschacon
04/07/11, 10:28:00
Hola a todos!!! y gracias de antemano!
Tengo un programa ABAP que conecta con META4. Mi código está copiado de programas antiguos que hay por aquí y que funcionan correctamente. Bueno, en desarrollo, no funciona ningún código, ni el mío ni el antiguo. En productivo, funciona el código antiguo y el mío no. La única diferencia entre desarrollo y productivo es el usuario con el que se conecta. Han estado mirando permisos de usuario y dicen que están iguales. En realidad no da error de conexión, eso no falla. Lo que ocurre es que si leo una tabla en META4, siempre me la trae vacía, cuando se puede ver perfectamente que contiene datos. No sé si a alguien se le puede ocurrir algo de qué puede estar fallando. Lo único que me queda, es copiar literalmente un código que funcione en productivo a mi programa y probarlo.

Pongo un poco de código, para que os hagáis una idea:

* Abrimos la conexión con META4
PERFORM abrir_conexion USING interface
CHANGING result
lo_conn_obj.
*&---------------------------------------------------------------------*
*& Form ABRIR_CONEXION
*&---------------------------------------------------------------------*
FORM abrir_conexion USING p_interface
CHANGING p_result
p_lo_conn_obj.

DATA: gc_db_conn TYPE dbcon_name,
lx_parameter_invalid TYPE REF TO cx_parameter_invalid,
lx_sql_exception TYPE REF TO cx_sql_exception.
*&---------------------------------------------------------------------*

CLEAR: gc_db_conn, p_result, p_lo_conn_obj.
MOVE p_interface TO gc_db_conn.

TRY.
CALL METHOD cl_sql_connection=>get_connection
EXPORTING
con_name = gc_db_conn
RECEIVING
con_ref = p_lo_conn_obj.

CATCH cx_parameter_invalid INTO lx_parameter_invalid.

CATCH cx_sql_exception INTO lx_sql_exception.

CALL METHOD lx_sql_exception->if_message~get_text
RECEIVING
result = p_result.

CLEANUP.

ENDTRY.

ENDFORM. " ABRIR_CONEXION

Y este es el select a META4:

PERFORM construir_select_conceptos CHANGING l_conceptos.

*&---------------------------------------------------------------------*
*& Form CONSTRUIR_SELECT_CONCEPTOS
*&---------------------------------------------------------------------*
FORM construir_select_conceptos CHANGING p_conceptos TYPE string.

DATA: l_string_sql TYPE string,
n_acumulado(30) TYPE c,
id_concepto(4) TYPE n.


DATA: nombre(17) TYPE c.
*----------------------------------------------------------------------*

CLEAR p_conceptos.

l_string_sql = 'SELECT * FROM M4_CONCEPTOS_AUX'.

TRY.

lo_stmt_obj = lo_conn_obj->create_statement( ).
lo_result = lo_stmt_obj->execute_query( l_string_sql ).

* WHILE lo_result->next( ) > 0.

CLEAR: id_concepto, n_acumulado.

GET REFERENCE OF id_concepto INTO l_ref.
lo_result->set_param( l_ref ).

GET REFERENCE OF n_acumulado INTO l_ref.
lo_result->set_param( l_ref ).

CONCATENATE p_conceptos ' TO_NUMBER(' n_acumulado ') CONCEPTO_' id_concepto ','
INTO p_conceptos.

* ENDWHILE.

*
* concepto = (dsConceptos.Tables[0].Rows[i]["ID_CONCEPTO"]).ToString();
* nombre_columna = (dsConceptos.Tables[0].Rows[i]["N_ACUMULADO"]).ToString();
* coma = ",";
* if ( i == ( dsConceptos.Tables[0].Rows.Count -1 ) )
* {
* coma = " ";
* }
* string_conceptos = string_conceptos + " TO_NUMBER(" + nombre_columna + ") CONCEPTO_" + concepto+coma;
* }
* return string_conceptos;

CATCH cx_parameter_invalid INTO lx_parameter_invalid.
CALL METHOD lx_sql_exception->if_message~get_text
RECEIVING
result = result.

CATCH cx_sql_exception INTO lx_sql_exception.
CALL METHOD lx_sql_exception->if_message~get_text
RECEIVING
result = result.

CLEANUP.

ENDTRY.

IF p_conceptos IS INITIAL.
result = 'Error al leer los CC-Nómina en META4. No se han recuperado datos.'.
ENDIF.

ENDFORM. " CONSTRUIR_SELECT_CONCEPTOS

Nota: La tabla de META4 existe y contiene datos.