0% encontró este documento útil (0 votos)
113 vistas11 páginas

Pagos

El documento describe cómo crear un proceso automatizado para generar PDFs de pagos desde una base de datos, enviarlos por correo electrónico y actualizar los campos correspondientes. Se explican los pasos para crear procedimientos almacenados, un job y un cronograma para ejecutar el proceso de manera periódica.

Cargado por

reggaecoming
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
113 vistas11 páginas

Pagos

El documento describe cómo crear un proceso automatizado para generar PDFs de pagos desde una base de datos, enviarlos por correo electrónico y actualizar los campos correspondientes. Se explican los pasos para crear procedimientos almacenados, un job y un cronograma para ejecutar el proceso de manera periódica.

Cargado por

reggaecoming
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Buen día Compañeros

El día de hoy les comparto como enviar un PDF del modulo de pagos recibidos
mediante una jobs de SQL Server y varios procedimientos.
Para que esto funcione ya tendrías que haber realizado la configuración del database
mail en sql server.
Y también haber instalado los runtime

32bit

http://downloads.i-theses.com/?task=download_file&fileid=1014&no_html=1

64bit

https://downloads.i-theses.com/component/downloads/?
task=download_file&fileid=1015&no_html=1

También debemos tener los archivos: crexport.exe o CrystalReportsNinja.exe (no


olvides cambiar el doc por el exe)
https://drive.google.com/drive/folders/1IHX6bjKYYJkrqLQlbsIxhjiOYf7lLDHe

Primer paso:
Crear dos campos personalizados, dependiendo del uso, en mi caso realice dos, pero
podría ser que solo se necesite uno. (Con validación de campos (SI, No)(Regular,
Alfanumérico))
El primer campo define que no esta creado el PDF, que en el caso que sea no, el
procedimiento que crea los PDF actuara.
El segundo campo defino que si se va a enviar el PDF, se usara el procedimiento para
enviar por correo.

Segundo Paso:
Crear un Stored que nos va a generar el PDF

USE [MIBASE]
GO
/****** Object: StoredProcedure [dbo].[PAGO_PDF] Script Date:
25/11/2021 02:06:43 p. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[PAGO_PDF]

@DocKey int= NULL--,


--@ObjectId varchar(3) = NULL
--WITH ENCRYPTION
AS
BEGIN
SET NOCOUNT ON;
--*****GENERADOR DE PDF*****
--Se declaran las variables de la tabla de usuario
CS_ENVIOCORREOS
Declare @dOCnUM varchar(10)
Declare @Final varchar(1000)
Declare @Resultado varchar(50)
--Declare @DocKey int
Declare @Parametro2 varchar(10)

-----Convertir DocKey de int a varchar--------


SET @Parametro2=CONVERT(varchar(10), @DocKey)
-----Selecciona el DocNum buscando el
Docentry---------------
SET @dOCnUM = (Select DocNum from ORCT WHERE
DocEntry=@DocKey )
-----Muestra el resulto si se genera el PDF al
final----------
SET @Resultado='EXITO - Si se genero el PDF de la Pago
'+CONVERT(varchar(10), @DocKey)
Begin

--Se juntan todos los


parametros para juntar un solo parametro para CMD
SET @Final = 'D:\SAP\
crexport.exe -U MiUsuario -P MiContraseña -D MIBASE -S SERVIDOR -F
D:\SAP\Pagos\Pagos.rpt -O D:\SAP\Pagos\'+@dOCnUM+'.pdf -E pdf -a
DocKey@:'+@Parametro2

PRINT @Final
--Ejecuta el generador de
PDFs desde CMD----------------
EXEC xp_cmdshell @Final

----Actualiza el campo de
PDF Generado de No a SI se genero--------
update ORCT SET
U_PDFGen='SI' WHERE ORCT.DocEntry=@DocKey
PRINT @Resultado

END
End
Tercer paso creamos otro stored que buscara los pagos que se deben convertir y
enviar por correo:

USE [MiBase]
GO
/****** Object: StoredProcedure [dbo].[CorreoPagos] Script Date:
25/11/2021 02:34:31 p. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[CorreoPagos]


AS
BEGIN
Declare @NoFact as int,@NoFactDoc as int
Declare @cliente as varchar(200)
Declare @Fecha date
Declare @Total as Decimal(20,2)
Declare @contador int
Declare @TotalUSD as varchar(10)
Declare @Correos as varchar(max)
Declare @ListaD as varchar(max)
Declare @CodigoCliente as varchar(40)

DECLARE @Ruta as varchar(500)


DECLARE @RutaPDF as varchar(500)
DECLARE @RFC as varchar(100)
DECLARE @XML as varchar(1000)
DECLARE @PDF as varchar (500)
DECLARE @Cadena as varchar (500)
DECLARE @RUTA2 AS varchar(200)
DECLARE @NoFol as varchar(40)
DeCLARE @DocNum int

SET @contador =(SELECT COUNT(T0.[DocEntry])


FROM [dbo].ORCT T0 INNER JOIN ECM2 T1 ON T0.
[DocEntry] =T1.[SrcObjAbs]
WHERE T1.[SrcObjType] =24 and
T0.U_PDFEnvio='SI' /*and T0.DocNum=@DocEntry*/)
--(SELECT count(T0.[DocEntry]) FROM ORCT T0 WHERE
--T0.U_PDFEnvio='SI' and T0.DocNum=@NoFact) --Busca cuantos
PDF se generaron en la tabla de factura deudores principal
if ISNULL(@contador,0) >0

begin
SET @NoFact =(SELECT MAX(T0.[DocEntry]) FROM ORCT T0 WHERE
T0.U_PDFEnvio='SI' /*and T0.DocNum=@DocEntry*/ ) --14353)
Busca la llave primaria
-------SET @NoFact =(SELECT MAX(T0.[DocEntry]) FROM ORCT T0 WHERE
--------T0.U_PDFEnvio='SI') --14353) Busca la llave primaria
mas reciente que indique que si se debe generar el PDF
--LISTA DE CORREOS
----SET @ListaD =(SELECT T0.[U_Correo]
---- FROM ORCT T0 WHERE T0.
[DocEntry]=@NoFact)--14353)--@NoFact) --Busca los correos con la
llave primaria encontrada en la parte de arriba

exec [PAGO_PDF] @NoFact

SET @NoFactDoc =(SELECT T0.DocNum FROM ORCT T0 WHERE


T0.[DocEntry] = @NoFact)
SET @CodigoCliente = (SELECT T0.[CardCode] FROM ORCT T0 WHERE T0.
[DocEntry]=@NoFact)
SET @cliente = (SELECT T0.[CardName] FROM ORCT T0 WHERE T0.
[DocEntry]=@NoFact)
SET @Fecha = (SELECT T0.[DocDate] FROM ORCT T0 WHERE T0.
[DocEntry]=@NoFact)
--Condicion del Total, si DocTotalFC es igual a 0 slecciona a
DocTotal
SET @Total=(SELECT CASE T1.DocTotalFC WHEN 0 THEN T1.DocTotal ELSE
T1.DocTotalFC END AS 'TOTAL' FROM [dbo].ORCT T1 WHERE T1.
[DocEntry]=@NoFact)
SET @NoFol = (SELECT T0.ReportID FROM ECM2 T0 WHERE T0.
[SrcObjType]=24 AND T0.[SrcObjAbs]=@NoFact)

SET @ListaD =(SELECT T0.[U_ListaDistrib] FROM CRD1 T0 WHERE T0.


[CardCode] =@CodigoCliente and T0.[Address] ='PAGOS')

SET @Correos = @ListaD


DECLARE @Body NVARCHAR(MAX),
@TableHead VARCHAR(max),
@TableTail VARCHAR(max)

set @RUTA2= (select convert(varchar(4),year(t0.DocDate))+'-' +


RIGHT('00' + Ltrim(Rtrim(month(t0.DocDate))),2) +'\'+T0.CardCode+'\
RC\'
from ORCT t0 WHERE t0.DocEntry=@NoFact)
SET @Ruta = (select convert(varchar(249),XmlPath)
+'0010000100\0010000100\'+@RUTA2 from OADM)
SET @Rutapdf = ('D:\SAP\Pagos\' )
SET @RFC = (SELECT TaxIdNum FROM OADM)
SET @XML = (@Ruta + @NoFol + '.xml')
SET @PDF = ('D:\SAP\Pagos\'+convert(varchar(30),@NoFactDoc)
+'.pdf')
SET @Cadena = (@XML + ';' + @PDF)

DECLARE @HTML varchar(8000)


SET @HTML=
/*N'Pago Fiscal Electrónico, enviada desde el
Servidor......'+'..No de Documento Electrónico: '
+@NoFol+'..Folio Interno:..'+convert(varchar(20),
@NoFactDoc)+
'..Nombre del Cliente:.. ' + @cliente +''

declare @table nvarchar(max)

set @table =*/


N'<html>'+
N'<head>'+
N'<style type="text/css">table{border: solid 1px;border-
collapse:collapse;}td{text-align:"center";}.izq{text-
align:left}th{text-align:"center"; background:"#808080";
color:"#ffffff";}</style>'+
N'</head>'+
N'<body>'+
N'<h3><center><u>PAGO FISCAL ENVIANDO DESDE EL
SERVIDOR<u></center></h3>'+
N'<table border="1" align = "center" style="width: 100%">' +
N'<tr>'+
N'<th>Documento Electronico</th>'+
N'<th>Folio Interno </th>'+
N'<th>Cliente</th>'+
N'</tr>'+
N'<tr style="text-align:center;">'+
N'<td>'+' '+@NoFol+' '+'</td>'+
N'<td>'+' '+convert(varchar(20),@NoFactDoc)+' '+'</td>'+
N'<td>'+' '+@cliente+' '+'</td>'+
N'</tr>'+
N'</table>'+
N'<body>'+
N'<html>';
if ISNULL(@contador,0) >0
begin

Declare @asunto varchar(120)


SEt @asunto= ('SIP ENVIO DE PAGOS: '+
convert(varchar(10),@NoFactDoc))

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Notificaciones', -- replace with your
SQL Database Mail Profile
--@body = @Body,
@body = @HTML,
@body_format ='HTML',
@recipients =@ListaD,--'[email protected]',
@copy_recipients =' [email protected]',
--@ListaD,--'[email protected]',--@ListaD,
--'[email protected]',--@Mandar, -- replace with your email address
@subject = @asunto ,
@file_attachments=@Cadena;

update ORCT SET U_PDFEnvio='ENV' WHERE ORCT.DocEntry=@NoFact


end;
end;

END
Cuarto Paso: Crearemos otro Stored el cual crea el ciclo para convertir y enviar todos
los PDF que están pendientes en sistema.

USE [MiBase]
GO
/****** Object: StoredProcedure [dbo].[RepitProcessPagos] Script
Date: 25/11/2021 02:57:55 p. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATEPROCEDURE [dbo].[RepitProcessPagos]
-- Add the parameters for the stored procedure here

AS
BEGIN
Declare @seleccion as nvarchar(20)
Declare @contador as int

Set @seleccion=(SELECT MAX(T0.U_PDFEnvio) FROM ORCT T0 WHERE


T0.U_PDFEnvio='SI')
Set @contador=(SELECT COUNT(T0.U_PDFEnvio) FROM ORCT T0 WHERE
T0.U_PDFEnvio='SI')

While(@contador > 0)
Begin
exec CorreoPagos
set @contador = @contador -1
End

End

Creamos el Job
image704×632 15.9 KB

Vamos a Steps y Damos clic en nuevo


image704×632 16.1 KB

Asignamos un nombre y seleccionamos la base de datos y agregamos el nombre del


procedimiento del ciclo.
image701×629 16.5 KB

Ahora vamos a Schedules


Configuramos la tarea en mi caso la configure para diario a la 13 hrs
image676×589 15.9 KB

Después de eso solo ok y nuestra tarea ya esta creada solo restar iniciarla.
Si tienes alguna duda no olvides contactarme.

También podría gustarte