Relación entre tablas Z

Buenas a todos.

Tengo dos tablas, Z_ENTRADAS_ALMACEN (CodigoAlmacen, CodigoProd, CantidadEntrante) y Z_STOCK (CodigoAlmacen, CodigoProd, CantidadStock).

Quiero programar un JOB para que de forma periódica registre entradas en Z_ENTRADAS_ALMACEN, cuando entre un nuevo registro se debe actualizar las cantidades correspondientes en Z_STOCKS.

¿Como puedo implementar la lógica de que se actualize Z_STOCK en función de una nueva entrada en Z_ENTRADAS_ALMACEN?.

Espero haberme explicado y muchas gracias.

Buenos días fryson.

Saludos desde mexico, nos puedes dar mas datos al respecto?, es decir si esas tablas Z se van a actualizar por un proceso JOB detonado por las transaccion estandar de SAP MIGO (Entradas o Salidas de Mercancia) o como es que piensas que ese JOB se ejecute, al pendiente de tus comentarios

2 Me gusta

Hola Fryson,

Estas son básicamente las instrucciones paso a paso que puedes usar. Lógica:

  1. Insertar entrada nueva en tabla de almacen
  2. si se insertó OK, entonces leer tabla de stock
    1. si existe stock, sumarle la cantidad
    1. si no existe stock, crear stock con la cantidad de entrada

Puedes incluir manejo de errores, de COMMIT-WORK o fields-symbols para mejorar tu código también, pero como dijo Jack El Destripador: vamos por partes. Código de ejemplo:

LOOP AT lt_ENTRADAS INTO ls_entrada.                                "recorrer entradas pendientes"

  INSERT INTO Z_ENTRADAS_ALMACEN    VALUES ls_entrada.              "registrar entrada"
  IF sy-subrc EQ 0. "INSERT INTO Z_ENTRADAS_ALMACEN"                "si se registró la entrada"

    SELECT SINGLE *    FROM Z_STOCK                                 "buscar contador de stock"
      WHERE  CodigoAlmacen EQ ls_entrada-CodigoAlmacen
        AND  CodigoProd EQ ls_entrada-CodigoProd
      INTO ls_stock.

    IF sy-subrc EQ 0. "SELECT SINGLE *    FROM Z_STOCK"             "si el contador está"
      
      add ls_entrada-CantidadEntrante TO ls_stock-CantidadStock .   "incrementarlo"
      
    ELSE.   "IF sy-subrc EQ 0." "SELECT SINGLE *    FROM Z_STOCK"   "si el contador NO está"
      
      ls_stock-CodigoAlmacen = ls_entrada-CodigoAlmacen .           "preparar cuenta inicial"
      ls_stock-CodigoProd = ls_entrada-CodigoProd .                 "preparar cuenta inicial"
      ls_stock-CodigoProd = ls_entrada-CantidadEntrante .           "preparar cuenta inicial"
      
    ENDIF. "IF sy-subrc EQ 0. " "SELECT SINGLE *    FROM Z_STOCK"

    MODIFY Z_STOCK FROM ls_stock.                                 "actualizar stock (INSERT/UPDATE según sea necesario)"

  ENDIF.  "IF sy-subrc EQ 0. " "INSERT INTO Z_ENTRADAS_ALMACEN" 

ENDLOOP.  "LOOP AT IT_ENTRADAS ASSIGNING <st_entradas>."


Mucha suerte Fryson, espero te sea de utilidad.

2 Me gusta

Ha sido de mucha utilidad.

1 me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.