MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 15/11/07, 15:58:33
Juan Fernando Ruelas Noa Juan Fernando Ruelas Noa is offline
Junior Member
 
Fecha de Ingreso: oct 2007
Mensajes: 3
Cool SQL DINAMICO - UPDATE y WHERE de tablas Z

Hola Amigos del Mundo ABAP
Que tal, espero todo bien, un favor tenemos un dilema con un Req. Por cambio de moneda en Venezuela

Lo que pasa es que es necesario dividir algunas columnas tipo moneda de casi todas las tablas Z de SAP, entre 1000.

Como veran la descripción funcional es bien sencilla, la complicación surge en la parte técnica, ya que según lo que han solicitado, los usuarios podrán mantener una tabla ZHardCode con las tablas que se van a tratar, sus respectivos campos a dividir y los filtros que se tendrá (Sociedad, País, Centro, etc) aparentemente estos filtros serán los mismos pero no es así, ya que el nombre de los campos en las diferentes tablas Z es diferente, eso complica la situación.

Las tablas internas cargadas de la ZhardCode que servirían para procesar la información tendrían la siguiente estructura:

Cargar tablasZ ti_tablasz
Numero Nombre Tabla
1 ZABC1
2 ZABC2
3 ZABC3
4 ZABC4
….
n ZABCn

Cargar camposupdateTablasZ (ZABCn) ti_campos_tz
Numero Nombre Tabla Campos UPDATE
1 ZABC1 CampoTABC1_1
CampoTABC1_2
2 ZABC2 CampoTABC2_1
CampoTABC2_2
CampoTABC2_3
CampoTABC2_4
3 ZABC3 CampoTABC3_1
4 ZABC4 CampoTABC4_1
….
n ZABCn CampoTABCn_n

Cargar camposwhereTablaZ (ZABCn) ti_condiciones_tz
Numero Nombre Tabla Campos WHERE
1 ZABC1 CampoTABC1_1
CampoTABC1_2
2 ZABC2 CampoTABC2_3
CampoTABC2_4
3 ZABC3 CampoTABC3_1
4 ZABC4 CampoTABC4_1
….
n ZABCn CampoTABCn_n

Ejem de un loop:
Loop at ti_tablasZ (ZABC2)
Cargar camposupdateTablasZ (ZABC2) ¨ Devuelve str_campos_update ejemplo CampoTABC2_3 / 1000, CampoTABC2_4 / 1000
Cargar camposwhereTablaZ (ZABC2) ¨ Devuelve str_campos_where ejemplo CampoTABC2_1 = ‘VE01’ AND, CampoTABC2_2 = ‘C01’

UPDATE (ZABC2) SET CampoTABC2_3 / 1000, CampoTABC2_4 / 1000 WHERE CampoTABC2_1, CampoTABC2_2

Endloop.
Endloop.

Pls has visto algo así antes? O sabes si es posible hacerlo? Sobre todo en la parte de los wheres ya que son dinamicos también, en realidad es como si el usuario estaría construyendo una sentencia update pero desde una interfaz,

Gracias por el apoyo, y disculpen las molestias.

Saudos
Fernando
Responder Con Cita
  #2  
Viejo 15/11/07, 16:54:43
Juan Fernando Ruelas Noa Juan Fernando Ruelas Noa is offline
Junior Member
 
Fecha de Ingreso: oct 2007
Mensajes: 3
Thumbs up can we use field symbol inside sql statement as work area

Amigos, encontramos este link muy interesante



Les copio el codigo tb, gracias.

PERFORM F_GET_DATA IN PROGRAM YCOMMON_PERFORM
USING &KNA1&
USING &W_KUNNR&
CHANGING &W_KUNNR&
CHANGING &W_LAND1&
CHANGING &W_NAME1&

FORM f_get_data TABLES i_inval STRUCTURE itcsy
i_outval STRUCTURE itcsy.
DATA : w_field(10).
DATA : i_field LIKE TABLE OF w_field.

DATA : w_condition(50),
i_condition LIKE TABLE OF w_condition,
w_where TYPE i,
w_outvalue TYPE i.

DATA : w_table TYPE tabname.
DATA : i_alv_cat TYPE TABLE OF lvc_s_fcat,
ls_alv_cat LIKE LINE OF i_alv_cat.
DATA : d_ref TYPE REF TO data.

FIELD-SYMBOLS : <f_table> TYPE table,
<f_wa> TYPE ANY,
<f_field> TYPE ANY.
* sy-cprog = 'YCOMMON_PERFORM'.
* read table i_inval index 1.
DESCRIBE TABLE i_inval LINES w_where.
DESCRIBE TABLE i_outval LINES w_outvalue.

w_where = w_where - 1. "to eliminate the table record.

LOOP AT i_inval.
IF sy-tabix EQ 1.
w_table = i_inval-name. "get the table name.
"name of the table must be declared
"as it is.. eg KNA1
ELSE.
w_field = i_inval-name+2. "the field name to be
"declared as w_xxx.
IF w_where EQ 1.
CONCATENATE w_field ' EQ ''' i_inval-value ''''
INTO w_condition.
ELSE.
CONCATENATE w_field ' EQ ''' i_inval-value ''' AND'
INTO w_condition.

ENDIF.
w_where = w_where - 1.
APPEND w_condition TO i_condition.
ENDIF.
ENDLOOP.

LOOP AT i_outval.
MOVE i_outval-name+2 TO w_field. "the field name to be declared
"as W_XXXX.
APPEND w_field TO i_field.
ls_alv_cat-fieldname = w_field.
ls_alv_cat-ref_table = w_table.
ls_alv_cat-ref_field = w_field.
APPEND ls_alv_cat TO i_alv_cat.

ENDLOOP.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING it_fieldcatalog = i_alv_cat
IMPORTING ep_table = d_ref .
ASSIGN d_ref->* TO <f_table>.

SELECT (i_field) FROM (w_table)
INTO CORRESPONDING FIELDS OF TABLE
<f_table> WHERE (i_condition).
LOOP AT <f_table> ASSIGNING <f_wa>.
EXIT.
ENDLOOP.

DO w_outvalue TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE <f_wa> TO <f_field>.
READ TABLE i_outval INDEX sy-index.
MOVE <f_field> TO i_outval-value.
MODIFY i_outval INDEX sy-index.
ENDDO.

ENDFORM.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 12:03:38.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web