none
KARDEX APLICANDO EL METODO PROMEDIO PONDERADO RRS feed

  • Pregunta

  • Buenas tardes

    Necesito ayuda, tengo que hacer un kardex aplicando el metodo promedio ponderado, esta es la consulta que tengo hasta el momento.

    SELECT
    CONVERT(DATE,AI.AdjustTime) AS FECHA
    ,AI.INVENNUM AS ID_PROD
    ,(SELECT INV.DESCRIPT FROM DBA.inventory INV WHERE INV.INVENNUM=AI.INVENNUM) AS DETALLE
    ,(CASE
    WHEN AI.Reason='POS Used' AND AI.ADJUSTUNITS=1 and AI.PURID=1003 then 'EI' || AI.INVENNUM
    ELSE
    (CASE
    WHEN AI.TRANSNUM<>1003  AND AI.ADJUSTTYPE=1 THEN 'II' || AI.INVENNUM
    END)
    END) AS COMPROBANTE
    ,AI.WAREHOUSENUM AS BO
    ,ISNULL(AI.ADJUSTUNITS,0) AS CANTIDAD
    ,ISNULL(AI.PURPRICE,0) AS COST_UNI
    ,ISNULL((CANTIDAD*COST_UNI),0) AS COST_TOT
    ,ISNULL((SELECT STD.STARTINV FROM DBA.StockTakeDetail STD WHERE CONVERT(DATE,AI.AdjustTime)=CONVERT(DATE,STD.StartDate) AND STD.STOCKTAKENUM=2001),0) AS SALDO_INI
    FROM DBA.AdjustInventory AI
    WHERE INVENNUM=2148

    Estos son los datos que tengo hasta el momento.

    No logro aplicar el metodo promedio ponderado.  :(

    Por favor alguna idea de como podria empezar.

    En la columna comprobante los II=COMPRAS y EI=VENTAS.

    Saludos.

    martes, 18 de junio de 2019 21:52

Todas las respuestas

  • FECHA           ID_PROD    DETALLE         COMPROBANTE   BO     CANTIDAD   COST_UNI  COST_TOT   SALDO_INI

    2019-06-11    2148        Agua sin gas        II2148                 1001       12.0               1.0             12.0              12.0

    2019-06-11    2148        Agua sin gas        EI2148                1001        1.0                 0.0              0.0               12.0




    • Editado NancyMa martes, 18 de junio de 2019 22:08
    martes, 18 de junio de 2019 22:03
  • Hola NancyMa.

    Lo primero es indicar correctamente tu escenario. 

    Y en SQL server no funcióna || por tanto, ¿cuál es el motor de ejecución de tú consulta? y ¿en qué versión? 

    miércoles, 19 de junio de 2019 18:36
  • Bueno investigando un poco más en tú consulta, creo que tienes que hacerlo de otro modo. Mira esto por si se acerca a lo que quieres.

    SELECT CONVERT(DATE, AI.AdjustTime) AS FECHA, 
           AI.INVENNUM AS ID_PROD, 
           INV.DESCRIPT AS DETALLE, 
           (CASE WHEN AI.Reason = 'POS Used' AND AI.ADJUSTUNITS = 1 AND AI.PURID = 1003 THEN 'EI' + AI.INVENNUM
    	  /* al no haber else, realmente solo tienes que hacer un case, no hace falta anidarlo */
    		   WHEN AI.TRANSNUM <> 1003 AND AI.ADJUSTTYPE = 1 THEN 'II' + AI.INVENNUM
            END) AS COMPROBANTE, 
           AI.WAREHOUSENUM AS BO, 
           ISNULL(AI.ADJUSTUNITS, 0) AS CANTIDAD, 
           ISNULL(AI.PURPRICE, 0) AS COST_UNI, 
           ISNULL((CANTIDAD * COST_UNI), 0) AS COST_TOT, 
           ISNULL(STD.STARTINV,0) AS SALDO_INI
    
    FROM DBA.AdjustInventory AI
         LEFT JOIN DBA.inventory INV ON INV.INVENNUM = AI.INVENNUM
    	LEFT JOIN DBA.STOCKTAKEDETAIL STD ON CAST(STD.STARTDATE AS DATE) =  CAST(AI.ADJUSTTIME AS DATE)
    	AND STD.STOCKAKENUM = 2001
    	AND STD.INVENNUM = AI.INVENUM /* supongo que inventario se relacionará con stock al menos por el codigo de producto*/
    
    WHERE INVENNUM = 2148;

    Intenta evitar las subconsultas. 

    Te he relacionado los conjuntos por si no hubiese stock, y si no hubiese inventarios, pero esta parte necesita de tú aporte o validación

    miércoles, 19 de junio de 2019 18:49
  • Hola Javi FErnandez

    Le agradezco por su interés, estoy utilizando la bd de Sybase (SqlAnywhere v10)

    miércoles, 19 de junio de 2019 23:09
  • Hola NancyMa:

    Mira a ver si te funcionan correctamente las sugerencias que te he indicado en el anterior mensaje, ya que evitar el uso de subconsultas, es igual de bueno en todos los SBGD.

    Creo que la consulta debiera de funcionarte, pero mi conocimiento de SyBase es nulo.

    Suerte

    jueves, 20 de junio de 2019 3:53
  • Muchas gracias por su aporte.

    Saludos cordiales.

    jueves, 20 de junio de 2019 17:51