Tengo una tabla z la cual estoy llenando desde un programa, pero hay un campo que no se esta llenando, ya que este tomara el valor de una variable que esta en otra subrutina dentro del programa.
Quisiera saber si de alguna forma, cuando la variable tome valor, puedo actualizar el campo del registro de la tabla z con el valor que tome la variable.
Espero hayan entendido y me puedan colaborar.
De ante mano muchas gracias.
Hola !
¿Estas creando el registro de la tabla Z y, durante la creación del registro, realizas un perform a la subrutina donde actualizas la variable? O ¿Vas a llenar la tabla Z, y cuando tengas todos los registros realizas el perform a la subrutina?
Hola, gracias por tu respuesta, estoy creando los registros de la tabla z en una subrutina, pero el valor de solo un campo de la tabla z esta en otra subrutina diferente. No se si haya forma de hacer un update o algo por el estilo solo a ese campo.
No se ABAP, pero se algo de programación.
Si vas a necesitar que te retorne un valor, no debería ser una función que te retorne el valor, y esa la captures en el campo que te falta (o en alguna variable temporal)?
Porque si pones el valor en una variable local, que solo existe en tu sub-rutina, al finalizar la rutina, el valor se pierde
Si se puede, por eso te preguntaba como era la estructura del programa, para tener una idea.
Una opción es con el PERFORM, con el invocas a la subrutina para modificar el dato.
PERFORM subrutina USING campos para validar CHANGING campo a modificar
Entiendo, lo que pasa es que estoy tomando el valor del registro que esta en la tabla z.
Te explico, la tabla z la estoy utilizando para almacenar los valores que se registren por si en dado caso se llega a caer el sistema.
Si el sistema se cae, tengo que coger el (los) registro que se almaceno(aron) y a ese registro le tengo que actualizar el campo que esta en la otra subrutina como explicaba anteriormente, modifique un poco el programa y el valor de ese campo ya no esta en una variable si no en el campo de una estructura.
No se si entiendo bien el problema, esto es lo que yo creo que explicas:
it_sistema_caido
Campos A, B, C, D(pendiente de actualizar)
PERFORM segunda_rutina
… lv_d "campo con la información actualizada
ENDPERFORM.
Puedes utilizar un PERFORM subrutina CHANGING tabla interna como indica @Chivis, y en CHANGING pones la tabla interna con la que actualizarías la tabla Z.
Una vez que tienes actualizada tu tabla interna, realizas un UPDATE con toda la tabla.
wa_enmrf-tanum = wa_lotes-tanum.
wa_enmrf-ebeln = zwa_ekko-ebeln.
wa_enmrf-ebelp = zwa_ekpo-ebelp.
wa_enmrf-werks = wa_ekpo-werks.
wa_enmrf-lgort = wa_almacen-lgort.
wa_enmrf-lgnum = wa_almacen-lgnum.
wa_enmrf-matnr = wa_lotes-matnr.
wa_enmrf-txz01 = zwa_ekpo-txz01.
wa_enmrf-charg = wa_lotes-charg.
wa_enmrf-cantent = wa_lotes-nsola.
wa_enmrf-meins = zwa_ekpo-meins.
CLEAR wa_entradas.
LOOP AT ti_entradas INTO wa_entradas WHERE ebeln = wa_enmrf-ebeln AND
ebelp = wa_enmrf-ebelp AND
matnr = wa_enmrf-matnr.
wa_enmrf-hsdat = wa_entradas-hsdat.
wa_enmrf-vfdat = wa_entradas-vfdat.
ENDLOOP.
wa_enmrf-belnr = wa_doc_create-mat_doc. "campo pendiente por actualizar.
APPEND wa_enmrf TO ti_enmrf.
INSERT zenmrf FROM TABLE ti_enmrf.
Así esta el código de la subrutina donde lleno la tabla interna y después inserto el registro a la tabla z, en otra subrutina se genera el valor en el campo de la estructura y ese es el que debo actualizar en el registro.
Entiendo lo del llamado de la subrutina, pero no lo puedo hacer ya que haría el proceso completo de la subrutina haciendo la bapi que utilizo 2 veces.
Ya logre hallar una solución con la sentencia update.
Lo hice de la siguiente forma:
UPDATE zenmrf SET belnr = wa_doc_create-mat_doc
WHERE ebeln = zwa_ekko-ebeln AND
ebelp = wa_posiciones-po_item AND
belnr = space.
El campo se actualizara siempre y cuando se cumplan las condiciones que requiero para que el mismo se actualice, de antemano le doy muchas gracias a los compañeros que se tomaron el tiempo para responder a mi inquietud, muchas gracias