CREATE OR ALTER PROCEDURE MG_REP_COSTOS_PT 
returns (
    articulo_id integer,
    clave_articulo varchar(20),
    articulo varchar(200),
    unidad_venta varchar(20),
    costo_unitario numeric(18,6))
as
declare variable concepto_in_id integer;
declare variable folio char(9);
BEGIN
    FOR SELECT A.ARTICULO_ID, A.CLAVE_ARTICULO, B.NOMBRE, B.UNIDAD_VENTA
    FROM MG_DOCTOS_DET_MNIVEL A
    INNER JOIN ARTICULOS B ON(A.ARTICULO_ID = B.ARTICULO_ID)
    INNER JOIN MG_ARTICULOS_FAB C ON (C.ARTICULO_ID = B.ARTICULO_ID)
    WHERE C.TIPO = 'Producto terminado'
    AND B.ESTATUS = 'A'
    GROUP BY A.ARTICULO_ID, A.CLAVE_ARTICULO, B.NOMBRE, B.UNIDAD_VENTA
    ORDER BY A.ARTICULO_ID, A.CLAVE_ARTICULO, B.NOMBRE, B.UNIDAD_VENTA
    INTO ARTICULO_ID, CLAVE_ARTICULO, ARTICULO, UNIDAD_VENTA
    DO
    BEGIN
        SELECT FIRST 1 E.FOLIO, E.CONCEPTO_IN_ID
        FROM MG_DOCTOS_DET_MNIVEL D
        INNER JOIN MG_DOCTOS_MNIVEL E ON ( E.MG_DOCTO_MNIVEL_ID = D.MG_DOCTO_MNIVEL_ID )
        WHERE D.ARTICULO_ID = :ARTICULO_ID
        ORDER BY D.MG_DOCTO_DET_MNIVEL_ID DESC
        INTO FOLIO, CONCEPTO_IN_ID;

        SELECT FIRST 1 B.COSTO_UNITARIO
        FROM DOCTOS_IN A
        INNER JOIN DOCTOS_IN_DET B ON ( A.DOCTO_IN_ID = B.DOCTO_IN_ID AND B.ARTICULO_ID = :ARTICULO_ID )
        WHERE A.CONCEPTO_IN_ID = :CONCEPTO_IN_ID AND A.FOLIO = :FOLIO
        INTO COSTO_UNITARIO;

        SUSPEND;
    END
END;

GRANT EXECUTE ON PROCEDURE MG_REP_COSTOS_PT TO USUARIO_MICROSIP;