#1
|
||||
|
||||
Problemas con MODIFY
Hola Chicos,
aqui les tengo una consulta de objeto, fijence en un programa estoy creando una tabla interna dinamica, eso esta fino, pero dicha tabla como es dinamica el field-symbol lo declare type any table, y yo estoy manipulando los registros de esta tabla y necesito modificar algunos campos en ella. Qué pasa? cuando le aplico el modify a <l_table> no me lo permite por ser ANY TABLE y el modify no se permite para estos tipo de datos ni para las hashed. Se los pongo abajo: FIELD-SYMBOLS: <l_table> TYPE ANY TABLE, <l_line> TYPE ANY, MOVE-CORRESPONDING <l_line> TO <l_table>. MODIFY <l_table>. Error sintaxis: You cannot use explicit or implicit index operations on tables with types "HASHED TABLE" or "ANY TABLE". "<L_TABLE>" has the type "ANY TABLE". It is possible that before "<L_TABLE>". Mi pregunta es: qué podre hacer para lograr esto?
__________________
Daniela Gutierrez Consultor ABAP Venezuela |
#2
|
|||
|
|||
Daniela,
Hiciste un ASSIGN? Fijate en el esta página que hay un ejemplo: |
#3
|
||||
|
||||
Problemas con Modify
Si, toda mi tabla dinamica y work area corre perfectamente, lo que pasa es que no te copie todo el codigo, te lo pongo abajo, el problema esta es cuando quiero modificar mi tabla transparente de mi work area, fijate:
REPORT z5_convert_tabla. TYPE-POOLS: slis. TABLES: dd03p. DATA: it_fcat TYPE slis_t_fieldcat_alv, is_fcat LIKE LINE OF it_fcat, nametab TYPE slis_tabname. DATA: it_fieldcat TYPE lvc_t_fcat, is_fieldcat LIKE LINE OF it_fieldcat. DATA: new_table TYPE REF TO data. DATA: new_line TYPE REF TO data. FIELD-SYMBOLS: <l_table> TYPE ANY TABLE, <l_line> TYPE ANY, <monto> TYPE ANY, <campo> TYPE ANY, <l_field> TYPE ANY. *//Pantallas. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. PARAMETERS: p_tabla TYPE tabname16. SELECT-OPTIONS: s_campos FOR dd03p-fieldname NO INTERVALS. SELECTION-SCREEN END OF BLOCK b1. *// Catalogo nametab = p_tabla. CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_structure_name = nametab CHANGING ct_fieldcat = it_fcat[]. LOOP AT it_fcat INTO is_fcat WHERE NOT reptext_ddic IS INITIAL. MOVE-CORRESPONDING is_fcat TO is_fieldcat. is_fieldcat-fieldname = is_fcat-fieldname. is_fieldcat-ref_field = is_fcat-fieldname. is_fieldcat-ref_table = is_fcat-ref_tabname. APPEND is_fieldcat TO it_fieldcat. ENDLOOP. break dgutierrez. *// Crear tabla interna dinámica. CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = it_fieldcat IMPORTING ep_table = new_table. *// Crear area de trabajo de la estrcutura de la misma tabla. ASSIGN new_table->* TO <l_table>. CREATE DATA new_line LIKE LINE OF <l_table>. ASSIGN new_line->* TO <l_line>. *//Busqueda de datos a convertir. SELECT * FROM (p_tabla) INTO CORRESPONDING FIELDS OF TABLE <l_table>. break dgutierrez. break atravascio. DATA: var(100), cal(15) TYPE c. *//Conversión de datos. LOOP AT <l_table> INTO <l_line>. LOOP AT s_campos. ASSIGN COMPONENT s_campos-low OF STRUCTURE <l_line> TO <l_field>. <l_field> = <l_field> / 1000. MODIFY (nametab) from <l_field>. ENDLOOP. ENDLOOP. Esto me da un error en tiempo de ejecución (dump) : SAPSQL_WA_TOO_SMALL
__________________
Daniela Gutierrez Consultor ABAP Venezuela |
#4
|
|||
|
|||
Daniela,
Probé tu programa y me tira otro dump. Probablemente sea por la tabla y el campo con el que lo estoy ejecutando: como falla el ASSIGN, en la instrucción siguiente me tira un DUMP. Con qué tipo de campo lo estás probando vos? Igualmente, lo que noto es que vos a <l_field> le estás asignando s_campos-low y después intentás hacer el MODIFY con ese mismo field-symbol... y como ese field-symbol tiene asignado un campo que no es del mismo tipo que la estructura de la tabla está tirando el dump. Fijate que el dump dice que el Work Area de la estructura es muy chico. Cuando hacés el modify, usá una estructura del tipo de la tabla, y a esa estructura copiale el valor que querés cargar. Espero que te sirva... |
#5
|
||||
|
||||
Problemas MODIFY
Tienes razon, fue que te lo copie mal. aqui esta cambiado.
*//Conversión de datos. LOOP AT <l_table> INTO <l_line>. LOOP AT s_campos. ASSIGN COMPONENT s_campos-low OF STRUCTURE <l_line> TO <l_field>. <l_field> = <l_field> / 1000. MODIFY (nametab) from <l_line>. ENDLOOP. ENDLOOP. Pero de igual manera me sigue dando el mismo dump: SAPSQL_WA_TOO_SMALL Lo estoy probando con : Nombre tabla: BSEG. Campo : DMBTR. Si, terrible mi prueba utilizando la BSEG jejej, pero este solo lo voy a utilizar con tablas Z.
__________________
Daniela Gutierrez Consultor ABAP Venezuela |
#6
|
|||
|
|||
Acabo de ver lo que está pasando...
Dentro del código hacés el siguiente loop: LOOP AT it_fcat INTO is_fcat WHERE NOT reptext_ddic IS INITIAL. MOVE-CORRESPONDING is_fcat TO is_fieldcat. is_fieldcat-fieldname = is_fcat-fieldname. is_fieldcat-ref_field = is_fcat-fieldname. is_fieldcat-ref_table = is_fcat-ref_tabname. APPEND is_fieldcat TO it_fieldcat. ENDLOOP. Y en base a eso creás it_fieldcat. El problema es que en ese loop no estás tomando todos los campos porque los que tienen el campo reptext_ddic vacío no entran. Entonces, la estructura te queda incompleta y por eso da ese dump cuando intentás hacer el modify. Si le sacás esa condición al loop no te va a tirar más el dump. Decime si te sirvió! |
#7
|
||||
|
||||
Solución Problema
Pues te cuento, tque tienes mucha razón, no lo habia visto y tenia 2 días en esto. jejejej, muchas gracias!!!
__________________
Daniela Gutierrez Consultor ABAP Venezuela |
#8
|
|||
|
|||
Me alegro que se haya solucionado el problema!
Saludos |
#9
|
|||
|
|||
Va01
Buen día abapers, quisiera hacerles una consulta a ver si alguien me puede ayudar. Me pasaron un requerimiento en el cual lo que me piden es que al ejecutar la transacción va01 se ingrese un importe, pero en caso de que el usuario le de click al boton back y lo modifique a dicho importe, se pueda tener acceso a ambos. Tanto el importe viejo, como el nuevo.
Dichos valores quieren poder verlos en el momento de hacer click en el botón save. Estuve analizando un poco, y si bien tengo acceso a las exits que se ejecutan en el momento de modificar dicho valor y de guardar, no me sirve porque la misma llama a una subscreen con lo cual se pierde los valores globales. No se si entiende, si a alguien se le ocurre como mantener esos valores globalmente se los agradezco mucho. Aguardo sugerencias, saludos |
Herramientas | Buscar en Tema |
Desplegado | |
|
|