← Índice de manuales
Manual funcional · Sistema Plenario v14

Reportes — Gestión (Informe de Cobranza / Medios de Cobro)

Este conjunto de Stored Procedures es, en su mayoría, el motor del proceso de Informe de Cobranza del módulo Medios de Cobro, más que un grupo de reportes sueltos para el usuario final. El flujo típico es: se…

Módulo: ReportesVersión: 1.0Actualizado: 2026-06-23

Reportes — Gestión (Informe de Cobranza / Medios de Cobro)

Este conjunto de Stored Procedures es, en su mayoría, el motor del proceso de Informe de Cobranza del módulo Medios de Cobro, más que un grupo de reportes sueltos para el usuario final. El flujo típico es: se importa/carga un Informe de Cobranza (cabecera Gestion_MediosDeCobro_InformesCobranza + detalle ...Detalle), se identifican los clientes de cada renglón (por datos adicionales, crédito, servicio, préstamo, CUIT o documento), se calculan comisiones (C1), se aplican los cobros contra cuotas de préstamos y servicios, y finalmente se recalculan importes y se obtienen resúmenes/listados.

Por eso varios SP son helpers de proceso (pasos del recálculo/identificación) o CRUD (alta/modificación de cabecera, detalle y cobros), y solo unos pocos son reportes propiamente dichos (_Resumen, _GetCobros, Retornos_Informe, los _List). Cada entrada indica el Tipo correspondiente.

Tablas/objetos centrales que cruza este módulo: - Gestion_MediosDeCobro_InformesCobranza — cabecera del informe (por entidad/presentación). - Gestion_MediosDeCobro_InformesCobranzaDetalle — renglones cobrados (cliente, concepto, importe, comisión, aplicado). - Gestion_MediosDeCobro_InformesCobranza_CobrosPrestamos / _CobrosServicios — aplicación de cada cobro a cuotas de crédito o a servicios. - Vistas ..._TotalesView y ..._TotalesCobradosPorDetalleView — totales pre-calculados. - Cruza además con Prestamos_Creditos(_Detalle), Prestamos_Solicitudes, Gestion_Servicios(_Repositorio/_Clientes), Clientes, Prestamos_Entidades(_CodigosDescuento/_CamposAdicionales), Prestamos_Prestadores, e Inversores.


Informe de Cobranza — Detalle: Obtener cobros aplicados (GetCobros)

  • SP/archivo: Gestion_MediosDeCobro_InformesCobranzaDetalle_GetCobros.proc.sql
  • Tipo: Reporte
  • Parámetros: @IdInformeCobranzaDetalle int
  • Relación con módulos: Detalle de informe de cobranza, Préstamos (Prestamos_Creditos_Detalle), Servicios (Gestion_Servicios_Repositorio, Gestion_Servicios).

Lista los cobros (préstamos + servicios) aplicados a un renglón de detalle, unificando ambos orígenes con UNION ALL y ordenando por fecha de vencimiento. Para créditos arma el concepto "Crédito N - Cuota M"; para servicios usa la descripción del servicio.


CREATE PROCEDURE [dbo].[Gestion_MediosDeCobro_InformesCobranzaDetalle_GetCobros]
    @IdInformeCobranzaDetalle INT
AS 
    SELECT  *
    FROM    ( SELECT    Fecha = a.Fecha,
                        FechaVencimiento = b.Fecha_Vencimiento,
                        Concepto = 'Crédito ' + CONVERT(VARCHAR, b.Id_Credito)
                        + ' - Cuota ' + CONVERT(VARCHAR, b.Nro_Cuota),
                        Importe = a.Importe
              FROM      Gestion_MediosDeCobro_InformesCobranza_CobrosPrestamos a
                        INNER JOIN [dbo].[Prestamos_Creditos_Detalle] b ON a.Id_Creditos_Detalle = b.Id
              WHERE     a.Id_InformeCobranzaDetalle = @IdInformeCobranzaDetalle
              UNION ALL
              SELECT    Fecha = a.Fecha,
                        FechaVencimiento = b.Fecha,
                        Concepto = c.Descripcion,
                        Importe = a.Importe
              FROM      Gestion_MediosDeCobro_InformesCobranza_CobrosServicios a
                        INNER JOIN Gestion_Servicios_Repositorio b ON a.Id_Servicios_Repositorio = b.id
                        INNER JOIN Gestion_Servicios c ON c.Id = b.id_Servicio
              WHERE     a.Id_InformeCobranzaDetalle = @IdInformeCobranzaDetalle
            ) Q1
    ORDER BY FechaVencimiento

Informe de Cobranza — Detalle: Guardar renglón (Save)

  • SP/archivo: Gestion_MediosDeCobro_InformesCobranzaDetalle_Save.proc.sql
  • Tipo: CRUD
  • Parámetros: @Id int out, @Id_InformesCobranza int, @Id_MedioDeCobro int, @Id_Clientes int, @Cuit char(13)=null, @DocumentoTipo varchar(3)=null, @DocumentoNumero int=null, @Nombre varchar(80)=null, @ConceptoTipo varchar(10)=null, @ConceptoNumero int=null, @Cuota int=null, @FechaCobro date, @FechaImputacion date=null, @CodMov int=null, @ImporteCobrado decimal(19,2), @ImporteComision decimal(19,2), @CodigoDescuento varchar(50)=null, @DatosAdicionales xml=null, @DatosExtendidos xml=null, @ImporteRedondeo decimal(19,2)=0 (compatibilidad), @ImporteAplicado decimal(19,2)=0 (compatibilidad)
  • Relación con módulos: Detalle de informe de cobranza.

Upsert de un renglón de detalle: inserta si @Id<=0 (devolviendo @@IDENTITY) o actualiza por Id. Los parámetros @ImporteRedondeo y @ImporteAplicado se aceptan por compatibilidad de versión pero no se persisten aquí.


create procedure Gestion_MediosDeCobro_InformesCobranzaDetalle_Save
    @Id int out,
    @Id_InformesCobranza int,
    @Id_MedioDeCobro int,
    @Id_Clientes int,
    @Cuit char(13) = null,
    @DocumentoTipo varchar(3) = null,
    @DocumentoNumero int = null,
    @Nombre varchar(80) = null,
    @ConceptoTipo varchar(10) = null,
    @ConceptoNumero int = null,
    @Cuota int = null,
    @FechaCobro date,
    @FechaImputacion date = null,
    @CodMov int = null,
    @ImporteCobrado decimal(19, 2),
    @ImporteComision decimal(19, 2),
    @CodigoDescuento varchar(50) = null,
    @DatosAdicionales xml = null,
    @DatosExtendidos xml = null,
    @ImporteRedondeo decimal(19, 2) = 0, -- Compatibilidad de versión
    @ImporteAplicado decimal(19, 2) = 0  -- Compatibilidad de versión   

as 
    if @Id <= 0 
        begin
            insert  into Gestion_MediosDeCobro_InformesCobranzaDetalle
                    ( Id_InformesCobranza,
                      Id_Clientes,
                      Id_MedioDeCobro,
                      Cuit,
                      DocumentoTipo,
                      DocumentoNumero,
                      Nombre,
                      ConceptoTipo,
                      ConceptoNumero,
                      Cuota,
                      FechaCobro,
                      FechaImputacion,
                      CodMov,
                      ImporteCobrado,
                      ImporteComision,
                      CodigoDescuento,
                      DatosAdicionales,
                      DatosExtendidos )
            values  ( @Id_InformesCobranza,
                      @Id_Clientes,
                      @Id_MedioDeCobro,
                      @Cuit,
                      @DocumentoTipo,
                      @DocumentoNumero,
                      @Nombre,
                      @ConceptoTipo,
                      @ConceptoNumero,
                      @Cuota,
                      @FechaCobro,
                      @FechaImputacion,
                      @CodMov,
                      @ImporteCobrado,
                      @ImporteComision,
                      @CodigoDescuento,
                      @DatosAdicionales,
                      @DatosExtendidos )
            set @Id = @@IDENTITY
        end
    else 
        update  Gestion_MediosDeCobro_InformesCobranzaDetalle
        set     Id_InformesCobranza = @Id_InformesCobranza,
                Id_Clientes = @Id_Clientes,
                Cuit = @Cuit,
                DocumentoTipo = @DocumentoTipo,
                DocumentoNumero = @DocumentoNumero,
                Nombre = @Nombre,
                ConceptoTipo = @ConceptoTipo,
                ConceptoNumero = @ConceptoNumero,
                Cuota = @Cuota,
                FechaCobro = @FechaCobro,
                FechaImputacion = @FechaImputacion,
                CodMov = @CodMov,
                ImporteCobrado = @ImporteCobrado,
                ImporteComision = @ImporteComision,
                CodigoDescuento = @CodigoDescuento,
                DatosAdicionales = @DatosAdicionales,
                DatosExtendidos = @DatosExtendidos
        where   Id = @Id

Informe de Cobranza — Recalcular Importe Aplicado

  • SP/archivo: Gestion_MediosDeCobro_InformesCobranza_ActualizarImporteAplicado.proc.sql
  • Tipo: Helper de proceso
  • Parámetros: @IdInfCob int
  • Relación con módulos: Detalle de informe de cobranza, Cobros de préstamos y servicios, cabecera del informe.

Recalcula ImporteAplicado por renglón sumando los cobros aplicados a préstamos y a servicios, luego actualiza los totales (ImporteTotal, ImporteAplicado) en la cabecera y devuelve el ImporteAplicado del informe. Es un paso del recálculo, no un reporte.


create procedure Gestion_MediosDeCobro_InformesCobranza_ActualizarImporteAplicado
    @IdInfCob int
as
    update Gestion_MediosDeCobro_InformesCobranzaDetalle set ImporteAplicado=0
    where Id_InformesCobranza = @IdInfCob 

    update Gestion_MediosDeCobro_InformesCobranzaDetalle set ImporteAplicado=Importe 
    from (  select cp.Id_InformeCobranzaDetalle, Importe = SUM(cp.Importe) 
            from Gestion_MediosDeCobro_InformesCobranzaDetalle icd 
                inner join Gestion_MediosDeCobro_InformesCobranza_CobrosPrestamos cp on cp.Id_InformeCobranzaDetalle = icd.id   
            where icd.Id_InformesCobranza = @IdInfCob 
            group by cp.Id_InformeCobranzaDetalle ) Q1
    where Id = Q1.Id_InformeCobranzaDetalle

    update Gestion_MediosDeCobro_InformesCobranzaDetalle set ImporteAplicado = ImporteAplicado + Importe 
    from (  select cp.Id_InformeCobranzaDetalle, Importe = SUM(cp.Importe) 
            from Gestion_MediosDeCobro_InformesCobranzaDetalle icd 
                inner join Gestion_MediosDeCobro_InformesCobranza_CobrosServicios cp on cp.Id_InformeCobranzaDetalle = icd.id   
            where icd.Id_InformesCobranza = @IdInfCob 
            group by cp.Id_InformeCobranzaDetalle ) Q1
    where Id = Q1.Id_InformeCobranzaDetalle

    update Gestion_MediosDeCobro_InformesCobranza set ImporteTotal = Total, ImporteAplicado = Aplicado
    from (  select Total = SUM(ImporteCobrado), Aplicado = SUM(ImporteAplicado)  
            from Gestion_MediosDeCobro_InformesCobranzaDetalle 
            where Id_InformesCobranza = @IdInfCob ) Q1
    where Id = @IdInfCob

    select ImporteAplicado from Gestion_MediosDeCobro_InformesCobranza where Id = @IdInfCob

Informe de Cobranza — Calcular Comisión C1

  • SP/archivo: Gestion_MediosDeCobro_InformesCobranza_CalcularC1.proc.sql
  • Tipo: Helper de proceso
  • Parámetros: @IdInformeCobranza int
  • Relación con módulos: Detalle de informe de cobranza, Préstamos (Prestamos_Creditos, Prestamos_Solicitudes_MediosCobro).

Calcula la comisión "C1" (1% del importe cobrado) para los renglones con CodigoDescuento='397725' y luego la ajusta contra el C1 esperado por cuota (1% del ValorCuota). Atención: contiene un rango de IDs de crédito hardcodeado (pc.id between 665629 and 667006), por lo que parece código atado a una corrida puntual.

CREATE procedure Gestion_MediosDeCobro_InformesCobranza_CalcularC1
    @IdInformeCobranza int
as

update Gestion_MediosDeCobro_InformesCobranzaDetalle 
    set ImporteComision =   case 
                                when CodigoDescuento='397725' then ImporteCobrado*0.01
                                else 0
                            end
where Id_InformesCobranza=@IdInformeCobranza 

update Gestion_MediosDeCobro_InformesCobranzaDetalle 
    set ImporteComision-=   case 
                                when ImporteComision>Q2.C1 then Q2.C1
                                when abs(ImporteComision-Q2.C1)<0.05 then ImporteComision
                                else 0
                            end
from (  select icd.Id,Q1.C1 
        from Gestion_MediosDeCobro_InformesCobranzaDetalle icd
            inner join (    select Id_Cliente,psmc.Id_MedioDeCobro,C1=round(ValorCuota*0.01,2) 
                            from Prestamos_Creditos pc
                                inner join Prestamos_Solicitudes_MediosCobro psmc on psmc.Id_Solicitud=pc.Id_Solicitud
                            where pc.id between 665629 and 667006) Q1 on icd.Id_Clientes=Q1.Id_Cliente and icd.Id_MedioDeCobro=Q1.Id_MedioDeCobro and icd.CodigoDescuento='397725'
        where icd.Id_InformesCobranza=@IdInformeCobranza) Q2
where Gestion_MediosDeCobro_InformesCobranzaDetalle.Id=Q2.Id

/*

Gestion_MediosDeCobro_InformesCobranza_CalcularC1 1

select icd.Id,icd.Id_InformesCobranza,icd.Id_MedioDeCobro,icd.CodigoDescuento,Id_Cliente,ImporteCobrado,ImporteComision,Q1.C1 
from Gestion_MediosDeCobro_InformesCobranzaDetalle icd
            inner join (    select Id_Cliente,C1=round(ValorCuota*0.01,2) 
                            from Prestamos_Creditos 
                            where id between 665629 and 667006) Q1 on icd.Id_Clientes=Q1.Id_Cliente and icd.CodigoDescuento='397725'
where ImporteComision<0

*/

Informe de Cobranza — Guardar Cobro de Préstamo

  • SP/archivo: Gestion_MediosDeCobro_InformesCobranza_CobrosPrestamos_Save.proc.sql
  • Tipo: CRUD
  • Parámetros: @Id int=0 out, @Id_InformeCobranzaDetalle int, @Id_Creditos_Detalle int, @CodMov int=null, @Fecha datetime, @Importe decimal(19,2)
  • Relación con módulos: Cobros de préstamos del informe, cuota de crédito (Prestamos_Creditos_Detalle vía Id_Creditos_Detalle).

Upsert de la aplicación de un cobro a una cuota de crédito (inserta o actualiza por Id).

CREATE PROCEDURE Gestion_MediosDeCobro_InformesCobranza_CobrosPrestamos_Save
    @Id int = 0 out,
    @Id_InformeCobranzaDetalle int,
    @Id_Creditos_Detalle int,
    @CodMov int = null,
    @Fecha datetime,
    @Importe decimal(19, 2)
as 
    if @Id <= 0 
        begin
            insert  into Gestion_MediosDeCobro_InformesCobranza_CobrosPrestamos
                    ( Id_InformeCobranzaDetalle,
                      Id_Creditos_Detalle,
                      CodMov,
                      Fecha,
                      Importe )
            values  ( @Id_InformeCobranzaDetalle,
                      @Id_Creditos_Detalle,
                      @CodMov,
                      @Fecha,
                      @Importe )
            set @Id = @@identity
        end
    else 
        update  Gestion_MediosDeCobro_InformesCobranza_CobrosPrestamos
        set     Id_InformeCobranzaDetalle = @Id_InformeCobranzaDetalle,
                Id_Creditos_Detalle = @Id_Creditos_Detalle,
                CodMov = @CodMov,
                Fecha = @Fecha,
                Importe = @Importe
        where   Id = @Id

Informe de Cobranza — Guardar Cobro de Servicio

  • SP/archivo: Gestion_MediosDeCobro_InformesCobranza_CobrosServicios_Save.proc.sql
  • Tipo: CRUD
  • Parámetros: @Id int=0 out, @Id_InformeCobranzaDetalle int, @Id_Servicios_Repositorio int, @CodMov int=null, @Fecha datetime, @Importe decimal(19,2)
  • Relación con módulos: Cobros de servicios del informe, Servicios (Gestion_Servicios_Repositorio vía Id_Servicios_Repositorio).

Upsert de la aplicación de un cobro a un servicio (inserta o actualiza por Id).

CREATE PROCEDURE Gestion_MediosDeCobro_InformesCobranza_CobrosServicios_Save
    @Id int = 0 out,
    @Id_InformeCobranzaDetalle int,
    @Id_Servicios_Repositorio int,
    @CodMov int = null,
    @Fecha datetime,
    @Importe decimal(19, 2)
as 
    if @Id <= 0 
        begin
            insert  into Gestion_MediosDeCobro_InformesCobranza_CobrosServicios
                    ( Id_InformeCobranzaDetalle,
                      Id_Servicios_Repositorio,
                      CodMov,
                      Fecha,
                      Importe )
            values  ( @Id_InformeCobranzaDetalle,
                      @Id_Servicios_Repositorio,
                      @CodMov,
                      @Fecha,
                      @Importe )
            set @Id = @@identity
        end
    else 
        update  Gestion_MediosDeCobro_InformesCobranza_CobrosServicios
        set     Id_InformeCobranzaDetalle = @Id_InformeCobranzaDetalle,
                Id_Servicios_Repositorio = @Id_Servicios_Repositorio,
                CodMov = @CodMov,
                Fecha = @Fecha,
                Importe = @Importe
        where   Id = @Id

Informe de Cobranza — Identificar Clientes

  • SP/archivo: Gestion_MediosDeCobro_InformesCobranza_IdentificarClientes.proc.sql
  • Tipo: Helper de proceso
  • Parámetros: @IdInformeCobranza int
  • Relación con módulos: Detalle de informe de cobranza, Préstamos (prestamos_creditos, Prestamos_Solicitudes), Servicios (Gestion_Servicios_Clientes), Clientes.

Asigna Id_Clientes/Nombre a cada renglón del detalle aplicando una cascada de criterios, en orden: (1) datos adicionales (delega en el SP ...IdentificarClientesSegunDatosAdicionales), (2) crédito, (3) servicio, (4) préstamo (solicitud), (5) CUIT, (6) documento tipo+número, y por último completa nombres faltantes. Cada paso solo toca renglones aún sin cliente identificado.

create procedure [dbo].[Gestion_MediosDeCobro_InformesCobranza_IdentificarClientes]
    @IdInformeCobranza int
as
begin

    --========================================--
    -- IDENTIFICACION SEGUN DATOS ADICIONALES --
    --========================================--

    exec Gestion_MediosDeCobro_InformesCobranza_IdentificarClientesSegunDatosAdicionales @IdInformeCobranza


--================================--
    -- IDENTIFICACION SEGUN CREDITO --
    --================================--

    update Gestion_MediosDeCobro_InformesCobranzaDetalle set Id_Clientes = c.id, Nombre = c.nombre ,ConceptoTipo='PRESTAMO',ConceptoNumero=ps.Id_Solicitud
    from Gestion_MediosDeCobro_InformesCobranzaDetalle icd
        inner join prestamos_creditos ps on ps.Id=icd.ConceptoNumero
        inner join clientes c on c.id=ps.Id_Cliente
    where   icd.Id_Clientes is null 
        and icd.Id_InformesCobranza=@IdInformeCobranza
        and upper(icd.ConceptoTipo)='CREDITO'
    --================================--
    -- IDENTIFICACION SEGUN SERVICIOS --
    --================================--

    update Gestion_MediosDeCobro_InformesCobranzaDetalle set Id_Clientes = c.id, Nombre = c.nombre 
    from Gestion_MediosDeCobro_InformesCobranzaDetalle icd
        inner join Gestion_Servicios_Clientes gsc on gsc.Id=icd.ConceptoNumero
        inner join clientes c on c.id=gsc.Id_Cliente
    where   icd.Id_Clientes is null 
        and icd.Id_InformesCobranza=@IdInformeCobranza
        and upper(icd.ConceptoTipo)='SERVICIO'

    --================================--
    -- IDENTIFICACION SEGUN PRESTAMOS --
    --================================--

    update Gestion_MediosDeCobro_InformesCobranzaDetalle set Id_Clientes = c.id, Nombre = c.nombre 
    from Gestion_MediosDeCobro_InformesCobranzaDetalle icd
        inner join Prestamos_Solicitudes ps on ps.Id=icd.ConceptoNumero
        inner join clientes c on c.id=ps.Id_Cliente
    where   icd.Id_Clientes is null 
        and icd.Id_InformesCobranza=@IdInformeCobranza
        --and upper(icd.ConceptoTipo)='PRESTAMO'
        and isnull(upper(icd.ConceptoTipo),'') not in ('CREDITO','SERVICIO')

    --===========================--
    -- IDENTIFICACION SEGUN CUIT --
    --===========================--

    update Gestion_MediosDeCobro_InformesCobranzaDetalle set Id_Clientes = c.id, Nombre = c.nombre 
    from Gestion_MediosDeCobro_InformesCobranzaDetalle icd
        inner join clientes c on c.cuit=icd.Cuit and c.eliminado = 0
    where icd.Id_Clientes is null and icd.Id_InformesCobranza=@IdInformeCobranza

    --================================--
    -- IDENTIFICACION SEGUN DOCUMENTO --
    --================================--

    update Gestion_MediosDeCobro_InformesCobranzaDetalle set Id_Clientes = c.id, Nombre = c.nombre 
    from Gestion_MediosDeCobro_InformesCobranzaDetalle icd
        inner join clientes c on c.TipoDoc=icd.DocumentoTipo and c.NroDoc=icd.DocumentoNumero and c.eliminado = 0
    where icd.Id_Clientes is null and icd.DocumentoNumero>0 and icd.Id_InformesCobranza=@IdInformeCobranza

    --=============================--
    -- COMPLETAR NOMBRES FALTANTES --
    --=============================--

    update Gestion_MediosDeCobro_InformesCobranzaDetalle set Nombre = c.nombre 
    from Gestion_MediosDeCobro_InformesCobranzaDetalle icd
        inner join clientes c on c.id=icd.Id_Clientes
    where icd.Nombre is null and icd.Id_InformesCobranza=@IdInformeCobranza

end

Informe de Cobranza — Identificar Clientes según Datos Adicionales

  • SP/archivo: Gestion_MediosDeCobro_InformesCobranza_IdentificarClientesSegunDatosAdicionales.proc.sql
  • Tipo: Helper de proceso
  • Parámetros: @IdInformesCobranza int, @SobreEscribir bit = 0
  • Relación con módulos: Detalle de informe de cobranza, Entidades y Campos Adicionales (Prestamos_Entidades_Entidades_CamposAdicionales, Prestamos_Entidades_CamposAdicionales), Medios de Cobro (Gestion_MediosDeCobro, Gestion_MediosDeCobro_DatosAdicionales).

Helper invocado por ...IdentificarClientes. Arma dinámicamente (SQL dinámico con PIVOT) un cruce entre los datos adicionales obligatorios de la entidad y los datos adicionales XML del renglón, para resolver Id_Clientes/Id_MedioDeCobro. Con @SobreEscribir=0 solo completa renglones sin cliente/medio asignado. Usa tabla temporal #TMP por performance del UPDATE.


create procedure [dbo].[Gestion_MediosDeCobro_InformesCobranza_IdentificarClientesSegunDatosAdicionales]
    @IdInformesCobranza int,
    @SobreEscribir bit = 0
as

declare @IdEntidad int = null,
        @SQL0 nvarchar(max),
        @SQL1 nvarchar(max),
        @SQL2 nvarchar(max),
        @Count int = 0

select @IdEntidad = ic.Id_Entidad 
from Gestion_MediosDeCobro_InformesCobranza ic
    inner join Prestamos_Entidades_Entidades_CamposAdicionales eca on eca.Id_Entidad = ic.Id_Entidad
where ic.Id = @IdInformesCobranza

if @IdEntidad is not null
begin

    set @SQL1 = ''
    set @SQL2 = ''

    select  @Count += 1, 
            @SQL1 += ',[' + CONVERT(varchar,ca.Id) + ']', 
            @SQL2 += ' and pv.[' + CONVERT(varchar,ca.Id) + ']=DatosAdicionales.value(''(/datosadicionales/' + ca.CodCampo + ')[1]'',''varchar(max)'')' 
        from Prestamos_Entidades_Entidades_CamposAdicionales eca 
            inner join Prestamos_Entidades_CamposAdicionales ca on eca.Id_CampoAdicional=ca.Id
        where eca.Id_Entidad=@IdEntidad and eca.Obligatorio=1

    if @Count > 0
    Begin   
        set @SQL0 = 
        'select Id_InformesCobranzaDetalle = icd.Id, Id_Clientes = mc.Id_Cliente, Id_MedioDeCobro = mc.id
        into #TMP
        from (select Id_MedioCobro,Id_CampoAdicional,Valor from Gestion_MediosDeCobro_DatosAdicionales where Valor<>'''' and Valor is not null) da 
            pivot ( max(Valor) for Id_CampoAdicional in ( ' + substring(@SQL1,2,LEN(@SQL1)) + ' )) pv
            inner join Gestion_MediosDeCobro mc on pv.Id_MedioCobro=mc.id 
            inner join Gestion_MediosDeCobro_InformesCobranzaDetalle icd on ' + substring(@SQL2,6,LEN(@SQL2)) + '
            inner join Gestion_MediosDeCobro_InformesCobranza ic on ic.Id=icd.Id_InformesCobranza 
        where ic.Id_Entidad=mc.Id_Entidad and Id_InformesCobranza=' + CONVERT(varchar,@IdInformesCobranza) 

        if @SobreEscribir = 0           
            set @SQL0 = @SQL0 + ' and (Id_Clientes is null or Id_MedioDeCobro is null)'

        set @SQL0 += '

        update Gestion_MediosDeCobro_InformesCobranzaDetalle set Id_Clientes = #TMP.Id_Clientes, Id_MedioDeCobro = #TMP.Id_MedioDeCobro
        from #TMP
        where Id=#TMP.Id_InformesCobranzaDetalle

        drop table #TMP'

        print @SQL0

        /*

        =======================================================================
        NOTA: SE CREA UNA TABLA TEMPORAL PORQUE EL UPDATE SE EJECUTA MAS RÁPIDO
        =======================================================================

        */

        exec(@SQL0)
    end
end

Informe de Cobranza — Resumen

  • SP/archivo: Gestion_MediosDeCobro_InformesCobranza_Resumen.proc.sql
  • Tipo: Reporte
  • Parámetros: @Id_InformesCobranza int
  • Relación con módulos: Detalle de informe de cobranza, Códigos de Descuento por entidad (Prestamos_Entidades_CodigosDescuento), Cobros de préstamos y servicios, Préstamos (Prestamos_Creditos_Detalle, Prestamos_Prestadores), Servicios (Gestion_Servicios), Inversores.

Reporte multi-resultset del informe de cobranza: (1) resumen por código de descuento con cantidad, cobrado, comisión, aplicado y RU (= cobrado − comisión − aplicado), más filas "Cobrado = 0" y "No Identificados"; (2) detalle de RU por cliente; (3) total aplicado por prestador; (4) total aplicado por servicio.

CREATE procedure Gestion_MediosDeCobro_InformesCobranza_Resumen
    @Id_InformesCobranza int
as

    ----------------------------------------------
    -- RESUMEN DE COBRANZA POR CODIGO DESCUENTO --
    ----------------------------------------------

    select  [Descripción]=b.CodigoDescuento + ' - ' + cd.Observaciones,
            Cantidad=COUNT(*),
            [Cobrado]=isnull(sum(b.ImporteCobrado),0),
            [Comisión]=isnull(sum(b.ImporteComision),0),
            [Aplicado]=isnull(sum(b.ImporteAplicado),0),
            RU=sum(b.ImporteCobrado-b.ImporteComision-b.ImporteAplicado)
    from Gestion_MediosDeCobro_InformesCobranzaDetalle b 
        inner join Gestion_MediosDeCobro_InformesCobranza ic on ic.Id=b.Id_InformesCobranza
        left join Prestamos_Entidades_CodigosDescuento cd on cd.Codigo=b.CodigoDescuento and cd.Id_Entidad=ic.Id_Entidad
    where Id_Clientes is not null and b.ImporteCobrado>0 and b.Id_InformesCobranza=@Id_InformesCobranza
    group by b.CodigoDescuento,cd.Observaciones

    union all

    select  [Descripción]='Cobrado = 0',
            Cantidad=COUNT(*),
            [Cobrado]=isnull(sum(b.ImporteCobrado),0),
            [Comisión]=isnull(sum(b.ImporteComision),0),
            [Aplicado]=isnull(sum(b.ImporteAplicado),0),
            RU=isnull(sum(b.ImporteCobrado-b.ImporteComision-b.ImporteAplicado),0)
    from Gestion_MediosDeCobro_InformesCobranzaDetalle b 
    where Id_Clientes is not null and b.ImporteCobrado=0 and b.Id_InformesCobranza=@Id_InformesCobranza

    union all

    select  [Descripción]='No Identificados',
            Cantidad=COUNT(*),
            [Cobrado]=isnull(sum(b.ImporteCobrado),0),
            [Comisión]=isnull(sum(b.ImporteComision),0),
            [Aplicado]=isnull(sum(b.ImporteAplicado),0),
            RU=isnull(sum(b.ImporteCobrado-b.ImporteComision-b.ImporteAplicado),0)
    from Gestion_MediosDeCobro_InformesCobranzaDetalle b 
    where Id_Clientes is null and b.Id_InformesCobranza=@Id_InformesCobranza

    ----------------
    -- Detalle RU --
    ----------------

    select  Id_Clientes,
            [ImporteCobrado (Sin C1)]=SUM(ImporteCobrado-ImporteComision),
            ImporteAplicado=SUM(ImporteAplicado),
            Diferencia=SUM(ImporteCobrado-ImporteComision-ImporteAplicado) 
    from Gestion_MediosDeCobro_InformesCobranzaDetalle
    where Id_Clientes>0 and Id_InformesCobranza=@Id_InformesCobranza
    group by Id_Clientes
    --having SUM(ImporteCobrado-ImporteComision-ImporteAplicado)>1
    order by SUM(ImporteCobrado-ImporteComision-ImporteAplicado) desc

    ---------------------------
    -- DETALLE POR PRESTADOR --
    ---------------------------

    select pcd.Id_Prestador, pp.Nombre, TotalAplicado=sum(iccp.Importe)
    from Gestion_MediosDeCobro_InformesCobranza_CobrosPrestamos iccp
        inner join Gestion_MediosDeCobro_InformesCobranzaDetalle icd on icd.Id=iccp.Id_InformeCobranzaDetalle
        inner join [dbo].[Prestamos_Creditos_Detalle] pcd on iccp.Id_Creditos_Detalle=pcd.id
        left join Prestamos_Prestadores pp on pp.id=pcd.Id_Prestador
    where icd.Id_InformesCobranza=@Id_InformesCobranza
    group by pcd.Id_Prestador, pp.Nombre

    select gs.Id, gs.Descripcion, TotalAplicado=sum(iccs.Importe)
    from Gestion_MediosDeCobro_InformesCobranza_CobrosServicios iccs
        inner join Gestion_MediosDeCobro_InformesCobranzaDetalle icd on icd.Id=iccs.Id_InformeCobranzaDetalle
        inner join Gestion_Servicios_Repositorio gsr on iccs.Id_Servicios_Repositorio=gsr.id
        inner join Gestion_Servicios gs on gs.Id=gsr.id_Servicio 
        left join Inversores i on i.id=gs.Id_Inversor
    where icd.Id_InformesCobranza=@Id_InformesCobranza
    group by gs.Id, gs.Descripcion

Informe de Cobranza — Guardar Cabecera (Save)

  • SP/archivo: Gestion_MediosDeCobro_InformesCobranza_Save.proc.sql
  • Tipo: CRUD
  • Parámetros: @Id int out, @Id_Entidad int, @Id_Presentacion int, @Fecha datetime, @FechaImputacion datetime=null, @ImporteTotal decimal(19,2), @ImporteAplicado decimal(19,2), @CodMov int=null, @Eliminado bit=0, @Id_UserAdd int=0, @Id_UserMod int=0, @Fecha_Add datetime='01/01/1900', @UserEnv varchar(4000)='', @Archivo varchar(1000)=''
  • Relación con módulos: Cabecera de informe de cobranza, Entidades, Presentaciones.

Upsert de la cabecera del informe de cobranza (inserta o actualiza por Id). Incluye campos de auditoría (usuario alta/mod, fecha, entorno, archivo origen).

Create procedure [dbo].[Gestion_MediosDeCobro_InformesCobranza_Save]
    @Id int out,
    @Id_Entidad int,
    @Id_Presentacion int,
    @Fecha datetime,
    @FechaImputacion datetime = null,
    @ImporteTotal decimal(19, 2),
    @ImporteAplicado decimal(19, 2),
    @CodMov int = null,
    @Eliminado bit = 0,
    @Id_UserAdd int = 0,
    @Id_UserMod int = 0,
    @Fecha_Add datetime = '01/01/1900',
    @UserEnv varchar(4000) = '',
    @Archivo varchar(1000) = ''
as 
    if @Id <= 0 
        begin
            insert  into Gestion_MediosDeCobro_InformesCobranza
                    ( Id_Entidad,
                      Id_Presentacion,
                      Fecha,
                      FechaImputacion,
                      ImporteTotal,
                      ImporteAplicado,
                      CodMov,
                      Eliminado,
                      Id_UserAdd,
                      Id_UserMod,
                      Fecha_Add,
                      UserEnv,
                      Archivo )

            values  ( @Id_Entidad,
                      @Id_Presentacion,
                      @Fecha,
                      @FechaImputacion,
                      @ImporteTotal,
                      @ImporteAplicado,
                      @CodMov,
                      @Eliminado,
                      @Id_UserAdd,
                      @Id_UserMod,
                      @Fecha_Add,
                      @UserEnv,
                      @Archivo )
            set @Id = @@IDENTITY
        end
    else 
        update  Gestion_MediosDeCobro_InformesCobranza
        set     Id_Entidad = @Id_Entidad,
                Id_Presentacion = @Id_Presentacion,
                Fecha = @Fecha,
                FechaImputacion = @FechaImputacion,
                ImporteTotal = @ImporteTotal,
                ImporteAplicado= @ImporteAplicado,
                CodMov = @CodMov,
                Eliminado = @Eliminado,
                Id_UserAdd = @Id_UserAdd,
                Id_UserMod = @Id_UserMod,
                Fecha_Add = @Fecha_Add,
                UserEnv = @UserEnv,
                Archivo = @Archivo
        where   Id = @Id    

Medios de Cobro — Retornos: Informe de conciliación Elevado vs Retornado

  • SP/archivo: Gestion_MediosDeCobro_Retornos_Informe.proc.sql
  • Tipo: Reporte
  • Parámetros: @Id_Gestion_MediosDeCobro_Retornos int = 1
  • Relación con módulos: Elevaciones y Retornos de medios de cobro (Gestion_MediosDeCobro_Elevaciones_Detalle, Gestion_MediosDeCobro_Retornos_Detalle), Clientes y Clientes_MediosDeCobro.

Reporte de conciliación que compara, registro a registro (FULL JOIN por Registro), lo elevado contra lo retornado. Devuelve un Estado/IsOK por registro: "No elevado - Retornado", "Elevado - No retornado", "Retorno > Elevado", "Retorno < Elevado" o "Registro OK", con la diferencia de importes. Nota: el parámetro filtra tanto por Id de elevación como por Id de retorno (mismo valor en ambos lados del OR); cabecera marcada como generada automáticamente (NO MODIFICAR).

/*
IMPORTANTE: NO MODIFICAR ESTE C?DIGO YA QUE FUE GENERADO AUTOM?TICAMENTE.


<CompoundXmlDocument>
  <User Name="PLENARIO\elopez" />
</CompoundXmlDocument>
*/

Create Procedure [dbo].[Gestion_MediosDeCobro_Retornos_Informe]
        @Id_Gestion_MediosDeCobro_Retornos Int = 1
As

Select  Id_Elevacion = Gestion_MediosDeCobro_Elevaciones_Detalle.Id_Gestion_MediosDeCobro_Elevaciones,
        Id_Retorno = Gestion_MediosDeCobro_Retornos_Detalle.Id_Gestion_MediosDeCobro_Retornos,
        Estado =    (Case   When Gestion_MediosDeCobro_Elevaciones_Detalle.Id_Gestion_MediosDeCobro_Elevaciones Is Null Then 'No elevado - Retornado'
                            When Gestion_MediosDeCobro_Retornos_Detalle.Id_Gestion_MediosDeCobro_Retornos Is Null Then 'Elevado - No retornado'
                            When (((Gestion_MediosDeCobro_Elevaciones_Detalle.Importe + Gestion_MediosDeCobro_Elevaciones_Detalle.Importe_Recargo) - Gestion_MediosDeCobro_Retornos_Detalle.Importe) < 0) Then 'Retorno > Elevado'
                            When (((Gestion_MediosDeCobro_Elevaciones_Detalle.Importe + Gestion_MediosDeCobro_Elevaciones_Detalle.Importe_Recargo) - Gestion_MediosDeCobro_Retornos_Detalle.Importe) > 0) Then 'Retorno < Elevado'
                            Else 'Registro OK'
                    End),
        IsOK =      (Case   When Gestion_MediosDeCobro_Elevaciones_Detalle.Id_Gestion_MediosDeCobro_Elevaciones Is Null Then 0
                            When Gestion_MediosDeCobro_Retornos_Detalle.Id_Gestion_MediosDeCobro_Retornos Is Null Then 0
                            When (((Gestion_MediosDeCobro_Elevaciones_Detalle.Importe + Gestion_MediosDeCobro_Elevaciones_Detalle.Importe_Recargo) - Gestion_MediosDeCobro_Retornos_Detalle.Importe) < 0) Then 0
                            When (((Gestion_MediosDeCobro_Elevaciones_Detalle.Importe + Gestion_MediosDeCobro_Elevaciones_Detalle.Importe_Recargo) - Gestion_MediosDeCobro_Retornos_Detalle.Importe) > 0) Then 0
                            Else 1
                    End),
        Id_Asociado = Clientes.Id_Asociado,
        ApellidoCliente = IsNull(Clientes.apellidofisico, ''),
        NombreCliente = IsNull(Clientes.nombrefisico, ''),
        Registro_Elevado = IsNull(Gestion_MediosDeCobro_Elevaciones_Detalle.Registro, ''),
        Importe_Elevado = Gestion_MediosDeCobro_Elevaciones_Detalle.Importe + Gestion_MediosDeCobro_Elevaciones_Detalle.Importe_Recargo,
        Registro_Retornado = Gestion_MediosDeCobro_Retornos_Detalle.Registro,
        Importe_Retornado = Gestion_MediosDeCobro_Retornos_Detalle.Importe,
        Diferencia = IsNull((Gestion_MediosDeCobro_Elevaciones_Detalle.Importe + Gestion_MediosDeCobro_Elevaciones_Detalle.Importe_Recargo) - Gestion_MediosDeCobro_Retornos_Detalle.Importe, 0)
From Gestion_MediosDeCobro_Elevaciones_Detalle
Full Join Gestion_MediosDeCobro_Retornos_Detalle On Gestion_MediosDeCobro_Retornos_Detalle.Registro = Gestion_MediosDeCobro_Elevaciones_Detalle.Registro
Left Outer Join Clientes_MediosDeCobro On Clientes_MediosDeCobro.Id = Gestion_MediosDeCobro_Elevaciones_Detalle.Id_Clientes_MediosDeCobro
Left Outer Join Clientes On Clientes.Id = Clientes_MediosDeCobro.Id_Cliente
Where   Gestion_MediosDeCobro_Elevaciones_Detalle.Id_Gestion_MediosDeCobro_Elevaciones = @Id_Gestion_MediosDeCobro_Retornos
        Or
        Gestion_MediosDeCobro_Retornos_Detalle.Id_Gestion_MediosDeCobro_Retornos = @Id_Gestion_MediosDeCobro_Retornos
Order By Registro_Elevado Desc

Informe de Cobranza — Detalle: Listado (List)

  • SP/archivo: MediosDeCobroInformeCobranzaDetalle_List.proc.sql
  • Tipo: Reporte
  • Parámetros: @Id_InformesCobranza int
  • Relación con módulos: Detalle de informe de cobranza, Clientes, vista ..._TotalesCobradosPorDetalleView.

Lista todos los renglones de detalle de un informe, enriquecidos con datos del cliente (nombre, Id_Asociado, NroDoc) y el total cobrado (préstamos + servicios) tomado de la vista de totales por detalle.


CREATE PROCEDURE [dbo].[MediosDeCobroInformeCobranzaDetalle_List]
    @Id_InformesCobranza INT
AS 
    SELECT  a.*,
            ClienteNombre = b.nombre,
            ClienteIdAsociado = b.Id_Asociado,
            ClienteNroDoc = b.NroDoc,
            TotalCobrado = CASE WHEN c.TotalCobradoPrestamos
                                     + c.TotalCobradoServicios IS NULL THEN 0
                                ELSE c.TotalCobradoPrestamos
                                     + c.TotalCobradoServicios
                           END
    FROM    Gestion_MediosDeCobro_InformesCobranzaDetalle a
            LEFT JOIN Clientes b ON a.Id_Clientes = b.id
            LEFT JOIN Gestion_MediosDeCobro_InformesCobranza_TotalesCobradosPorDetalleView c ON a.Id = c.Id_InformeCobranzaDetalle
    WHERE   Id_InformesCobranza = @Id_InformesCobranza

Informe de Cobranza — Cabecera: Listado (List)

  • SP/archivo: MediosDeCobroInformeCobranza_List.proc.sql
  • Tipo: Reporte
  • Parámetros: @IdEntidad int = null
  • Relación con módulos: Cabecera de informe de cobranza, Entidades (Prestamos_Entidades), vista ..._TotalesView.

Lista las cabeceras de informes de cobranza (opcionalmente filtradas por entidad), con el nombre de la entidad y los totales (importe total y total cobrado) tomados de la vista de totales.


CREATE PROCEDURE [dbo].[MediosDeCobroInformeCobranza_List] @IdEntidad INT = NULL
AS 
    SELECT  a.*,
            EntidadNombre = b.Nombre,
            c.ImporteTotal,
            c.TotalCobrado
    FROM    Gestion_MediosDeCobro_InformesCobranza a
            LEFT JOIN Prestamos_Entidades b ON a.Id_Entidad = b.Id
            LEFT JOIN Gestion_MediosDeCobro_InformesCobranza_TotalesView c ON a.Id = c.Id
    WHERE   @IdEntidad IS NULL
            OR Id_Entidad = @IdEntidad
¿Te resultó útil este manual?