locked
Relatorio SQL SERVER - Help RRS feed

  • Pergunta

  • Boa Noite,

      Gente to iniciando na area de banco ..

      Preciso fazer um relatorio, que apresente, Quantidade do Produto, Nome do Produto , Data Entrada\Saida ...

        Tenho as seguintes tabelas: Produto, Entrada e Saida

    Na Tabela Produto, tenho as colunas ... Nome Produto, tipo,Saldo Minimo,Quantidade

    Na Tabela Entrada, são as informações cadastrada no recebimento do produto, como Nome, Quantidade recebida, data de recebimento e tipo do produto

    Na tabela saida, sera movimentada, toda vez que o cliente solicitar o produto .. 

      Terei de inserir Nome do Produto, a Quantidade que esta sendo solicitada.

    O que eu preciso, é que toda vez que eu der baixa do produto na tabela Saida, automaticamente diminua na tabela Produto.

    Favor ajudem - me.

    terça-feira, 24 de setembro de 2013 00:52

Respostas

  • Consegui resolver com a trigger, como suspeitei

    Usei essas instruções 

    http://gustavomaiaaguiar.wordpress.com/2010/01/30/piores-praticas-%E2%80%93-elaborar-triggers-preparadas-para-linhas-e-nao-para-conjuntos/

    Mais uma vez, valeu pela atenção ..

    • Marcado como Resposta Giovani Cr segunda-feira, 30 de setembro de 2013 19:33
    sexta-feira, 27 de setembro de 2013 17:55
  • SS_DBAJr,

    Veja estes exemplos de Trigger:

    Create Table NovosProdutos
     (Codigo Int Identity(1,1),
       Descricao VarChar(20),
       Saldo Int)
    Go
    
    Insert Into NovosProdutos Values('Produto -'+Convert(VarChar(3),@@Identity),0)
    Go 100
    
    Create Table Movimentacao
     (Codigo Int Identity(1,1),
       CodProduto Int,
       TipoMovimentacao Char(1),
       Valor Int)
    Go
    
    Create Trigger T_MovimentacaoSaldo
    On Movimentacao
    After Insert, Update
    As
     Declare @TipoMovimentacao Char(1)
    
     Select @TipoMovimentacao=TipoMovimentacao from Inserted
    
     If @TipoMovimentacao = 'E'
      Begin
       Update NovosProdutos
       Set Saldo = Saldo + I.Valor
       from NovosProdutos NP Inner Join Inserted I
                                          On NP.Codigo = I.CodProduto  
      End
    
      If @TipoMovimentacao = 'S'
      Begin
       Update NovosProdutos
       Set Saldo = Saldo - I.Valor
       from NovosProdutos NP Inner Join Inserted I
                                          On NP.Codigo = I.CodProduto
      End
    
    --Fazendo lançamentos de entrada
    Insert Into Movimentacao Values(2,'E',10)
    Insert Into Movimentacao Values(2,'E',15)
    Insert Into Movimentacao Values(2,'E',5)
    Insert Into Movimentacao Values(2,'E',22)
    Insert Into Movimentacao Values(2,'E',10)
    
    --Fazendo lançamentos de saída
    Insert Into Movimentacao Values(2,'S',8)
    Insert Into Movimentacao Values(2,'S',5)
    Insert Into Movimentacao Values(2,'S',3)
    Insert Into Movimentacao Values(2,'S',2)
    Insert Into Movimentacao Values(2,'S',1)
    
    Insert Into Movimentacao Values(8,'E',10)
    Insert Into Movimentacao Values(9,'E',15)
    Insert Into Movimentacao Values(1,'E',5)
    Insert Into Movimentacao Values(3,'E',22)
    Insert Into Movimentacao Values(22,'E',10)
    
    --Fazendo lançamentos de saída
    Insert Into Movimentacao Values(8,'S',8)
    Insert Into Movimentacao Values(9,'S',5)
    Insert Into Movimentacao Values(1,'S',3)
    Insert Into Movimentacao Values(3,'S',2)
    Insert Into Movimentacao Values(22,'S',1)
    
    Select * from NovosProdutos

    --Criando a Table de Novos Produtos--
    Create Table NovosProdutos
     (Codigo Int Identity(1,1),
       Descricao VarChar(10))
    
    --Criando a Table de Histórico Novos Produtos--
    Create Table HistoricoNovosProdutos
     (Codigo Int,
       Descricao VarChar(10))
    Go
    
    --Inserindo valores --
    Insert Into Novosprodutos Values('Arroz')
    Insert Into Novosprodutos Values('Arroz1')
    Insert Into Novosprodutos Values('Arroz2')
    Insert Into Novosprodutos Values('Arroz3')
    Go
    
    --Criando a Trigger para controle de histórico--
    Create TRIGGER T_Historico
    ON NovosProdutos
    for update
    AS 
     IF (Select Descricao from Inserted) <> (Select Descricao from Deleted)
      BEGIN
       INSERT Into HistoricoNovosProdutos (Codigo, Descricao)
            SELECT Codigo, Descricao FROM INSERTED
      END
    Go
    
    --Fazendo os teste --
    
    
    Update NovosProdutos
    Set Descricao='Arroz 4'
    Where Codigo = 1
    Go
    
    Update NovosProdutos
    Set Descricao='Arroz1'
    Where Codigo = 2
    Go

    CREATE  Trigger T_Atualizar_Saldos
    On EstFisic
    After Insert, Update
    As
    
    Set NoCount Off
    
    Declare @TipoMov Char(1),
               @Codigo Char(10),
               @Quantidade Float(8),
               @Data_Mov DateTime
    
    Select @TipoMov=Status, @Quantidade=Quantidade, @Codigo=Codigo, @Data_Mov=Data From Inserted
    
    Begin
    
      If @TipoMov = 'E'
       Begin  
        Update Produtos 
        Set Saldo= Saldo+@Quantidade, Data=@Data_Mov
        Where Codigo = @Codigo 
       End
      
      If @TipoMov='S'
       Begin  
        Update Produtos 
        Set Saldo= Saldo-@Quantidade, Data=@Data_Mov
        Where Codigo = @Codigo 
       End
    End


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr segunda-feira, 30 de setembro de 2013 19:33
    sexta-feira, 27 de setembro de 2013 18:03

Todas as Respostas

  • Você quer fazer tudo isso em SQL ? 100 % ? Vai usar uma linguagem de programação ?

    Achei meio estranho fazer isso apenas em SQL se é que eu entendi bem, até porque você sempre dará baixa em apenas um produto ? 

    Envia pra gente até onde você já fez pra darmos uma olhada, mas isso tudo em SQL... sei não viu '-'

    abraço

    • Sugerido como Resposta - Sidney Carvalho quarta-feira, 25 de setembro de 2013 05:33
    terça-feira, 24 de setembro de 2013 04:42
  • Oi, Sidney

    desculpa a demora.

    Consegui parar pra ver isso agora. Então ainda nem comecei nada ..

    Vou explicar melhor .. os produtos é tudo que temos em estoque, computadores, tonner, impressoras, etc ..
    Por exemplo o Tonner ..
    Toda vez que for solicitado um, farei a inserção na Tabela Saida, e preciso que automaticamente diminua  na tabela Produto, onde tenho o campo Quantidade do Produto.

    Pensei em usar uma trigger, sera que serve, como eu disse estou iniciando, então já sabe né..

    Desde ja agradeço a atenção
    sexta-feira, 27 de setembro de 2013 14:49
  • Consegui resolver com a trigger, como suspeitei

    Usei essas instruções 

    http://gustavomaiaaguiar.wordpress.com/2010/01/30/piores-praticas-%E2%80%93-elaborar-triggers-preparadas-para-linhas-e-nao-para-conjuntos/

    Mais uma vez, valeu pela atenção ..

    • Marcado como Resposta Giovani Cr segunda-feira, 30 de setembro de 2013 19:33
    sexta-feira, 27 de setembro de 2013 17:55
  • SS_DBAJr,

    Veja estes exemplos de Trigger:

    Create Table NovosProdutos
     (Codigo Int Identity(1,1),
       Descricao VarChar(20),
       Saldo Int)
    Go
    
    Insert Into NovosProdutos Values('Produto -'+Convert(VarChar(3),@@Identity),0)
    Go 100
    
    Create Table Movimentacao
     (Codigo Int Identity(1,1),
       CodProduto Int,
       TipoMovimentacao Char(1),
       Valor Int)
    Go
    
    Create Trigger T_MovimentacaoSaldo
    On Movimentacao
    After Insert, Update
    As
     Declare @TipoMovimentacao Char(1)
    
     Select @TipoMovimentacao=TipoMovimentacao from Inserted
    
     If @TipoMovimentacao = 'E'
      Begin
       Update NovosProdutos
       Set Saldo = Saldo + I.Valor
       from NovosProdutos NP Inner Join Inserted I
                                          On NP.Codigo = I.CodProduto  
      End
    
      If @TipoMovimentacao = 'S'
      Begin
       Update NovosProdutos
       Set Saldo = Saldo - I.Valor
       from NovosProdutos NP Inner Join Inserted I
                                          On NP.Codigo = I.CodProduto
      End
    
    --Fazendo lançamentos de entrada
    Insert Into Movimentacao Values(2,'E',10)
    Insert Into Movimentacao Values(2,'E',15)
    Insert Into Movimentacao Values(2,'E',5)
    Insert Into Movimentacao Values(2,'E',22)
    Insert Into Movimentacao Values(2,'E',10)
    
    --Fazendo lançamentos de saída
    Insert Into Movimentacao Values(2,'S',8)
    Insert Into Movimentacao Values(2,'S',5)
    Insert Into Movimentacao Values(2,'S',3)
    Insert Into Movimentacao Values(2,'S',2)
    Insert Into Movimentacao Values(2,'S',1)
    
    Insert Into Movimentacao Values(8,'E',10)
    Insert Into Movimentacao Values(9,'E',15)
    Insert Into Movimentacao Values(1,'E',5)
    Insert Into Movimentacao Values(3,'E',22)
    Insert Into Movimentacao Values(22,'E',10)
    
    --Fazendo lançamentos de saída
    Insert Into Movimentacao Values(8,'S',8)
    Insert Into Movimentacao Values(9,'S',5)
    Insert Into Movimentacao Values(1,'S',3)
    Insert Into Movimentacao Values(3,'S',2)
    Insert Into Movimentacao Values(22,'S',1)
    
    Select * from NovosProdutos

    --Criando a Table de Novos Produtos--
    Create Table NovosProdutos
     (Codigo Int Identity(1,1),
       Descricao VarChar(10))
    
    --Criando a Table de Histórico Novos Produtos--
    Create Table HistoricoNovosProdutos
     (Codigo Int,
       Descricao VarChar(10))
    Go
    
    --Inserindo valores --
    Insert Into Novosprodutos Values('Arroz')
    Insert Into Novosprodutos Values('Arroz1')
    Insert Into Novosprodutos Values('Arroz2')
    Insert Into Novosprodutos Values('Arroz3')
    Go
    
    --Criando a Trigger para controle de histórico--
    Create TRIGGER T_Historico
    ON NovosProdutos
    for update
    AS 
     IF (Select Descricao from Inserted) <> (Select Descricao from Deleted)
      BEGIN
       INSERT Into HistoricoNovosProdutos (Codigo, Descricao)
            SELECT Codigo, Descricao FROM INSERTED
      END
    Go
    
    --Fazendo os teste --
    
    
    Update NovosProdutos
    Set Descricao='Arroz 4'
    Where Codigo = 1
    Go
    
    Update NovosProdutos
    Set Descricao='Arroz1'
    Where Codigo = 2
    Go

    CREATE  Trigger T_Atualizar_Saldos
    On EstFisic
    After Insert, Update
    As
    
    Set NoCount Off
    
    Declare @TipoMov Char(1),
               @Codigo Char(10),
               @Quantidade Float(8),
               @Data_Mov DateTime
    
    Select @TipoMov=Status, @Quantidade=Quantidade, @Codigo=Codigo, @Data_Mov=Data From Inserted
    
    Begin
    
      If @TipoMov = 'E'
       Begin  
        Update Produtos 
        Set Saldo= Saldo+@Quantidade, Data=@Data_Mov
        Where Codigo = @Codigo 
       End
      
      If @TipoMov='S'
       Begin  
        Update Produtos 
        Set Saldo= Saldo-@Quantidade, Data=@Data_Mov
        Where Codigo = @Codigo 
       End
    End


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr segunda-feira, 30 de setembro de 2013 19:33
    sexta-feira, 27 de setembro de 2013 18:03
  • Obrigada Pedro,

    Vou testar esse também. só pra ver o que sair, porque consegui o que queria.

    Valeu mesmo.

    Vim pedir outra ajuda de voces ...

    Com essa mesma tabela

    Preciso gerar um relatório mensal, com as seguintes informações,

    o Setor que solicitou, a quantidade de tonner Preto, a quantidade de colorido e o total.

    Que ficaria assim

    Setor -  Preto -  Colorido -  Total

    TI              2           1            3

    Essa é a query que estou usando, só conseguir agrupar o modelo.

    No caso temos 4 tipos de coloridos, e eles começam com 'LEXMARK C'

      Select
          sa.SETOR  Setor,
     Case When pr.NOME_PRODUTO LIKE '%LEXMARK C%'
     Then 'Colorido' 
     Else 'Preto' 
     End as 'Modelo',
     SUM(SALDO)  Quantidade
      From tb_PRODUTO pr 
          inner join tb_SAIDA sa
      On pr.ID_PRODUTO = sa.ID_PRODUTO
      Group By sa.SETOR,pr.NOME_PRODUTO


    quarta-feira, 2 de outubro de 2013 11:44
  • Voltei gente.

    Surgiu um probleminha,

    fiz a trigger de atualização estava tudo certo, porque no primeiro momento as informações estavam zeradas,já que iamos começar a contar  a partir desse mês. Eis que fiz uma atualização,  como preciso, saber a data que o produto saiu do estoque, não posso apenas alterar, tenho de inserir novamente, ai ,é que esta o problema, toda vez que é inserido, automaticamente a informação é duplicada.

    Preciso que apresente apenas a somatória, sem a duplicidade, no relatório.

    Help 

    sexta-feira, 18 de outubro de 2013 18:24