dbo.LN_docs_verificar_carga

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

1
Name Data Type Length Description
@p_doc_id int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE OR ALTER PROCEDURE dbo.LN_docs_verificar_carga 
 -- Add the parameters for the stored procedure here

 @p_doc_id          int
 
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

    -- Insert statements for procedure here
 
 declare @faltantes int = 0

 declare @valor_fecha smalldatetime,
   @valor_texto varchar(max),
   @valor_numerico float,
   @tipo_campo varchar(1),
   @fila tinyint,
   @col tinyint,
   @campo int,
   @columnas tinyint,
   @colindex tinyint
   

 DECLARE Campos CURSOR FOR

 select LN_doc_campos.valor_fecha, LN_doc_campos.valor_numerico, LN_doc_campos.valor_texto,
   LN_campos.tipo_campo
 from LN_doc_campos
 inner join LN_campos ON LN_doc_campos.campo = LN_campos.campo
 inner join LN_docs ON LN_doc_campos.doc_id = LN_docs.doc_id
 inner join LN_tipo_doc_campos ON (LN_docs.tipo_doc = LN_tipo_doc_campos.tipo_doc
          AND LN_doc_campos.seccion = LN_tipo_doc_campos.seccion
          AND LN_doc_campos.campo = LN_tipo_doc_campos.campo)
 where LN_doc_campos.doc_id = @p_doc_id
 and LN_tipo_doc_campos.obligatorio > 0
 and LN_tipo_doc_campos.visible = 1
 and LN_campos.tipo_campo <> 'G'
 and LN_campos.tipo_campo <> 'F'

 OPEN Campos

 FETCH NEXT FROM Campos INTO @valor_fecha, @valor_numerico, @valor_texto, @tipo_campo

 WHILE @@FETCH_STATUS = 0 BEGIN
  SET @faltantes = @faltantes + 
  CASE
   WHEN @tipo_campo = 'T' OR @tipo_campo = 'R' OR @tipo_campo = 'C' OR @tipo_campo = 'S' OR @tipo_campo = 'M'  
    THEN iif(@valor_texto is null or ltrim(rtrim(@valor_texto)) = '', 1, 0)
   WHEN @tipo_campo = 'N' OR @tipo_campo = 'B' THEN iif(@valor_numerico is null, 1, 0)
   WHEN @tipo_campo = 'D' THEN iif(@valor_fecha is null, 1, 0)
  END

  FETCH NEXT FROM Campos INTO @valor_fecha, @valor_numerico, @valor_texto, @tipo_campo
 END

 CLOSE Campos
 DEALLOCATE Campos




 DECLARE Tablas CURSOR FOR

 SELECT LN_campos.campo, LN_campos.columnas 
 FROM LN_campos 
 INNER JOIN LN_doc_campos ON LN_campos.campo = LN_doc_campos.campo
 INNER JOIN LN_docs ON LN_doc_campos.doc_id = LN_docs.doc_id
 INNER JOIN LN_tipo_doc_campos ON (LN_docs.tipo_doc = LN_tipo_doc_campos.tipo_doc
         AND LN_campos.campo = LN_tipo_doc_campos.campo)
 WHERE LN_campos.tipo_campo = 'G'
 and LN_tipo_doc_campos.visible = 1
 and LN_tipo_doc_campos.obligatorio > 0
 and LN_docs.doc_id = @p_doc_id

 OPEN Tablas

 FETCH NEXT FROM Tablas INTO @campo, @columnas

 WHILE @@FETCH_STATUS = 0 BEGIN

  /* Compruebo la carga de la primera fila de la tabla */

  SET @colindex = 0

  DECLARE Valores CURSOR FOR

  select LN_doc_campos_col.valor_fecha, LN_doc_campos_col.valor_numerico, LN_doc_campos_col.valor_texto,
    LN_campos_col.tipo_campo, LN_doc_campos_col.fila, LN_doc_campos_col.col
  from LN_doc_campos_col
  inner join LN_campos_col on (LN_doc_campos_col.campo = LN_campos_col.campo
         AND LN_doc_campos_col.col = LN_campos_col.col)

  where LN_doc_campos_col.doc_id = @p_doc_id
  and LN_doc_campos_col.campo = @campo
  and LN_doc_campos_col.fila = 1
  order by LN_doc_campos_col.fila, LN_doc_campos_col.col

  OPEN Valores

  FETCH NEXT FROM Valores INTO @valor_fecha, @valor_numerico, @valor_texto, @tipo_campo, @fila, @col

  WHILE @@FETCH_STATUS = 0 BEGIN

   SET @colindex = @colindex + 
   CASE
    WHEN @tipo_campo = 'T' OR @tipo_campo = 'R' OR @tipo_campo = 'C' OR @tipo_campo = 'S' OR @tipo_campo = 'M'  
     THEN iif(@valor_texto is null or ltrim(rtrim(@valor_texto)) = '', 0, 1)
    WHEN @tipo_campo = 'N' OR @tipo_campo = 'B' THEN iif(@valor_numerico is null, 0, 1)
    WHEN @tipo_campo = 'D' THEN iif(@valor_fecha is null, 0, 1)
   END
      
   FETCH NEXT FROM Valores INTO @valor_fecha, @valor_numerico, @valor_texto, @tipo_campo, @fila, @col
  END

  CLOSE Valores
  DEALLOCATE Valores

  if (@colindex < @columnas) begin
   SET @faltantes = @faltantes + 1
  end
 
  FETCH NEXT FROM Tablas INTO @campo, @columnas
 END

 CLOSE Tablas
 DEALLOCATE Tablas

 SELECT @faltantes as faltantes

END
GO

Used By

No items found