SQL - Envio de correos por vendedor

 
Vista:
sin imagen de perfil
Val: 21
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Envio de correos por vendedor

Publicado por Manuel (12 intervenciones) el 04/09/2019 23:49:35
Buenas tardes a todos,
De que manera puedo enviar correos desde un store procedure para enviar notificaciones a mis vendedores,
ya logre hacer un envío pero solo de manera individual y lo que quiero es que el SP tome como referencia el valor(email) de la tabla y lo envíe solo a ese destinatario

así es como esta mi tabla:

correo Cliente factura vendedor Past01 (31 a 60) Past02 (61 a 90) Over03 (mas 120)
[email protected] cliente1 fact1 vendedor1 $- $- $7,687.86
[email protected] cliente2 fac2 vendedor1 $- $- $24,965.21
[email protected] cliente3 fact2 vendedor1 $- $- $12,376.47
[email protected] cliente4 fac3 vendedor1 $- $- $18,902.33
[email protected] cliente10 fact11 vendedor2 $- $- -$1,618.20
[email protected] cliente11 fact56 vendedor2 $- $- $11,889.44
[email protected] cliente12 fact33 vendedor2 $- $- -$210.34
[email protected] cliente13 fact34 vendedor2 $- $- $9,082.02
[email protected] cliente20 fact66 vendedor3 $4,100.00 $- $-
[email protected] cliente21 fact67 vendedor3 $- $- $9,982.14
[email protected] cliente22 fact68 vendedor3 $- $1,750.00 $-
[email protected] cliente23 fact88 vendedor3 $- $- -$283.04
[email protected] cliente50 fact99 vendedor4 -$2,958.00 $- $-
[email protected] cliente51 fact100 vendedor4 $- $- $16,791.71
[email protected] cliente52 fact101 vendedor4 $- $- $825.60
[email protected] cliente53 fact102 vendedor4 $- $- $18,133.35

espero me puedan ayudar. mi; gracias


email
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 21
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Envio de correos por vendedor

Publicado por Manuel (12 intervenciones) el 05/09/2019 01:24:01
Omiti comentarles que solamente se deben de enviar 4 correos de acuerdo a la tabla anexa.
espero me puedan ayudar por favor.
muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Envio de correos por vendedor

Publicado por Isaias (1921 intervenciones) el 05/09/2019 16:53:18
¿Que notor de base de datos estas ocupando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Envio de correos por vendedor

Publicado por Manuel (12 intervenciones) el 05/09/2019 17:01:14
Buenos dias Isaias
gracias por contestar, estoy usando SQL server 2008 R2 y este es mi script que ejecuto, la verdad es que lo adapte de diferentes ejemplos que vi en la red.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
declare @emailSubject varchar(100),
       @textTitle varchar(100),
       @tableHTML nvarchar(max)
 
select @emailSubject = 'My Test Email',
       @textTitle = 'EmailTable'
 
set @tableHTML = '<html><head><style>' +
   'td {border: solid black 1px;padding-left:5px;padding-right:5px;padding-top:1px;padding-bottom:1px;font-size:11pt;} ' +
   '</style></head><body>' +
   '<div style="margin-top:20px; margin-left:5px; margin-bottom:15px; font-weight:bold; font-size:1.3em; font-family:calibri;">' +
   @textTitle + '</div>' +
   '<div style="margin-left:50px; font-family:Calibri;"><table cellpadding=0 cellspacing=0 border=0>' +
   '<tr bgcolor=#4b6c9e>' +
   '<td align=center><font face="calibri" color=White><b>Cliente</b></font></td>' +    -- Manually type headers
   '<td align=center><font face="calibri" color=White><b>PO</b></font></td>' +     -- Manually type headers
   '<td align=center><font face="calibri" color=White><b>Factura</b></font></td>' +     -- Manually type headers
   '<td align=center><font face="calibri" color=White><b>Moneda</b></font></td>' +     -- Manually type headers
   '<td align=center><font face="calibri" color=White><b>Vencimiento</b></font></td>' +     -- Manually type headers
   '<td align=center><font face="calibri" color=White><b>Fecha Factura</b></font></td>' +     -- Manually type headers
   '<td align=center><font face="calibri" color=White><b>Condiciones</b></font></td>' +     -- Manually type headers
   '<td align=center><font face="calibri" color=White><b>Vendedor</b></font></td>' +     -- Manually type headers
   '<td align=center><font face="calibri" color=White><b>Actual</b></font></td>' +     -- Manually type headers
   '<td align=center><font face="calibri" color=White><b>1 a 30</b></font></td>' +     -- Manually type headers
   '<td align=center><font face="calibri" color=White><b>31 a 60</b></font></td>' +     -- Manually type headers
   '<td align=center><font face="calibri" color=White><b>61 a 90</b></font></td>' +     -- Manually type headers
   '<td align=center><font face="calibri" color=White><b>91 a 120</b></font></td>' +     -- Manually type headers
   '<td align=center><font face="calibri" color=White><b>as de 120</b></font></td></tr>'   -- Manually type headers
 
 
 
declare @body varchar(max)
select @body =
(
   SELECT
	--td = v.EMailAddr,
	td = Rtrim(d.CustID)+' '+Rtrim(c.Name),
	td = SOShipHeader.CustOrdNbr,
	td = d.RefNbr,
	td = d.CuryID,
	td = d.DueDate,
	td = d.DocDate,
	td =  ISNULL(t.Descr, ''),
	td = Rtrim(c.SlsperId)+' '+Rtrim(v.Name),
	--Actual
	td =  CASE WHEN d.DocType IN ('IN','DM','FI','NC','AD')
                    THEN 1
                   ELSE -1
              END * CASE WHEN d.DocType NOT IN ('CM', 'PA', 'PP') AND CONVERT(VarChar(50), GETDATE(), 102) <= d.DueDate
                                  OR d.DocType IN ('CM', 'PA', 'PP') AND (CONVERT(VarChar(50), GETDATE(), 102)<=d.DocDate OR ARSetup.S4Future09=0)
                            THEN d.DocBal
                         ELSE  0
                    END,
    --1 a 30
	--'Past00(1 a 30)' =
	td=CASE WHEN d.DocType IN ('IN','DM','FI','NC','AD')
                       THEN 1
                      ELSE -1
                 END * CASE WHEN DATEDIFF(Day, CASE WHEN d.DocType IN ('CM', 'PA', 'PP')
                                                      THEN d.DocDate
                                                    ELSE d.DueDate
                                               END, CONVERT(VarChar(50), GETDATE(), 102)) <= s.AgeDays00 AND
			         DATEDIFF(Day, CASE WHEN d.DocType IN ('CM', 'PA', 'PP')
                                                      THEN d.DocDate
                                                    ELSE d.DueDate
                                               END, CONVERT(VarChar(50), GETDATE(), 102)) >= 1 AND
                                 (d.DocType NOT IN ('CM', 'PA', 'PP') OR ARSetup.S4Future09=1)
                              THEN d.DocBal
		            ELSE 0 END,
	--31 a 60
	--'Past01 (31 a 60)' =
	td=CASE WHEN d.DocType IN ('IN','DM','FI','NC','AD') THEN 1 ELSE -1 END * CASE
		WHEN DATEDIFF(Day, CASE WHEN d.DocType IN ('CM', 'PA', 'PP') THEN d.DocDate ELSE d.DueDate END, CONVERT(VarChar(50), GETDATE(), 102)) <= s.AgeDays01 AND--menor 60
			DATEDIFF(Day, CASE WHEN d.DocType IN ('CM', 'PA', 'PP') THEN d.DocDate ELSE d.DueDate END, CONVERT(VarChar(50), GETDATE(), 102)) > s.AgeDays00 AND--mayor 30
                        (d.DocType NOT IN ('CM', 'PA', 'PP') OR ARSetup.S4Future09=1) THEN d.DocBal
		ELSE 0 END,
	--61 a 90
	--'Past02 (61 a 90)' =
	td=CASE WHEN d.DocType IN ('IN','DM','FI','NC','AD') THEN 1 ELSE -1 END * CASE
		WHEN DATEDIFF(Day, CASE WHEN d.DocType IN ('CM', 'PA', 'PP') THEN d.DocDate ELSE d.DueDate END, CONVERT(VarChar(50), GETDATE(), 102)) <= s.AgeDays02 AND --menor 90
			DATEDIFF(Day, CASE WHEN d.DocType IN ('CM', 'PA', 'PP') THEN d.DocDate ELSE d.DueDate END, CONVERT(VarChar(50), GETDATE(), 102)) > s.AgeDays01 AND --mayor 60
                        (d.DocType NOT IN ('CM', 'PA', 'PP') OR ARSetup.S4Future09=1) THEN d.DocBal
    --91 a 120
		ELSE 0 END,
	--'Over02 (91 a 120)' =
	td=CASE WHEN d.DocType IN ('IN','DM','FI','NC','AD') THEN 1 ELSE -1 END * CASE
		WHEN DATEDIFF(Day, CASE WHEN d.DocType IN ('CM', 'PA', 'PP') THEN d.DocDate ELSE d.DueDate END, CONVERT(VarChar(50), GETDATE(), 102)) <= 120 AND --menor 120
		DATEDIFF(Day, CASE WHEN d.DocType IN ('CM', 'PA', 'PP') THEN d.DocDate ELSE d.DueDate END, CONVERT(VarChar(50), GETDATE(), 102)) > s.AgeDays02 AND --mayor 90
                (d.DocType NOT IN ('CM', 'PA', 'PP') OR ARSetup.S4Future09=1) THEN d.DocBal
		ELSE 0 END,
	--mas de 120
	--'Over03 (mas 120)' =
	td=CASE WHEN d.DocType IN ('IN','DM','FI','NC','AD') THEN 1 ELSE -1 END * CASE
		WHEN DATEDIFF(Day, CASE WHEN d.DocType IN ('CM', 'PA', 'PP') THEN d.DocDate ELSE d.DueDate END, CONVERT(VarChar(50), GETDATE(), 102)) > 120 AND
                (d.DocType NOT IN ('CM', 'PA', 'PP') OR ARSetup.S4Future09=1) THEN d.DocBal
		ELSE 0 END
	--
 
 
 
 
  FROM  --RptRuntime r INNER JOIN RptCompany y
                            -- ON y.RI_ID=r.RI_ID
                     --INNER JOIN
ARDoc d
left JOIN SOShipHeader ON D.RefNbr=SOShipHeader.InvcNbr
                           --  ON d.CpnyID=y.CpnyID
                     INNER JOIN	AR_Balances b
                             ON b.CustID=d.CustID
                     INNER JOIN Customer c
                             ON c.CustID=d.CustID
					 inner join Salesperson v
							 on v.SlsperId=c.SlsperId
                     INNER JOIN (SELECT StmtCycleID, AgeDays00 = CONVERT(INT,AgeDays00),
                                        AgeDays01 = CONVERT(INT,AgeDays01), AgeDays02 = CONVERT(INT,AgeDays02)
                                   FROM ARStmt) s
                             ON s.StmtCycleID=c.StmtCycleID
                      LEFT JOIN Terms t
                             ON	d.Terms <> '' AND t.TermsID=d.Terms
                     CROSS JOIN ARSetup (NOLOCK)
 WHERE d.Rlsed=1 AND d.DocBal<>0 and d.CustId='00336'
   for XML raw('tr'), elements
)
 
set @body = REPLACE(@body, '<td>', '<td align=center><font face="calibri">')
set @body = REPLACE(@body, '</td>', '</font></td>')
set @body = REPLACE(@body, '_x0020_', space(1))
set @body = Replace(@body, '_x003D_', '=')
set @body = Replace(@body, '<tr><TRRow>0</TRRow>', '<tr bgcolor=#F8F8FD>')
set @body = Replace(@body, '<tr><TRRow>1</TRRow>', '<tr bgcolor=#EEEEF4>')
set @body = Replace(@body, '<TRRow>0</TRRow>', '')
 
set @tableHTML = @tableHTML + @body + '</table></div></body></html>'
 
set @tableHTML = '<div style="color:Black; font-size:11pt; font-family:Calibri; width:100px;">' + @tableHTML + '</div>'
 
exec msdb.dbo.sp_send_dbmail
   @profile_name = 'Mail',
   @recipients = 'usuario@correo.com.mx',
   @body = @tableHTML,
   @subject = @emailSubject,
   @body_format = 'HTML'

otra cosa que noto es que no me aparecen mos montos en formato de moneda $##,###.##

graias y espero me puedn ayudar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Envio de correos por vendedor

Publicado por Isaias (1921 intervenciones) el 06/09/2019 00:32:53
Tu variable @emailSubject, deberia traer la lista de los correos de tus vendedores separados por punto y coma.

En cuanto a los montos (importes), ¿que tipo de dato son en tu base de datos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Envio de correos por vendedor

Publicado por Manuel (12 intervenciones) el 06/09/2019 00:37:35
Gracias Isaias por tu comentario

supongo que la la variable tiene que ser @recipients, pero como lo logo a mi tabla para que envie los correos solo a los propietarios de sus clientes?

como tendria que hacer el join con los correos?
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Envio de correos por vendedor

Publicado por Manuel (12 intervenciones) el 06/09/2019 00:56:04
es decir solo quiero que a cada destinatario (vendedor) les lleguen los registros de sus propios clientes/

muchas gracias y espero me haya explicado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Envio de correos por vendedor

Publicado por Isaias (1921 intervenciones) el 06/09/2019 00:58:48
Con una simple concatenacion


SELECT @RECIPIENTS = @RECIPIENTS + CORREO + ';'
FROM............................
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar