cancel
Showing results for 
Search instead for 
Did you mean: 

Comparar Campos Via Transaction

Former Member
0 Kudos

Olá Amigos,

Eu estou com uma necessidade, porém não estou achando solução. Se alguém tiver informações, por favor informar.

Eu tenho um campo de usuário na ordem de produção, chamado controle de qualidade.

Eu gostaria que ele não fosse modificado para valores diferentes. Se o usuário informou 123, eu gostaria que ele não pudesse mudar para 'ABC'. Eu teria que comparar o valor anterior que está na tabela, com o valor que está sendo inserido pelo usuário.

Alguém tem alguma noção de como pode ser feito isso?

Set @ControleQualidade = (select T0.[U_ART_Controle] from OWOR T0 where T0.[DocEntry] = @list_of_cols_val_tab_del)

IF (Select T0.Userid from OUSR T0 where T0.department<>'1' and T0.department<>'-2' and T0.Userid = @user) = @User and @transaction_type = 'U'
IF (select T0.[U_ART_Controle] from OWOR T0 where T0.[DocEntry] = @list_of_cols_val_tab_del) <> @ControleQualidade
     BEGIN

          SELECT @error = 1001, @error_message = 'Troca de campo inválida.'

     END

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Boa tarde Thiago,

Um tiro no escuro: Talvez você pudesse fazer a comparação com a tabela de LOG´s do SAP.

T+

Former Member
0 Kudos

Obrigado pela informação.

Realmente acabei fazendo por sua ideia, eu passei a comparar com os dados que estavam na tabela AWOR, que é a tabela de logs da ordem de produção. Obrigado.

Former Member
0 Kudos

Buenas,

Manda pra nos os comandos e aproveita e qualifica minha resposta.

T+

Former Member
0 Kudos

Olá, obrigado pelo ajuda.

Abaixo segue o que eu fiz.

O meu objetivo era que somente usuários dos departamentos Geral e Controle pudessem modificar o campo de usuário "Controle de Qualidade".

Além disso, os usuários só podem dar entrada no produto acabado, após o setor de qualidade informar que a OP está APROVADO.

Com as informações abaixo, atendeu a minha necessidade.


IF @object_type IN ('202') AND @transaction_type IN ('A','U')

BEGIN

DECLARE

@CardType nvarchar(max) = (SELECT T0.[DocEntry] FROM OWOR T0 WHERE T0.[DocEntry] = @list_of_cols_val_tab_del),

@LimiteCadastro DECIMAL(18,2),

@LimiteFinanceiro DECIMAL(18,2)

declare @User nvarchar(max)

declare @ControleQualidade nvarchar(10)

declare @ControleAnterior nvarchar(10) --Variável para verificar o campo contrlole anterior do cliente.

     Set @user = (select UserSign from OWOR T0 where T0.[DocEntry] = @list_of_cols_val_tab_del)--Consulta para recuperar o usuário logado

     set @error_message = (select User_Code from ousr where UserId = @user)

  Set @ControleQualidade = (select T0.[U_ART_C_Controle] from OWOR T0 where T0.[DocEntry] = @list_of_cols_val_tab_del)

  

  ---Esta consulta eu estou jogando nesta variável o campo anterior do U_Controle que está na tabela de Log da ordem de produção AWOR

  Set @ControleAnterior = (select T3.U_ART_C_Controle from (select T1.DocEntry as DocEnt1, T1.[Docnum] As Doc1, Max(T1.[LogInstanc]) as Log1 from OWOR T0 INNER JOIN AWOR T1 ON T0.DocEntry = T1.DocEntry

and T0.DocNum = T1.DocNum and T0.Series = T1.Series Group By T1.[Docnum], T1.DocEntry)consulta1 inner join AWOR T3 on T3.DocNum = Doc1 and T3.[LogInstanc] = Log1 and T3.DocEntry = DocEnt1 where T3.[DocEntry] = @list_of_cols_val_tab_del)

  ----Consulta para Usuários que NÃO são do Departamento Controle ( 1 ) Ou Departamento Geral ( - 2 ).

  ----Usuários que NÃO são deste grupo PODEM adicionar Ordem de Produção, mais não pode flagar o campo Controle de Qualidade da Tabela.

  ----Esta regra entra só no ADD da tabela.

  IF (select T0.[U_ART_C_Controle] from OWOR T0 where T0.[DocEntry] = @list_of_cols_val_tab_del) <> ''

  IF (Select T0.Userid from OUSR T0 where T0.department<>'1' and T0.department<>'-2' and T0.Userid = @user) = @User and @transaction_type = 'A'

   --IF (select T0.[U_ART_C_Controle] from OWOR T0 where T0.[DocEntry] = @list_of_cols_val_tab_del) IS NULL

  BEGIN

   SELECT @error = 1001, @error_message = '001 - Você não pode mexer no campo controle de qualidade'

  END

  ----Nesta consulta eu estou verificando se o usuário NÃO é do Departamento Controle ( 1 ) Ou Departamento Geral ( - 2 ).

  ----Caso ele não seja deste departamento ele entrará na consulta onde vai verificar o campo do controle de qualidade

  --e o campo anterior que está no Log, faço isso para que não haja alteração deste usuário.

  IF (select T0.[U_ART_C_Controle] from OWOR T0 where T0.[DocEntry] = @list_of_cols_val_tab_del) IS NOT NULL

  IF (Select T0.Userid from OUSR T0 where T0.department<>'1' and T0.department<>'-2' and T0.Userid = @user) = @User and @transaction_type = 'U'

  IF @ControleAnterior <> @ControleQualidade

  BEGIN

   SELECT @error = 1001, @error_message = '002 - Usuário não permitido para trocar campo Controle de Qualidade.'

  END

  ----Nesta consulta eu estou verificando se o usuário NÃO é do Departamento Controle ( 1 ) Ou Departamento Geral ( - 2 ).

  ----Caso ele não seja deste departamento ele entrará na consulta onde vai verificar o campo do controle de qualidade

  --e o campo anterior que está no Log, faço isso para que não haja alteração deste usuário.

  --Esta é a consulta para a possibilidade de primeira troca do usuário. Pois a primeira troca ainda não terá valores na tabela AWOR.

  IF (select T0.[U_ART_C_Controle] from OWOR T0 where T0.[DocEntry] = @list_of_cols_val_tab_del) IS NOT NULL

  IF (Select T0.Userid from OUSR T0 where T0.department<>'1' and T0.department<>'-2' and T0.Userid = @user) = @User and @transaction_type = 'U'

  IF @ControleAnterior Is Null

  BEGIN

   SELECT @error = 1001, @error_message = '003 - Usuário não permitido para trocar campo Controle de Qualidade.'

  END

END

--------Impedir que o usuário adicione uma entrada de produto acabado, o controle de qualidade não tenha sido aproado.

IF @object_type ='59' and @transaction_type = 'A'

BEGIN

  IF EXISTS(Select T0.ItemCode from IGN1 T0 inner join OWOR T1 on T0.BaseEntry = T1.DocEntry

  WHERE T0.BaseType = '202' and T1.U_ART_C_CONTROLE <> '001'

  AND T0.DocEntry = @list_of_cols_val_tab_del)

  BEGIN

  Select @error = -5005,

  @error_message = 'O Controle de Qualidade não foi aprovado. Não será possível Dar entrada no produto acabado.'

  END

End

---------------FIM DO GRUPO DE CONSULTAS PARA ORDEM DE PRODUÇÃO------------------------------

Answers (1)

Answers (1)

Former Member
0 Kudos

Thiago  seria apenas para verificar Updates Correto? sendo assim a Adição(Add) já foi realizada no banco. Podendo fazer uma comparação dos dados que ele esta querendo modificar com os dados já inseridos na base de dados com um simples NOT IN

Exemplo:

@variavel =  (select count(*) from OWOR T0 where T0.[DocEntry] = @list_of_cols_val_tab_del AND T0. [U_ART_Controle] NOT IN (SELECT R0.[U_ART_Controle] FROM OWOR ) )


 

  IF (@variavel >0)
    
     BEGIN
          SELECT @error = 1001, @error_message = 'Troca de campo inválida.'
     END
    
ou seja se trazer algum valor na @variavel significa que é o campo U_ART_Controle não existe nos dados já inseridos, sinificando assim que o usuario esta tentando modificar.

Só vai funcionar para  Transaçoes UPDATES ( @transaction_type = 'U')

Abraços

Former Member
0 Kudos

Obrigado pelo ajuda.

Acabei fazendo pela tabela AWOR que é a tabela de log. Mais acho que também resolveria pela sua sugestão.

Muito obrigado.

Former Member
0 Kudos

Ok. Sem problemas não esqueça de marcar  a Resposta como Correta ou util.


Abraços