on 06-06-2014 5:47 PM
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
Boa tarde Thiago,
Um tiro no escuro: Talvez você pudesse fazer a comparação com a tabela de LOG´s do SAP.
T+
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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------------------------------
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
101 | |
14 | |
10 | |
5 | |
4 | |
3 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.