none
ANTONIO FIGUEROA RRS feed

  • Pregunta

  • FECHA...........PRODUCTO...SALDO INICIAL .....ENTRADAS.......SALIDAS.......SALDO FINAL

    13/08/2019   CAMISA                 8                        2                   1                       9

    31/08/2019   CAMISA                 9                         0                   1                      8

    13/08/2019    PANTALON            5                          0                    1                    4

    HOLA QUERIA AYUDA SOBRE COMO MOSTRAR ESTA MISMA TABLA PERO TOTALIZÁNDOLA POR MES DE MANERA QUE SALGA EL STOCK INICIAL DEL MES LA SUMATORIA DE ENTRADAS,LA SUMATORIA DE SALIDAS Y STOCK FINAL QUE SERIA STOCK INICIAL + ENTRADAS- SALIDAS 

    DE ESTA FORMA

    MES ...........PRODUCTO...SALDO INICIAL .....ENTRADAS.......SALIDAS.......SALDO FINAL

    AGOSTO        CAMISA              8                           2                 2                     8

    AGOSTO        PANTALON           5                          0                 1                      4

    HACIENDO UN RESUMEN SOLO POR EL MES QUE ESCOJA  

    miércoles, 14 de agosto de 2019 0:27

Respuestas

  • HOLA EL CÓDIGO NUMERO 2  FUNCIONA BIEN CUANDO HAY REGISTROS ÚNICOS DE SALIDA POR DÍA PERO  SI HAY DOS SALIDAS DEL MISMO PRODUCTO EN EL MISMO DIA NO SUMA LAS SALIDAS NI LAS RESTA AL SALD

    Cambié el CTE kardex_seq para tratar la existencia de múltiples movimientos del mismo producto en el mismo día.

    -- código #2 v3
    declare @Mes int, @Ano int;
    set @Mes= 8;
    set @Ano= 2019;
    
    declare @DataI date, @DataF date, @DenoMes varchar(20);
    set @DataI= convert (date, '1/' + cast(@Mes as varchar(2)) + '/' + cast (@Ano as char(4)), 103);
    set @DataF= dateadd (day, -1, dateadd (month, +1, @DataI));
    set language Español;
    set @DenoMes= upper (datename (month, @DataI));
    
    with 
    kardex_seq as (
    SELECT PRODUCTO, FECHA, MOVIMIENTO, 
           cast (sum (CANTIDAD) as decimal(18,2)) as CANTIDAD,
    seq= row_number() over (partition by PRODUCTO order by FECHA, MOVIMIENTO) from kardex
    where FECHA <= @DataF group by PRODUCTO, FECHA, MOVIMIENTO ), Saldo_Diario as ( SELECT FECHA, PRODUCTO, cast (0 as decimal (18,2)) as SALDO_INICIAL, case when MOVIMIENTO = 'ENTRADA' then CANTIDAD else 0 end as ENTRADA, case when MOVIMIENTO = 'SALIDA' then CANTIDAD else 0 end as SALIDA, case when MOVIMIENTO = 'ENTRADA' then CANTIDAD else -CANTIDAD end as SALDO_FINAL, seq from kardex_seq where seq = 1 union all SELECT KS.FECHA, KS.PRODUCTO, SD.SALDO_FINAL, case when KS.MOVIMIENTO = 'ENTRADA' then KS.CANTIDAD else 0 end, case when KS.MOVIMIENTO = 'SALIDA' then KS.CANTIDAD else 0 end, cast (case when KS.MOVIMIENTO = 'ENTRADA' then (SD.SALDO_FINAL + KS.CANTIDAD) else (SD.SALDO_FINAL - KS.CANTIDAD) end as decimal(18,2)), KS.seq from Saldo_Diario as SD inner join kardex_seq as KS on KS.PRODUCTO = SD.PRODUCTO and KS.seq = (SD.seq +1) ), Lectura as ( SELECT *, prim= row_number() over (partition by PRODUCTO order by FECHA), ult= row_number() over (partition by PRODUCTO order by FECHA desc) from Saldo_Diario where FECHA between @DataI and @DataF ) SELECT @DenoMes as MES, PRODUCTO, max (case when prim = 1 then SALDO_INICIAL end) as SALDO_INICIAL, sum (ENTRADA) as ENTRADAS, sum (SALIDA) as SALIDAS, max (case when ult = 1 then SALDO_FINAL end) as SALDO_FINAL from Lectura group by PRODUCTO;
     


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Marcado como respuesta Antonio Figueroa sábado, 24 de agosto de 2019 16:23
    • Editado José Diz sábado, 24 de agosto de 2019 19:29
    miércoles, 21 de agosto de 2019 14:29

Todas las respuestas

  • HOLA QUERIA AYUDA SOBRE COMO MOSTRAR ESTA MISMA TABLA PERO TOTALIZÁNDOLA POR MES DE MANERA QUE SALGA EL STOCK INICIAL DEL MES LA SUMATORIA DE ENTRADAS,LA SUMATORIA DE SALIDAS Y STOCK FINAL QUE SERIA STOCK INICIAL + ENTRADAS- SALIDAS 

    HACIENDO UN RESUMEN SOLO POR EL MES QUE ESCOJA  

    ¿Cuál es la versión de SQL Server?

    ---

    Antonio, aquí hay una sugerencia:

    -- código #1
    --
    declare @Mes int, @Ano int;
    set @Mes= 8;
    set @Ano= 2019;
    
    --
    declare @DataI date, @DataF date, @DenoMes varchar(20);
    set @DataI= convert (date, '1/' + cast(@Mes as varchar(2)) + '/' + cast (@Ano as char(4)), 103);
    set @DataF= dateadd (day, -1, dateadd (month, +1, @DataI));
    set language Español;
    set @DenoMes= datename (month, @DataI); -- with Lectura as ( SELECT *, prim= row_number() over (partition by PRODUCTO order by FECHA), ult= row_number() over (partition by PRODUCTO order by FECHA desc) from STOCK where FECHA between @DataI and @DataF ) SELECT @DenoMes, PRODUCTO, max (case when prim = 1 then [SALDO INICIAL] end) as [SALDO INICIAL], sum (ENTRADAS) as ENTRADAS, sum (SALIDAS) as SALIDAS, max (case when ult = 1 then [SALDO FINAL] end) as [SALDO FINAL] from Lectura group by PRODUCTO;
    Reemplace STOCK con el nombre de la tabla.   



    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    miércoles, 14 de agosto de 2019 3:41
  • HOLA USO SQLSERVER 2014

    miércoles, 14 de agosto de 2019 14:19
  • HOLA USO SQLSERVER 2014

    Ok.

    ¿Tienes lo que necesitas cuando ejecutas el código #1?


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    miércoles, 14 de agosto de 2019 16:13
  • HOLA AL EJECUTAR EL QUERY ME MARCA ALGUNOS ERRORES LA TABLA QUE UTILIZO ES ESTA CON ALGUNOS DATOS DE PRUEBA

    CREATE TABLE kardex
    (FECHA      DATE, 
     DOCUMENTO  VARCHAR(4), 
     PRODUCTO   VARCHAR(15), 
     CANTIDAD   DECIMAL(18,2), 
     MOVIMIENTO VARCHAR(15)
    );
    GO

    INSERT INTO kardex
    (FECHA,
    DOCUMENTO,
    PRODUCTO,
    CANTIDAD,
    MOVIMIENTO)
    VALUES
    ('20190730','0001','CAMISA',15,'ENTRADA'),
    ('20190731','0002','CAMISA',2,'SALIDA'),
    ('20190801','0003','CAMISA',3,'ENTRADA'),
    ('20190801','0007','CAMISA',1,'SALIDA'),
    ('20190802','0004','CAMISA',2,'SALIDA'),
    ('20190803','0005','CAMISA',1,'ENTRADA'),
    ('20190830','0006','CAMISA',2,'SALIDA'),
    ('20190901','0007','PANTALON',4,'ENTRADA'),
    ('20190802','0008','PANTALON',2,'SALIDA'),
    ('20190803','0009','PANTALON',1,'ENTRADA'),
    ('20190830','0010','PANTALON',2,'SALIDA')
    ;
    GO

    LOS ERRORES QUE MARCA SON ESTOS


    Mens. 207, Nivel 16, Estado 1, Línea 22
    El nombre de columna 'SALDO INICIAL' no es válido.
    Mens. 207, Nivel 16, Estado 1, Línea 23
    El nombre de columna 'ENTRADAS' no es válido.
    Mens. 207, Nivel 16, Estado 1, Línea 24
    El nombre de columna 'SALIDAS' no es válido.
    Mens. 207, Nivel 16, Estado 1, Línea 25
    El nombre de columna 'SALDO FINAL' no es válido

    sábado, 17 de agosto de 2019 14:53
  • HOLA AL EJECUTAR EL QUERY ME MARCA ALGUNOS ERRORES LA TABLA QUE UTILIZO ES ESTA CON ALGUNOS DATOS DE PRUEBA

    En el mensaje de apertura de esta conversación (thread) estaba la existencia de las columnas [SALDO INICIAL] y [SALDO FINAL]. Sin embargo, en la tabla KARDEX no hay información de saldo sino solo información de movimiento. Por lo tanto, primero es necesario calcular el saldo diario a partir del primer movimiento y solo después obtener el informe resumido de cada producto por mes.

    ¿Cuál es la versión de SQL Server?


    -- código #2
    
    declare @Mes int, @Ano int;
    set @Mes= 8;
    set @Ano= 2019;
    
    --
    declare @DataI date, @DataF date, @DenoMes varchar(20);
    set @DataI= convert (date, '1/' + cast(@Mes as varchar(2)) + '/' + cast (@Ano as char(4)), 103);
    set @DataF= dateadd (day, -1, dateadd (month, +1, @DataI));
    set language Español;
    set @DenoMes= upper (datename (month, @DataI));
    
    with 
    kardex_seq as (
    SELECT *, seq= row_number() over (partition by PRODUCTO order by FECHA, MOVIMIENTO)
      from kardex
    ),
    Saldo_Diario as (
    SELECT FECHA, PRODUCTO, cast (0 as decimal (18,2)) as SALDO_INICIAL, 
           case when MOVIMIENTO = 'ENTRADA' then CANTIDAD else 0 end as ENTRADA,
           case when MOVIMIENTO = 'SALIDA' then CANTIDAD else 0 end as SALIDA,
           case when MOVIMIENTO = 'ENTRADA' 
                           then CANTIDAD 
                      else -CANTIDAD end as SALDO_FINAL, seq
      from kardex_seq 
      where seq = 1
    union all
    SELECT KS.FECHA, KS.PRODUCTO, SD.SALDO_FINAL,
           case when KS.MOVIMIENTO = 'ENTRADA' then KS.CANTIDAD else 0 end,
           case when KS.MOVIMIENTO = 'SALIDA' then KS.CANTIDAD else 0 end,
           cast (case when KS.MOVIMIENTO = 'ENTRADA' 
                           then (SD.SALDO_FINAL + KS.CANTIDAD) 
                      else (SD.SALDO_FINAL - KS.CANTIDAD) end as decimal(18,2)), KS.seq
      from Saldo_Diario as SD
           inner join kardex_seq as KS on KS.PRODUCTO = SD.PRODUCTO
                                         and KS.seq = (SD.seq +1)
      where KS.FECHA <= @DataF                                     
    ), 
    Lectura as (
    SELECT *, 
           prim= row_number() over (partition by PRODUCTO order by FECHA),
           ult= row_number() over (partition by PRODUCTO order by FECHA desc)
      from Saldo_Diario
      where FECHA between @DataI and @DataF
    )
    SELECT @DenoMes as MES, PRODUCTO,
           max (case when prim = 1 then SALDO_INICIAL end) as SALDO_INICIAL,
           sum (ENTRADA) as ENTRADAS,
           sum (SALIDA) as SALIDAS,
           max (case when ult = 1 then SALDO_FINAL end) as SALDO_FINAL
      from Lectura
      group by PRODUCTO;

     

    Si esta respuesta te ayudó a resolver tu problema, recuerda marcarla.


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz sábado, 17 de agosto de 2019 18:57
    sábado, 17 de agosto de 2019 17:32
  • SI NO ME EXPLIQUE MUY BIEN AL PRINCIPIO ,USO SQLSERVER 2014 
    sábado, 17 de agosto de 2019 18:08
  • SI NO ME EXPLIQUE MUY BIEN AL PRINCIPIO ,USO SQLSERVER 2014 

    Olvidé que ya había informado que la versión de SQL Server es 2014. Lo siento.

    ---

    Además del código # 2, otra solución es:

    -- código #3

    -- Ingrese el mes y el año para la emisión del informe
    declare @Mes int, @Ano int;
    set @Mes= 8;
    set @Ano= 2019;

    --
    declare @DataI date, @DataF date, @DenoMes varchar(20);
    set @DataI= convert (date, '1/' + cast(@Mes as varchar(2)) + '/' + cast (@Ano as char(4)), 103);
    set @DataF= dateadd (day, -1, dateadd (month, +1, @DataI));
    set language Español;
    set @DenoMes= upper (datename (month, @DataI));
    --
    with
    Saldo_Diario as ( SELECT FECHA, PRODUCTO, MOVIMIENTO, --CANTIDAD, coalesce (sum (case when MOVIMIENTO = 'ENTRADA' then CANTIDAD else -CANTIDAD end) over (partition by PRODUCTO order by FECHA, MOVIMIENTO ROWS BETWEEN UNBOUNDED PRECEDING and 1 PRECEDING), 0) as SALDO_INICIAL, case when MOVIMIENTO = 'ENTRADA' then CANTIDAD else 0 end as ENTRADA, case when MOVIMIENTO = 'SALIDA' then CANTIDAD else 0 end as SALIDA, sum (case when MOVIMIENTO = 'ENTRADA' then CANTIDAD else -CANTIDAD end) over (partition by PRODUCTO order by FECHA, MOVIMIENTO ROWS BETWEEN UNBOUNDED PRECEDING and CURRENT ROW) as SALDO_FINAL from KARDEX where FECHA <= @DataF ), Lectura as ( SELECT *, prim= row_number() over (partition by PRODUCTO order by FECHA), ult= row_number() over (partition by PRODUCTO order by FECHA desc) from Saldo_Diario where FECHA between @DataI and @DataF ) SELECT @DenoMes as MES, PRODUCTO, max (case when prim = 1 then SALDO_INICIAL end) as SALDO_INICIAL, sum (ENTRADA) as ENTRADAS, sum (SALIDA) as SALIDAS, max (case when ult = 1 then SALDO_FINAL end) as SALDO_FINAL from Lectura group by PRODUCTO;
     

    Si esta respuesta te ayudó a resolver tu problema, recuerda marcarla.


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz sábado, 17 de agosto de 2019 19:33
    sábado, 17 de agosto de 2019 18:56
  • HOLA EL CÓDIGO NUMERO 2  FUNCIONA BIEN CUANDO HAY REGISTROS ÚNICOS DE SALIDA POR DÍA PERO  SI HAY DOS SALIDAS DEL MISMO PRODUCTO EN EL MISMO DIA NO SUMA LAS SALIDAS NI LAS RESTA AL SALD

    martes, 20 de agosto de 2019 14:47
  • HOLA EL CÓDIGO NUMERO 2  FUNCIONA BIEN CUANDO HAY REGISTROS ÚNICOS DE SALIDA POR DÍA PERO  SI HAY DOS SALIDAS DEL MISMO PRODUCTO EN EL MISMO DIA NO SUMA LAS SALIDAS NI LAS RESTA AL SALD

    Antonio, durante el fin de semana algo sucedió en el foro, donde desaparecieron algunas respuestas. ¿Podría transcribir a esta conversación qué es el código #2, así como una muestra de datos confiable para probar?

    ¡Incluso los cambios que yo hice en el código #1 también se han ido!    :(


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz martes, 20 de agosto de 2019 16:49
    martes, 20 de agosto de 2019 16:45
  • HOLA ES VERDAD ALGUNAS RESPUESTAS DESAPARECIERON EL CÓDIGO ES ESTA 

    ESTA ES LA TABLA CON LOS DATOS

    CREATE TABLE kardex
    (FECHA      DATE, 
     DOCUMENTO  VARCHAR(4), 
     PRODUCTO   VARCHAR(15), 
     CANTIDAD   DECIMAL(18,2), 
     MOVIMIENTO VARCHAR(15)
    );
    GO

    INSERT INTO kardex
    (FECHA,
    DOCUMENTO,
    PRODUCTO,
    CANTIDAD,
    MOVIMIENTO)
    VALUES
    ('20190730','0001','CAMISA',15,'ENTRADA'),
    ('20190731','0002','CAMISA',2,'SALIDA'),
    ('20190801','0003','CAMISA',3,'ENTRADA'),
    ('20190801','0004','CAMISA',1,'SALIDA'),
    ('20190801','0005','CAMISA',1,'SALIDA'),
    ('20190801','0006','CAMISA',1,'SALIDA');
    ('20190802','0007','CAMISA',2,'SALIDA'),
    ('20190803','0008','CAMISA',1,'ENTRADA'),
    ('20190830','0009','CAMISA',2,'SALIDA'),
    ('20190901','0010','PANTALON',4,'ENTRADA'),
    ('20190802','0011','PANTALON',2,'SALIDA'),
    ('20190803','0012','PANTALON',1,'ENTRADA'),
    ('20190830','0013','PANTALON',2,'SALIDA')
    ;
    GO

    martes, 20 de agosto de 2019 18:56
  • ESTE ES EL CODIGO #2

    declare @Mes int, @Ano int;
    set @Mes= 8;
    set @Ano= 2019;

    declare @DataI date, @DataF date, @DenoMes varchar(20);
    set @DataI= convert (date, '1/' + cast(@Mes as varchar(2)) + '/' + cast (@Ano as char(4)), 103);
    set @DataF= dateadd (day, -1, dateadd (month, +1, @DataI));
    set language Español;
    set @DenoMes= datename (month, @DataI);

    with 
    kardex_seq as (
    SELECT *, seq= row_number() over (partition by PRODUCTO order by FECHA, MOVIMIENTO)
      from kardex
    ),
    Saldo_Diario as (
    SELECT FECHA, PRODUCTO, cast (0 as decimal (18,2)) as SALDO_INICIAL, 
           case when MOVIMIENTO = 'ENTRADA' then CANTIDAD else 0 end as ENTRADA,
           case when MOVIMIENTO = 'SALIDA' then CANTIDAD else 0 end as SALIDA,
           case when MOVIMIENTO = 'ENTRADA' 
                           then CANTIDAD 
                      else -CANTIDAD end as SALDO_FINAL, seq
      from kardex_seq 
      where seq = 1
    union all
    SELECT KS.FECHA, KS.PRODUCTO, SD.SALDO_FINAL,
           case when KS.MOVIMIENTO = 'ENTRADA' then KS.CANTIDAD else 0 end,
           case when KS.MOVIMIENTO = 'SALIDA' then KS.CANTIDAD else 0 end,
           cast (case when KS.MOVIMIENTO = 'ENTRADA' 
                           then (SD.SALDO_FINAL + KS.CANTIDAD) 
                      else (SD.SALDO_FINAL - KS.CANTIDAD) end as decimal(18,2)), KS.seq
      from Saldo_Diario as SD
           inner join kardex_seq as KS on KS.PRODUCTO = SD.PRODUCTO
                                         and KS.seq = (SD.seq +1)
      where KS.FECHA <= @DataF                                     
    ), 
    Lectura as (
    SELECT *, 
           prim= row_number() over (partition by PRODUCTO order by FECHA),
           ult= row_number() over (partition by PRODUCTO order by FECHA desc)
      from Saldo_Diario
      where FECHA between @DataI and @DataF
    )
    SELECT @DenoMes as MES, PRODUCTO,
           max (case when prim = 1 then SALDO_INICIAL end) as SALDO_INICIAL,
           sum (ENTRADA) as ENTRADAS,
           sum (SALIDA) as SALIDAS,
           max (case when ult = 1 then SALDO_FINAL end) as SALDO_FINAL
      from Lectura
      group by PRODUCTO;

    martes, 20 de agosto de 2019 19:03
  • HOLA EL CÓDIGO NUMERO 2  FUNCIONA BIEN CUANDO HAY REGISTROS ÚNICOS DE SALIDA POR DÍA PERO  SI HAY DOS SALIDAS DEL MISMO PRODUCTO EN EL MISMO DIA NO SUMA LAS SALIDAS NI LAS RESTA AL SALD

    Cambié el CTE kardex_seq para tratar la existencia de múltiples movimientos del mismo producto en el mismo día.

    -- código #2 v3
    declare @Mes int, @Ano int;
    set @Mes= 8;
    set @Ano= 2019;
    
    declare @DataI date, @DataF date, @DenoMes varchar(20);
    set @DataI= convert (date, '1/' + cast(@Mes as varchar(2)) + '/' + cast (@Ano as char(4)), 103);
    set @DataF= dateadd (day, -1, dateadd (month, +1, @DataI));
    set language Español;
    set @DenoMes= upper (datename (month, @DataI));
    
    with 
    kardex_seq as (
    SELECT PRODUCTO, FECHA, MOVIMIENTO, 
           cast (sum (CANTIDAD) as decimal(18,2)) as CANTIDAD,
    seq= row_number() over (partition by PRODUCTO order by FECHA, MOVIMIENTO) from kardex
    where FECHA <= @DataF group by PRODUCTO, FECHA, MOVIMIENTO ), Saldo_Diario as ( SELECT FECHA, PRODUCTO, cast (0 as decimal (18,2)) as SALDO_INICIAL, case when MOVIMIENTO = 'ENTRADA' then CANTIDAD else 0 end as ENTRADA, case when MOVIMIENTO = 'SALIDA' then CANTIDAD else 0 end as SALIDA, case when MOVIMIENTO = 'ENTRADA' then CANTIDAD else -CANTIDAD end as SALDO_FINAL, seq from kardex_seq where seq = 1 union all SELECT KS.FECHA, KS.PRODUCTO, SD.SALDO_FINAL, case when KS.MOVIMIENTO = 'ENTRADA' then KS.CANTIDAD else 0 end, case when KS.MOVIMIENTO = 'SALIDA' then KS.CANTIDAD else 0 end, cast (case when KS.MOVIMIENTO = 'ENTRADA' then (SD.SALDO_FINAL + KS.CANTIDAD) else (SD.SALDO_FINAL - KS.CANTIDAD) end as decimal(18,2)), KS.seq from Saldo_Diario as SD inner join kardex_seq as KS on KS.PRODUCTO = SD.PRODUCTO and KS.seq = (SD.seq +1) ), Lectura as ( SELECT *, prim= row_number() over (partition by PRODUCTO order by FECHA), ult= row_number() over (partition by PRODUCTO order by FECHA desc) from Saldo_Diario where FECHA between @DataI and @DataF ) SELECT @DenoMes as MES, PRODUCTO, max (case when prim = 1 then SALDO_INICIAL end) as SALDO_INICIAL, sum (ENTRADA) as ENTRADAS, sum (SALIDA) as SALIDAS, max (case when ult = 1 then SALDO_FINAL end) as SALDO_FINAL from Lectura group by PRODUCTO;
     


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Marcado como respuesta Antonio Figueroa sábado, 24 de agosto de 2019 16:23
    • Editado José Diz sábado, 24 de agosto de 2019 19:29
    miércoles, 21 de agosto de 2019 14:29
  • HOLA GRACIAS POR SU AYUDA ,ES JUSTO LO QUE NECESITABA 
    sábado, 24 de agosto de 2019 16:27