none
Como poblar la Tabla Producto-Almacén y las cantidades por almacén RRS feed

  • Pregunta

  • Hola a todos estoy en un proyecto de un Punto de Venta, y tengo una tabla ProductStorage que surge de la relación muchos muchos de Product y Storage es solo para saber que cantidad de producto tengo en cada al almacén...He estado tratado de hacer algún trigger pero no he tenido éxito con la solución, veo que AdventureWork hay una tabla muy parecida se llama ProductInventory me no encuentro la forma en que ellos poblaron la Tabla. Les agradecería cualquier Ayuda <o:p></o:p>

    Gracias<o:p></o:p>

    martes, 19 de septiembre de 2017 23:28

Todas las respuestas

  • No entiendo que quieres hacer realmente, el poblado inicial normalmente deshabilita todos los triggers porque el sistema no esta en linea en la mayoría de los casos, de hecho he visto muchos intentos normalmente fallidos de programadores que intentan crear la solución y luego insertar datos desde la solución y fallaron horriblemente por las tablas mismas o como hacen sus constraints.
    jueves, 21 de septiembre de 2017 22:41
  • ¡Buenos días

    ¿Para saber "existencias actuales" por qué usar disparadores/triggers?

    Te dejo un ejemplo.

    Saludos,

    PCID.

    ---------------------------------------------------

    if exists (select * from sys.objects where name = 'v_resumenexistenciaproductoxalmacen') drop view v_resumenexistenciaproductoxalmacen;
    if exists (select * from sys.objects where name = 'MOVIMIENTOPRODUCTO') drop table MOVIMIENTOPRODUCTO;
    if exists (select * from sys.objects where name = 'ALMACEN') drop table ALMACEN;
    if exists (select * from sys.objects where name = 'PRODUCTO') drop table PRODUCTO;
    go

    create table PRODUCTO (ID_PRODUCTO int identity (1, 1) not null, DESCRIPCION varchar(100), primary key (ID_PRODUCTO));
    create table ALMACEN (ID_ALMACEN int identity (1, 1) not null, DESCRIPCION varchar(100), primary key (ID_ALMACEN));
    go

    create table MOVIMIENTOPRODUCTO 
    (
    ID_MOVIMIENTOPRODUCTO int identity (1, 1), 
    ID_PRODUCTO int not null, 
    ID_ALMACEN int not null, 
    FECHA datetime not null,
    CANTIDAD int not null,
    ES_ENTRADA bit default 1 not null, 
    primary key (ID_MOVIMIENTOPRODUCTO),
    constraint fk_MOVPROD_PRODUCTO foreign key (ID_PRODUCTO) references PRODUCTO (ID_PRODUCTO),
    constraint fk_MOVPROD_ALMACEN foreign key (ID_ALMACEN) references ALMACEN (ID_ALMACEN)
    );
    go

    set nocount on;
    insert into PRODUCTO (DESCRIPCION) values ('Manzanas'), ('Peras'), ('Melocotones'), ('Fresas'), ('Naranjas');
    insert into ALMACEN (DESCRIPCION) values ('ALMACEN I'), ('ALMACEN II'), ('ALMACEN III'), ('ALMACEN IV');
    insert into MOVIMIENTOPRODUCTO (ID_PRODUCTO, ID_ALMACEN, FECHA, CANTIDAD, ES_ENTRADA)
    select a.ID_PRODUCTO, b.ID_ALMACEN, '20170101' as FECHA, 1000 as CANTIDAD, 1 as ES_ENTRADA
    from PRODUCTO a, ALMACEN b;
    set nocount off;
    go



    declare @n int = 100,  @cantidad int = 0, @productos int, @i int = 1;
    set nocount on;

    create table #MOVIMIENTOPRODUCTO (ID_PRODUCTO int not null, ID_ALMACEN int not null, FECHA datetime not null, CANTIDAD int not null, ES_ENTRADA bit default 1 not null);

    set @productos = (select COUNT(*) from PRODUCTO);
    while (@i < @n)
    begin
    insert into #MOVIMIENTOPRODUCTO 
    select a.ID_PRODUCTO, b.ID_ALMACEN, 
    cast(DATEADD(day, -1 * (ABS(CHECKSUM(NewId())) % 21), GETDATE()) as date) as FECHA,
    ABS(CHECKSUM(NewId())) % 21 as CANTIDAD, 
    case when (ABS(CHECKSUM(NewId())) % 21) % 3 = 0 then 1 else 0 end as ES_ENTRADA
    from PRODUCTO a, ALMACEN b
    where a.ID_PRODUCTO <= round(((@productos - 1 -1) * RAND() + 1), 0);
    set @i = @i + 1;
    end;

    insert into MOVIMIENTOPRODUCTO (ID_PRODUCTO, ID_ALMACEN, FECHA, CANTIDAD, ES_ENTRADA)
    select * from #MOVIMIENTOPRODUCTO order by FECHA;

    set nocount off;
    drop table #MOVIMIENTOPRODUCTO;
    go

    create view v_resumenexistenciaproductoxalmacen as
    select a.ID_ALMACEN, a.ID_PRODUCTO, b.DESCRIPCION as ALMACEN, c.DESCRIPCION as PRODUCTO,
    sum(case when a.ES_ENTRADA = 1 then a.CANTIDAD else 0 end) as ENTRADAS,
    sum(case when a.ES_ENTRADA = 0 then a.CANTIDAD else 0 end) as SALIDAS,
    sum(case when a.ES_ENTRADA = 1 then 1 else -1 end * a.CANTIDAD) as EXISTENCIA
    from MOVIMIENTOPRODUCTO a
    inner join ALMACEN b on b.ID_ALMACEN = a.ID_ALMACEN
    inner join PRODUCTO c on c.ID_PRODUCTO = a.ID_PRODUCTO
    group by a.ID_ALMACEN, a.ID_PRODUCTO, b.DESCRIPCION, c.DESCRIPCION;
    go

    select * from v_resumenexistenciaproductoxalmacen order by ID_ALMACEN, ALMACEN;;


    viernes, 22 de septiembre de 2017 14:23