cancel
Showing results for 
Search instead for 
Did you mean: 

Como pegar campos da tela pelo SBO Transaction

Former Member
0 Kudos

Ola.

Estou com um problema. Preciso pegar o codigo do cliente, a serie utilizada(Externa, NFe, Manual...) e a sequencia.

Para verificar se para aquele parceiro de negocio ja não tem uma nota fiscal de entrada inserida com o mesmo numero na mesma serie.

Por exemplo evitar que fique duas notas do cliente 'X' com o numero '5151'.

Tentei um monte de coisas e o ultimo codigo que cheguei foi esse. Se alguem souber a resolução agradeço.



	if  @object_type = '18' and @transaction_type = 'A'--TIPO DE OBJETE NFE

			DECLARE @Sequencia nvarchar(255)
			DECLARE @Parceiro nvarchar(255)
			DECLARE @Serie nvarchar(255)
			
			--Pega a Sequencia de numeração
			SET @Sequencia = (SELECT T1.SeqCode FROM OPCH T1 WHERE T1.DocEntry = @list_of_cols_val_tab_del)
			--Pega o parceiro de negocio
			SET @Parceiro = (SELECT T1.CardCode FROM OPCH T1 WHERE T1.DocEntry = @list_of_cols_val_tab_del)
			--Pega a Serie da nota de numeração
			SET @Serie = (SELECT T1.SeriesStr FROM OPCH T1 WHERE T1.DocEntry = @list_of_cols_val_tab_del)
			
			IF (	
                                       (SELECT count(T0.Serial)
						FROM OPCH T0 
						WHERE 
						T0.[SeqCode] = '-1'
						AND (CAST (T0.[CardCode] AS nvarchar(255))) = @Parceiro
						AND (CAST (T0.[SeriesStr] AS nvarchar(255))) = @Serie
						AND T0.DocEntry = @list_of_cols_val_tab_del
					) > 0
				)
		
			Begin
				SET @error			= @erro
				SET @error_message	= 'Nº de Nota Fiscal ja existente para este fornecedor'
			End


Accepted Solutions (0)

Answers (6)

Answers (6)

Former Member
0 Kudos

Foi facil depois de imaginar como se ja tivesse inserido a nota. Que é como a Transact funciona.

Former Member
0 Kudos

Luiz,

Tenho o costume de fazer assim.


If (@object_type = '18' And (@transaction_type = 'A'))
Begin 
 Select @error = 1, @error_message = 'Nota Fiscal já lançada'  
 from OPCH T0 
 Where Exists (Select 1 From OPCH T2 Where T2.DocEntry <> T0.DocEntry and T2.Serial = T0.Serial And T2.SeriesStr = T0.SeriesStr and T2.SeqCode = T0.SeqCode and T0.CardCode = T2.CardCode )
 And DocEntry = @list_of_cols_val_tab_del
     
End  

Pode acontecer de a nota que já existe ter sido cancelada, você pode verificar fazendo isso.

 
If (@object_type = '18' And (@transaction_type = 'A'))
Begin 

 
 Select @error = 1, @error_message = 'Nota Fiscal já lançada'  
 from OPCH T0 
 Where Exists (Select 1 From OPCH T2 Where T2.DocEntry <> T0.DocEntry and T2.Serial = T0.Serial And T2.SeriesStr = T0.SeriesStr and T2.SeqCode = T0.SeqCode and T0.CardCode = T2.CardCode 
And Not Exists (SELECT 1 as STATUS FROM RIN1 dv INNER JOIN ORIN d ON (d.DocEntry = dv.DocEntry) WHERE  dv.BaseEntry = T2.DocEntry And d.SeqCode = 1) )
 And DocEntry = @list_of_cols_val_tab_del

Não testei o código mais acho que é isso.

End

Edited by: Paulo.Afonso on Aug 26, 2010 10:54 PM

Former Member
0 Kudos

Opa amigo..

Comentei todos os codigos que tinha.

Deixei apenas o teu.

Continuou o erro.

Uma coisa interessante foi o fato de eu fazer um teste na atividade e quando inseri a atividade ele deu esta mensagem que estamos tentando colocar na nota fiscal de entrada.

Mais alguma ideia?

Former Member
0 Kudos

Opa, pode ser alguma coisa no cadastro deste PN ...

tenta fazer o select ... Select * from OCRD where CardCode = 'F000005' pra ver se retorna algum erro ou se tem algum campo que tenha este valor 1065 0 gravado ... pode ser que este valor esteja gravado em um campo inteiro.

Outro teste que pode ser feito é com o codigo que te passei mas com outro Parceiro.

Se em todo caso não der certo, acho que só gerando um Trace no banco quando der esse erro para analisar a consulta que está sendo feita.

Att. Leandro Khalil.

Former Member
0 Kudos

Luis, boa tarde,

estou com o mesmo problema que o seu, de buscar se existem outras notas fiscais com o mesmo número do mesmo fornecedor. Tentei utilizar o script acima na Transaction, porém, identifiquei que o select que busca o número da nota fiscal da tela que está aberta que está gerando o erro de conversão na váriavel do script. Tentei de diversas outras formas, mas não obtive resultado.

Você conseguiu resolver esse seu problema para identificar se já existe outro número de nota fiscal no banco de dados?

Obrigado!

Former Member
0 Kudos

Opa.. Bom dia.

Interessante o codigo, tava crente que ia funcionar, mas mesmo assim não rolou esta dando um erro de conversão no SAP que ja tinha dado antes.

Segue imagem do erro no SAP.

http://img96.imageshack.us/img96/3076/erroiu.jpg

Ja aconteceu isso contigo?

Former Member
0 Kudos

Boa tarde,

verificou se tem outro código na transaction influenciando ?

tenta comentar os outros códigos nela e fazer esse teste...

Pode ser também porque tem campos NULL , usa esse codigo abaixo para tratar isso...

Dúvidas me avise..

if @object_type = '18' and @transaction_type = 'A'--TIPO DE OBJETE NFE

DECLARE @Sequencia nvarchar(255)

DECLARE @Parceiro nvarchar(255)

DECLARE @Serie nvarchar(255)

DECLARE @Serial as nvarchar(20)

DECLARE @Count as int

--Pega a Sequencia de numeração

SET @Sequencia = (SELECT IsNull(T1.SeqCode,'') FROM OPCH T1 WHERE T1.DocEntry = @list_of_cols_val_tab_del)

--Print(@Sequencia)

--Pega o parceiro de negocio

SET @Parceiro = (SELECT IsNull(T1.CardCode,'') FROM OPCH T1 WHERE T1.DocEntry = @list_of_cols_val_tab_del)

--Print(@Parceiro)

--Pega a Serie da nota de numeração

SET @Serie = (SELECT IsNull(T1.SeriesStr,'') FROM OPCH T1 WHERE T1.DocEntry = @list_of_cols_val_tab_del)

--Print(@Serie)

--Pega o num. da nota de

SET @Serial = (SELECT IsNull(T1.Serial,'') FROM OPCH T1 WHERE T1.DocEntry = @list_of_cols_val_tab_del)

--Print (@Serial)

Set @Count = 0

Set @Count = IsNull(

(

SELECT count(T0.Serial)

FROM OPCH T0

WHERE IsNull(T0.SeqCode,'') = IsNull(@Sequencia,'')

AND T0.CardCode = @Parceiro

AND IsNull(T0.SeriesStr,'') = IsNull(@Serie,'')

AND T0.Serial = @Serial

),0)

--Print(@Count)

-- Se existir alguma NF faz o procedimento

if (@Count > 0)

Begin

Set @error = 1

SET @error_message = 'Nº de Nota Fiscal ja existente para este fornecedor'

End

Former Member
0 Kudos

Ja tentei do jeito que vc falou e nada.. =/

Former Member
0 Kudos

Boa noite,

segue codigo abaixo, acho que vai resolver...

Mudei a consulta pois já que vc nao quer a mesma NF, tem que verificar o Serial ...

espero ter ajudado, dúvidas me avise, tenho vários códigos na transaction no SAP e não tive problemas...

if @object_type = '18' and @transaction_type = 'A'--TIPO DE OBJETE NFE

DECLARE @Sequencia nvarchar(255)

DECLARE @Parceiro nvarchar(255)

DECLARE @Serie nvarchar(255)

DECLARE @Serial as nvarchar(20)

DECLARE @Count as int

--Pega a Sequencia de numeração

SET @Sequencia = (SELECT T1.SeqCode FROM OPCH T1 WHERE T1.DocEntry = @list_of_cols_val_tab_del)

--Print(@Sequencia)

--Pega o parceiro de negocio

SET @Parceiro = (SELECT T1.CardCode FROM OPCH T1 WHERE T1.DocEntry = @list_of_cols_val_tab_del)

--Print(@Parceiro)

--Pega a Serie da nota de numeração

SET @Serie = (SELECT T1.SeriesStr FROM OPCH T1 WHERE T1.DocEntry = @list_of_cols_val_tab_del)

--Print(@Serie)

--Pega o num. da nota de

SET @Serial = (SELECT T1.Serial FROM OPCH T1 WHERE T1.DocEntry = @list_of_cols_val_tab_del)

--Print (@Serial)

Set @Count = 0

Set @Count = IsNull(

(

SELECT count(T0.Serial)

FROM OPCH T0

WHERE T0.[SeqCode] = @Sequencia

AND T0.[CardCode] = @Parceiro

AND T0.[SeriesStr] = @Serie

AND T0.Serial = @Serial

),0)

--Print(@Count)

-- Se existir alguma NF faz o procedimento

if (@Count > 0)

Begin

Set @error = 1

SET @error_message = 'Nº de Nota Fiscal ja existente para este fornecedor'

End

Former Member
0 Kudos

Eu acho que é da mesma forma que vc pegou o DocEntry:

T0.CardCode = @list_of_cols_val_tab_del

Quando descobrir me avisa.

Abs.