martes, 29 de mayo de 2018

Fecha Inicial : 29/05/2018
Fecha Final :  29/05/2018
Hora Inicio: 10:36 am
Hora Final: 8:24 pm 
Horas invertidas(Minutos): 325
Colaboradores: Wilson Lopez


Actividad: Finalizacion del proceso masivo de la simulación , así como agregar algunas cosas que faltaban en el planeamiento del proyecto a nivel de base de datos y de datos en los xmls ,
se crea ademas Stores de vistas de recibos por propiedad 

Pausas:
12:05-13:30 - Almuerzo 
14:20:16:56 Lavar/Clases
17:13-17:30 Tender la Ropa

Cambios aplicados: 
Para el calculo de intereses moratorios se toma la decisión de realizar un proceso masivo que revisa todos los días si una factura ya esta vencida y calcula los intereses moratorias para que de esta forma la simulación de pagos cancele la cantidad adecuada , el requerimiento dice q se calculan durante la consulta pero veo un par de problemas de complejidad a la hora de los pagos y de las consultas del tipo top deudores. 

Código

CREATE PROCEDURE [dbo].[CalculoInteresMoratorio] @Fecha Date
AS
BEGIN
    DECLARE @TasaInteres float
    DECLARE @DiasRetraso int
    DECLARE @MuniID int
    DECLARE @PropiedadID int
    DECLARE @FechaLimite date
    DECLARE @MontoTotal Money
    DECLARE @MontoInteresMoratorio float
    DECLARE @Recibos table (ID int,FK_Propiedad int,PagoTotalNoIntereses money,FechaLimite datetime)
    BEGIN TRY
        begin
            begin tran
                --DO HERE
                INSERT INTO @Recibos(ID,FK_Propiedad,PagoTotalNoIntereses,FechaLimite) SELECT r.ID,r.FK_Propiedad,r.PagoTotalNoIntereses,r.FechaLimite FROM Recibo r WHERE r.TotalPagado = 0 AND r.FechaLimite < @Fecha
                --SELECT * FROM @Recibos
                DECLARE @RecibosId int = 0
                WHILE(1 = 1)
                    BEGIN
                        SELECT @RecibosId = MIN(ID)FROM @Recibos WHERE ID > @RecibosId
                        IF @RecibosId IS NULL BREAK
                            BEGIN
                            -- Monto a Cobrar x (tasa de interese moratorio/360) x cantidad de días de atraso.
                            --Obtener FK_Propiedad
                            SELECT @PropiedadID = FK_Propiedad FROM @Recibos WHERE ID = @RecibosId
                            --Obtener el IDMunipal
                            SELECT @MuniID = p.FK_Municipalidad FROM Propiedad p WHERE p.ID = @PropiedadID
                            SELECT @TasaInteres = TasaInteresMorosidad FROM Municipalidad WHERE ID = @MuniID
                            --Obtener diferencia de dias
                            SELECT @FechaLimite = r.FechaLimite FROM @Recibos r WHERE r.ID = @RecibosId
                            SELECT @MontoTotal = re.PagoTotalNoIntereses FROM Recibo re WHERE ID = @RecibosID

                            SELECT @DiasRetraso = DATEDIFF(DAY,@FechaLimite,@Fecha)
                            SET @MontoInteresMoratorio = @MontoTotal*(@TasaInteres/360)* @DiasRetraso


                            UPDATE Recibo SET InteresMoratorio = @MontoInteresMoratorio WHERE ID = @RecibosID

                            

                        END
                    END

        end
        commit tran
        return 1 --successful
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            return 0 --failed
    END CATCH
END
GO


Código :


--|||StoreProcedures|||--

--Eliminar los datos de las tablas
CREATE PROCEDURE [dbo].[VaciarTablas]
AS
BEGIN
    EXEC sp_MSForEachTable 'DISABLE TRIGGER ALL ON ?';
    EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL';
    EXEC sp_MSForEachTable 'DELETE FROM ?';
    EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL';
    EXEC sp_MSForEachTable 'ENABLE TRIGGER ALL ON ?';
    EXEC sp_MSforeachtable @command1 = 'DBCC CHECKIDENT(''?'', RESEED, 0)'
END
GO
--Leer Abonados del XML
CREATE PROCEDURE [dbo].[readXML_Abonados]
AS
BEGIN
    DECLARE @xml xml
    DECLARE @hdoc int
    BEGIN TRY
        SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data-P2\Abonados.xml', SINGLE_BLOB) as Abonados(roow)
        if (@xml IS NOT NULL)
        begin
            begin tran
                EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml

                SELECT * INTO #tmp_Abonados FROM OPENXML(@hDoc, 'XML/Abonado/dbo.Abonado')
                WITH(
                    Nombre [nvarchar](50),
                    Identificacion int
                    
                )
                begin
                    INSERT INTO Abonado(Nombre,Identificacion) SELECT Nombre,Identificacion FROM #tmp_Abonados          
                end
                DROP TABLE #tmp_Abonados
        end
        commit tran
        return 1 --successful
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            return 0 --failed
    END CATCH
END

GO
--Leer Tipos de servicio del XML
CREATE PROCEDURE [dbo].[readXML_TipoServicio]
AS
BEGIN
    DECLARE @xml xml
    DECLARE @hdoc int
    BEGIN TRY
        SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data-P2\Tiposervicio.xml', SINGLE_BLOB) as TipoServicio(roow)
        if (@xml IS NOT NULL)
        begin
            begin tran
                EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml

                SELECT * INTO #tmp_TipoServicio FROM OPENXML(@hDoc,'XML/TipoServicio/dbo.TipoServicio')
                WITH(
                    Nombre [nvarchar](50),
Valor float,
Variable int
                    
                )
                begin
                    INSERT INTO TipoServicio(Nombre,Valor,Variante) SELECT Nombre,Valor,Variable FROM #tmp_TipoServicio         
                end
                DROP TABLE #tmp_TipoServicio
        end
        commit tran
        return 1 --successful
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            SELECT ERROR_MESSAGE() --MOSTRAR EL ERROR
            return 0 --failed
    END CATCH
END
GO
--Leer Municipalidades del XML
CREATE PROCEDURE [dbo].[readXML_Municipalidades]
AS
BEGIN
    DECLARE @xml xml
    DECLARE @hdoc int
    BEGIN TRY
        SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data-P2\Municipalidades.xml', SINGLE_BLOB) as Municipalidades(roow)
        if (@xml IS NOT NULL)
        begin
            begin tran
                EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml

                SELECT * INTO #tmp_Municipalidades FROM OPENXML(@hDoc,'XML/Municipalidades/dbo.Municipalidades')
                WITH(
                    Nombre [nvarchar](50),
DiaEmite int,
DiaLimite int,
TasaInteres float,
ValorMAgua float
                )
                begin
                    INSERT INTO Municipalidad(Nombre,DiaEmite,DiaLimite,TasaInteresMorosidad,ValorMCubicoAgua)
                    SELECT Nombre,DiaEmite,DiaLimite,TasaInteres,ValorMAgua FROM #tmp_Municipalidades
                end
                DROP TABLE #tmp_Municipalidades
        end
        commit tran
        return 1 --successful
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            SELECT ERROR_MESSAGE() --MOSTRAR EL ERROR
            return 0 --failed
    END CATCH
END
GO
--Leer Propiedades del XML
CREATE PROCEDURE [dbo].[readXML_Propiedades]
AS
BEGIN
    DECLARE @xml xml
    DECLARE @hdoc int
    BEGIN TRY
        SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data-P2\Propiedades.xml', SINGLE_BLOB) as Propiedades(roow)
        if (@xml IS NOT NULL)
        begin
            begin tran
                EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml

                SELECT * INTO #tmp_Propiedades FROM OPENXML(@hDoc,'XML/Propiedades/dbo.Propiedades')
                WITH(
                    NumeroFinca int,
IdMunicipalidad int,
IdAbonado int,
Descripcion nvarchar(100),
Valor money,
CodigoPostal int
                )
                begin
                    INSERT INTO Propiedad(NumeroFinca,FK_Municipalidad,FK_Abonado,Descripcion,Valor,CodPostal)
                    SELECT NumeroFinca,IdMunicipalidad,IdAbonado,Descripcion,Valor,CodigoPostal FROM #tmp_Propiedades
                end
                DROP TABLE #tmp_Propiedades
        end
        commit tran
        return 1 --successful
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            SELECT ERROR_MESSAGE() --MOSTRAR EL ERROR
            return 0 --failed
    END CATCH
END
GO
--Leer Servicios por propiedad del XML
CREATE PROCEDURE [dbo].[readXML_ServiciosXpropiedad]
AS
BEGIN
    DECLARE @xml xml
    DECLARE @hdoc int
    BEGIN TRY
        SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data-P2\Servicioxpropiedad.xml', SINGLE_BLOB) as ServiciosXpropiedad(roow)
        if (@xml IS NOT NULL)
        begin
            begin tran
                EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml

                SELECT * INTO #tmp_ServiciosXpropiedad FROM OPENXML(@hDoc,'XML/ServicioXPropiedad/dbo.ServicioXPropiedad')
                WITH(
                    NumeroFinca int,
IDServicio int,
FechaContratacion Date
                )
                begin
                    
                    INSERT INTO ServicioXPropiedad (FK_Propiedad,FK_Servicio,FechaContratacionServicio)
                    SELECT NumeroFinca,IDServicio,FechaContratacion FROM #tmp_ServiciosXpropiedad
                end
                DROP TABLE #tmp_ServiciosXpropiedad
        end
        commit tran
        return 1 --successful
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            SELECT ERROR_MESSAGE() --MOSTRAR EL ERROR
            return 0 --failed
    END CATCH
END
GO
---Lectura de consumo de agua
CREATE PROCEDURE readXML_Lectura @Fecha date
AS
BEGIN
    DECLARE @xml xml
    DECLARE @hdoc int
    DECLARE @ID int
    BEGIN TRY
        SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data-P2\ConsumoAgua.xml', SINGLE_BLOB) as ConsumoAgua(roow)
        if (@xml IS NOT NULL)
        begin
            begin tran
                EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml

                SELECT * INTO #tmp_ConsumoAgua FROM OPENXML(@hDoc, 'XML/ConsumoAgua/dbo.ConsumoAgua')
                WITH(
                    NumeroFinca int,
                    FechaLectura date,
                    QM3 int
                    
                )WHERE FechaLectura = @Fecha
                begin

                    INSERT INTO ConsumoAgua(FK_Propiedad,FechaLectura,Q) SELECT dbo.Propiedad.ID,#tmp_ConsumoAgua.FechaLectura,#tmp_ConsumoAgua.QM3
                    FROM #tmp_ConsumoAgua INNER JOIN
                                 dbo.Propiedad ON #tmp_ConsumoAgua.NumeroFinca = dbo.Propiedad.NumeroFinca                    
                end
                DROP TABLE #tmp_ConsumoAgua
        end
        commit tran
        return 1 --successful
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            return 0 --failed
    END CATCH
END
GO
------Generar recibos
CREATE PROCEDURE [dbo].[generar_recibos] @IDMuni int , @Fecha date
AS
BEGIN
    DECLARE @Propiedades table (ID int,NumeroFinca int)
    DECLARE @Servicios table (ID int, FKServicio int, Nombre VARCHAR(30),valor FLOAT)
    DECLARE @DAY int
    DECLARE @MONTH int
    DECLARE @YEAR int
   DECLARE @FechaLimite date
    DECLARE @MontoTotal Money = 0
    DECLARE @ConsumoDeAgua float
    DECLARE @ValorAgua float
    DECLARE @FacturaID int
    BEGIN TRY
        begin tran
        --Calcular la fecha limite de pago
        SELECT @DAY = m.DiaLimite FROM Municipalidad m WHERE m.ID = @IDMuni 
        SELECT @YEAR = DATEPART ( YEAR , @Fecha)
        SELECT @MONTH = DATEPART ( MONTH , @Fecha)
        SELECT @FechaLimite = dateadd(mm, (@YEAR - 1900) * 12 + @MONTH - 1 , @DAY - 1)
    INSERT INTO @Propiedades(ID,NumeroFinca) SELECT p.ID,p.NumeroFinca FROM Propiedad p WHERE p.FK_Municipalidad = @IDMuni
    DECLARE @PropiedadId int = 0
    WHILE(1 = 1)
        BEGIN
            SELECT @PropiedadId = MIN(ID)FROM @Propiedades WHERE ID > @PropiedadId

            IF @PropiedadId IS NULL BREAK
                BEGIN   
                 --Calcular monto propiedades
                    --Llenar una tabla con lo servicios por cada propiedad.
                    INSERT INTO @Servicios(ID,FKServicio, Nombre ,valor) SELECT dbo.TipoServicio.ID,dbo.ServicioXPropiedad.FK_Servicio, dbo.TipoServicio.Nombre, dbo.TipoServicio.Valor
                    FROM dbo.ServicioXPropiedad INNER JOIN dbo.TipoServicio ON dbo.ServicioXPropiedad.FK_Servicio = dbo.TipoServicio.ID WHERE FK_Propiedad = @PropiedadId

                    --CREAR EL NUEVO RECIBO
                    INSERT INTO Recibo (FK_Propiedad,FechaEmision,PagoTotalNoIntereses,InteresMoratorio,TotalPagado,FechaLimite,FechaPagado)
                    VALUES ( @PropiedadId,@Fecha,0,0,0,@FechaLimite,NULL)

                    --Asigno el ID de factura
                    SELECT @FacturaID = MAX(ID) FROM Recibo
                    

                    --Recorremos cada uno de los servicios de la propiedad
                    DECLARE @ServiciosId int = 0
                        WHILE(1 = 1)
                        BEGIN
                            SELECT @ServiciosId = MIN(ID)FROM @Servicios WHERE ID > @ServiciosId
                            IF @ServiciosId IS NULL BREAK
                                BEGIN
                                    DECLARE @Monto float = 0
                                    DECLARE @IDServicio int;
                                    SELECT @IDServicio = ID FROM @Servicios WHERE ID = @ServiciosId
                                    IF(@IDServicio=1)
                                    BEGIN
                                         --Sumar el valor del agua multiplicado por el precio de la ultima lectura
                                         SELECT @ValorAgua = ts.Valor FROM @Servicios ts WHERE ts.ID = @IDServicio
                                         SELECT TOP 1 @ConsumoDeAgua = Q FROM ConsumoAgua ca WHERE ca.FK_Propiedad = @PropiedadId ORDER BY ca.FechaLectura DESC
                                         SET @MontoTotal = @MontoTotal+CAST(@ConsumoDeAgua*@ValorAgua AS MONEY)
                                         --INSERTAR UNA LINEA
                                         INSERT INTO Linea (FK_Propiedad,FK_Recibo,FK_TipoServicio,Monto,NumeroLinea) VALUES (@PropiedadId,@FacturaID,@ServiciosId,CAST(@ConsumoDeAgua*@ValorAgua AS MONEY),@IDServicio);
                                    END
                                    ELSE
                                    BEGIN
                                        --Sumar el valor de todos los servicios de una propiedad
                                        SELECT @Monto = s.valor FROM @Servicios s WHERE s.ID = @IDServicio;
                                        SET @MontoTotal = @MontoTotal+CAST(@Monto AS MONEY)
                                        --INSERTAR UNA LINEA
                                        INSERT INTO Linea (FK_Propiedad,FK_Recibo,FK_TipoServicio,Monto,NumeroLinea) VALUES (@PropiedadId,@FacturaID,@ServiciosId,CAST(@Monto AS MONEY),@IDServicio);
                                    END
                                END
                         END

                    
                    UPDATE Recibo SET PagoTotalNoIntereses = @MontoTotal WHERE ID = @FacturaID
                END
                DELETE FROM @Servicios
                SET @MontoTotal = 0
                
        END
    commit tran
            return 1
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            SELECT ERROR_MESSAGE() --MOSTRAR EL ERROR
            return 0 --failed
    END CATCH
END
GO


--Calculo de interes Moratorio
CREATE PROCEDURE [dbo].[CalculoInteresMoratorio] @Fecha Date
AS
BEGIN
    DECLARE @TasaInteres float
    DECLARE @DiasRetraso int
    DECLARE @MuniID int
    DECLARE @PropiedadID int
    DECLARE @FechaLimite date
    DECLARE @MontoTotal Money
    DECLARE @MontoInteresMoratorio float
    DECLARE @Recibos table (ID int,FK_Propiedad int,PagoTotalNoIntereses money,FechaLimite datetime)
    BEGIN TRY
        begin
            begin tran
                --DO HERE
                INSERT INTO @Recibos(ID,FK_Propiedad,PagoTotalNoIntereses,FechaLimite) SELECT r.ID,r.FK_Propiedad,r.PagoTotalNoIntereses,r.FechaLimite FROM Recibo r WHERE r.TotalPagado = 0 AND r.FechaLimite < @Fecha
                --SELECT * FROM @Recibos
                DECLARE @RecibosId int = 0
                WHILE(1 = 1)
                    BEGIN
                        SELECT @RecibosId = MIN(ID)FROM @Recibos WHERE ID > @RecibosId
                        IF @RecibosId IS NULL BREAK
                            BEGIN
                            -- Monto a Cobrar x (tasa de interese moratorio/360) x cantidad de días de atraso.
                            --Obtener FK_Propiedad
                            SELECT @PropiedadID = FK_Propiedad FROM @Recibos WHERE ID = @RecibosId
                            --Obtener el IDMunipal
                            SELECT @MuniID = p.FK_Municipalidad FROM Propiedad p WHERE p.ID = @PropiedadID
                            SELECT @TasaInteres = TasaInteresMorosidad FROM Municipalidad WHERE ID = @MuniID
                            --Obtener diferencia de dias
                            SELECT @FechaLimite = r.FechaLimite FROM @Recibos r WHERE r.ID = @RecibosId
                            SELECT @MontoTotal = re.PagoTotalNoIntereses FROM Recibo re WHERE ID = @RecibosID

                            SELECT @DiasRetraso = DATEDIFF(DAY,@FechaLimite,@Fecha)
                            SET @MontoInteresMoratorio = @MontoTotal*(@TasaInteres/360)* @DiasRetraso


                            UPDATE Recibo SET InteresMoratorio = @MontoInteresMoratorio WHERE ID = @RecibosID

                            

                        END
                    END

        end
        commit tran
        return 1 --successful
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            return 0 --failed
    END CATCH
END
GO

--Lectura de pagos
CREATE PROCEDURE [dbo].[readXML_Pagos] @Fecha date
AS
BEGIN
    DECLARE @Pagos table (ID int identity(1,1),NumeroFinca int,FechaPago date)
    DECLARE @xml xml
    DECLARE @hdoc int
    DECLARE @ID int
    DECLARE @MontoInteres Money
    DECLARE @MontoNoInteres Money
    DECLARE @MontoTotal Money
    DECLARE @PropiedadID int
    DECLARE @ReciboID int
    BEGIN TRY
        SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data-P2\Pagos.xml',
SINGLE_BLOB) as Pagos(roow)
        if (@xml IS NOT NULL)
        begin
            begin tran
                EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml

                SELECT * INTO #tmp_Pagos FROM OPENXML(@hDoc, 'XML/Pagos/pago')
                WITH(
                    NumeroFinca int,
                    FechaPago date
                    
                )WHERE FechaPago = @Fecha
                begin
                    DECLARE @PractitionerId int = 0
                    WHILE(1 = 1)
                    BEGIN
                        SELECT @PractitionerId = MIN(NumeroFinca)FROM #tmp_Pagos WHERE NumeroFinca > @PractitionerId
                        IF @PractitionerId IS NULL BREAK
                            BEGIN
                                SELECT @PropiedadID = f.ID FROM Propiedad f WHERE f.NumeroFinca = @PractitionerId
                                --SELECT @PractitionerId,@PropiedadID
                                SELECT TOP 1 @ReciboID = re.ID FROM Recibo re WHERE re.FK_Propiedad = @PropiedadID ORDER BY re.FechaLimite DESC
                                SELECT @MontoNoInteres = re1.PagoTotalNoIntereses FROM Recibo re1 WHERE re1.ID = @ReciboID
                                SELECT @MontoInteres = re2.InteresMoratorio FROM Recibo re2 WHERE re2.ID = @ReciboID
                                --SELECT @MontoInteres,@MontoNoInteres,@MontoInteres+@MontoNoInteres
                                

                                UPDATE Recibo SET TotalPagado = (@MontoNoInteres+@MontoInteres),FechaPagado = @Fecha WHERE Recibo.ID = @ReciboID
                            END
                    END                       
                end
                DROP TABLE #tmp_Pagos
        end
        commit tran
        return 1 --successful
    END TRY
    BEGIN CATCH
            IF @@TRANCOUNT > 0 ROLLBACK;
            return 0 --failed
    END CATCH
END




Problemas encontrados: 
-Para la generación de recibos , asume que la lectura de consumo de agua se realiza de manera mensual por lo que el calculo del monto a pagar es producto de la cantidad de consumo de agua de la ultima lectura presente , sin embargo los xmls no tienen lecturas de agua para todo el año así que en un punto la lectura de agua es la misma así que el valor del recibo es igual al del mes anterior  , se considera esto como un error mas de la generación de datos simulados ya que los compañeros no toman no generan datos de manera homogénea , así que se aplica navaja de okcan para este caso.


En el requerimiento se solicita un numero de identificación para el acceso sin embargo este no es proveído por los xmls así q se toma la decisión de agregarlo a los xmls de Abonados para que de esta forma se puedan identicar los usuarios a nivel de capa lógica 
XML: 

<XML>
    <Abonado>
        <dbo.Abonado Nombre="Latonya Joyce" Identificacion = "1000" />
        <dbo.Abonado Nombre="Carlton Cardenas" Identificacion = "1001" />
        <dbo.Abonado Nombre="Charity Dickerson" Identificacion = "1002" />
        <dbo.Abonado Nombre="Jacquelyn Banks" Identificacion = "1003" />
        <dbo.Abonado Nombre="Mindy Garcia" Identificacion = "1004" />
        <dbo.Abonado Nombre="Sonia Chang" Identificacion = "1005" />
        <dbo.Abonado Nombre="Damon Bates" Identificacion = "1006" />
        <dbo.Abonado Nombre="Evan Blair" Identificacion = "1007" />
        <dbo.Abonado Nombre="Brenda Zuniga" Identificacion = "1008" />
        <dbo.Abonado Nombre="Benny Macias" Identificacion = "1009" />
        <dbo.Abonado Nombre="Leanne Patton" Identificacion = "1010" />
        <dbo.Abonado Nombre="Leo Brown" Identificacion = "1011" />
        <dbo.Abonado Nombre="Tabatha Rodriguez" Identificacion = "1012" />
        <dbo.Abonado Nombre="Kelly Wood" Identificacion = "1013" />
        <dbo.Abonado Nombre="Ericka Cruz" Identificacion = "1014" />
        <dbo.Abonado Nombre="Jayson Stevens" Identificacion = "1015" />
        <dbo.Abonado Nombre="Marco Lane" Identificacion = "1016" />
        <dbo.Abonado Nombre="Vickie Curtis" Identificacion = "1017" />
        <dbo.Abonado Nombre="Guillermo Wong" Identificacion = "1018" />
        <dbo.Abonado Nombre="Alice Andrews" Identificacion = "1019" />
        <dbo.Abonado Nombre="Roberto Davila" Identificacion = "1020" />
        <dbo.Abonado Nombre="Lillian Kirk" Identificacion = "1021" />
        <dbo.Abonado Nombre="Joanne Henderson" Identificacion = "1022" />
        <dbo.Abonado Nombre="Debbie Brooks" Identificacion = "1023" />
        <dbo.Abonado Nombre="Warren Mayer" Identificacion = "1024" />
        <dbo.Abonado Nombre="Shawn Arnold" Identificacion = "1025" />
        <dbo.Abonado Nombre="Tom Mc Intyre" Identificacion = "1026" />
        <dbo.Abonado Nombre="Jose Horne" Identificacion = "1027" />
        <dbo.Abonado Nombre="Wade Mullins" Identificacion = "1028" />
        <dbo.Abonado Nombre="Randy Price" Identificacion = "1029" />
        <dbo.Abonado Nombre="Larry Douglas" Identificacion = "1030" />
        <dbo.Abonado Nombre="Grant Ritter" Identificacion = "1031" />
        <dbo.Abonado Nombre="Wendi Glenn" Identificacion = "1032" />
        <dbo.Abonado Nombre="Tamiko Guerra" Identificacion = "1033" />
        <dbo.Abonado Nombre="Darla Valentine" Identificacion = "1034" />
        <dbo.Abonado Nombre="Vickie Shannon" Identificacion = "1035" />
        <dbo.Abonado Nombre="Nora Dudley" Identificacion = "1036" />
        <dbo.Abonado Nombre="Josephine Dalton" Identificacion = "1037" />
        <dbo.Abonado Nombre="Janet Jensen" Identificacion = "1038" />
        <dbo.Abonado Nombre="Kurt Forbes" Identificacion = "1039" />
    </Abonado>
</XML>



No hay comentarios.:

Publicar un comentario