Procediment emmagatzemat que cridat des del SP_PostTransactionNotice permet modificar el camp d’usuari U_INTRX_SII_Concepto creat als documents i als assentaments, i que posteriorment, amb els EFM correctes, permet enviar el SII amb el concepte d’operació personalitzat

CREATE PROC [dbo].[SII_SP_PostTransactionNotice]
@object_type nvarchar(30),			
@transaction_type nchar(1),
@num_of_cols_in_key int,
@list_of_key_cols_tab_del nvarchar(255),
@list_of_cols_val_tab_del nvarchar(255),
@error int output,
@error_message nvarchar (200) output
AS
BEGIN

	declare @concepteSII nvarchar(60) = 'Indefinit'
	declare @concepte nvarchar(60) = ''
	declare @sqlCrearCursor nvarchar(4000)
	declare @sqlUpdate nvarchar(4000)

	-- Al crear un assentament que no està relacionat amb cap document, posar el concepte del SII segons les comptes que hi intervenen
	-- Autor: David Martí
	-- Data: 27/8/2019
	if @object_type='30' and (@transaction_type='A' or @transaction_type='U')
	begin
		  
	  declare @tipus nvarchar(20)
	  select @tipus=TransType,@concepte=COALESCE(U_INTRX_SII_Concepto,'') from OJDT where TransId=@list_of_cols_val_tab_del
	
	  if @tipus='30'
	  begin

		if (@concepte='')
		begin
			set @sqlCrearCursor = 'declare linies cursor for 
			  select C.U_INTRX_SII_Concepto 
			  from JDT1 L 
			  join OACT C on C.AcctCode=L.Account
			  where (L.Account like ''6%'' or L.Account like ''7%'') and (LEN(C.U_INTRX_SII_Concepto)>0) and (L.TransId='+@list_of_cols_val_tab_del+')'
	  
			exec sp_executesql @sqlCrearCursor	

			open linies 
			fetch next from linies into @concepte
			if len(@concepte)>0 set @concepteSII=@concepte
			while @@FETCH_STATUS=0
			begin
			  fetch next from linies into @concepte
			  if len(@concepte)>0 set @concepteSII=@concepte
			end
			close linies
			deallocate linies
      
			set @sqlUpdate = 'update OJDT set U_INTRX_SII_Concepto=''' + @concepteSII + ''' where TransId=' + @list_of_cols_val_tab_del
	  
			exec sp_executesql @sqlUpdate

		end

	  end -- Assentament no pot estar vinculat amb un document

	end

	-- Al crear documents de compres o vendes, omplir el concepte del SII segons:
	-- 1. Si el document es un document d'articles, amb el concepte genéric
	-- 2. Si es un document de serveis, revisar la comptes i agafar el concepte del pla de comptes
	-- Autor: David Marti
	-- Data: 27/8/2019
	if @object_type in ('13','14','18','19') and (@transaction_type='A' or @transaction_type='U')
	begin
	  
	  declare @taula0 nvarchar(20)
	  declare @taula1 nvarchar(20)
	  if @object_type='13' 
	  begin
	    set @concepteSII='Venta de mercancias'
	    set @taula0='OINV'
	    set @taula1='INV1'
	  end
	  if @object_type='14' 
	  begin
	    set @concepteSII='Abono de mercancias'
	    set @taula0='ORIN'
	    set @taula1='RIN1'
	  end
	  if @object_type='18'
	  begin
	    set @concepteSII='Compra de mercancias'
	    set @taula0='OPCH'
	    set @taula1='PCH1'
	  end
	  if @object_type='19' 
	  begin
	    set @concepteSII='Abono de compra de mercancias'
	    set @taula0='ORPC'
	    set @taula1='RPC1'
	  end

	  if (@transaction_type='U')
	  begin
	    declare @sqlConsultaConcepte nvarchar(4000)= 'select @concepteOUT=COALESCE(U_INTRX_SII_Concepto,'''') from '+@taula0+' where DocEntry='+@list_of_cols_val_tab_del
		declare @sqlParams nvarchar(100)
		set @sqlParams= N'@concepteOUT nvarchar(60) OUTPUT'
		exec sp_executeSql @sqlConsultaConcepte, @sqlParams, @concepteOUT=@concepte OUTPUT
	  end

	  if (@concepte='')
	  begin

		  -- Cercar el concepte segons les comptes que intervenen al document
	  
		  set @sqlCrearCursor= 'declare linies cursor for 
		  select C.U_INTRX_SII_Concepto 
		  from '+@taula1+' L 
		  join OACT C on C.AcctCode=L.AcctCode 
		  where (L.AcctCode like ''6%'' or L.AcctCode like ''7%'') and (LEN(C.U_INTRX_SII_Concepto)>0) and (L.DocEntry='+@list_of_cols_val_tab_del+')'
	  
		  exec sp_executesql @sqlCrearCursor

		  open linies 
		  fetch next from linies into @concepte
		  if len(@concepte)>0 set @concepteSII=@concepte
		  while @@FETCH_STATUS=0
		  begin
			fetch next from linies into @concepte
			if len(@concepte)>0 set @concepteSII=@concepte
		  end
		  close linies
		  deallocate linies
      
		  set @sqlUpdate = 'update ' + @taula0 + ' set U_INTRX_SII_Concepto=''' + @concepteSII + ''' where DocEntry=' + @list_of_cols_val_tab_del
	  
		  exec sp_executesql @sqlUpdate

	  end
	end
END
-- Proceso del documentos SII (Concepto)
-- Autor: David Marti
-- Fecha: 28/8/2019
EXEC SII_SP_PostTransactionNotice @object_type,@transaction_type,@num_of_cols_in_key,@list_of_key_cols_tab_del,@list_of_cols_val_tab_del,@error output, @error_message output