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?.
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
Estas son básicamente las instrucciones paso a paso que puedes usar. Lógica:
Insertar entrada nueva en tabla de almacen
si se insertó OK, entonces leer tabla de stock
si existe stock, sumarle la cantidad
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>."