0% found this document useful (0 votes)
59 views

Reporte Abap Envia - Email

This document contains code for generating a report of materials by client. It retrieves client, material, and stock data from various tables and structures the data into internal tables for output and email sending. The code performs lookups to get client email addresses, structures the report data, and contains forms for generating a PDF file and sending it via email.

Uploaded by

John Palacios
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
59 views

Reporte Abap Envia - Email

This document contains code for generating a report of materials by client. It retrieves client, material, and stock data from various tables and structures the data into internal tables for output and email sending. The code performs lookups to get client email addresses, structures the report data, and contains forms for generating a PDF file and sending it via email.

Uploaded by

John Palacios
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 9

REPORT ZD3_EST_CLIENTE NO STANDARD PAGE HEADING LINE-SIZE 160.

*
* Cliente Sinimplast
*Desci��o : Relatorio de material por cliente
*com arquivo sendo enviado por email
*Consultor : Adriano
*===================================================

TABLES : kna1, knmt, itcpo, sodocchgi1.

DATA : BEGIN OF t_kna1 OCCURS 0,


kunnr LIKE kna1-kunnr,
adrnr LIKE kna1-adrnr,
katr1 LIKE kna1-katr1,
END OF t_kna1.

DATA: BEGIN OF t_knmt OCCURS 0,


kunnr LIKE knmt-kunnr,
matnr LIKE knmt-matnr,
kdmat LIKE knmt-kdmat,
meins LIKE knmt-meins,
END OF t_knmt.

DATA: BEGIN OF t_mard OCCURS 0,


matnr LIKE mard-matnr,
labst LIKE mard-labst,
END OF t_mard.

DATA: BEGIN OF t_saida OCCURS 0,


kunnr LIKE kna1-kunnr,
kdmat LIKE knmt-kdmat,
labst LIKE mard-labst,
meins LIKE knmt-meins,
adrnr(50), "like adr6-smtp_addr,
END OF t_saida.

DATA: BEGIN OF t_adr6 OCCURS 0,


addrnumber LIKE adr6-addrnumber,
smtp_addr LIKE adr6-smtp_addr,
END OF t_adr6.

data: zdata type sy-datum.


data: wotnr type p.
data: e_date type sy-datum.
data: LAST_DAY_OF_MONTH type sy-datum.
zdata = sy-datum.

data : opcao(1) type c.

***DAta : begin of t_linha occurs 0,


*** linha(255),
***end of t_linha.

** Dados que podem ser modificados em um objeto


DATA t_sodocchgi1 LIKE sodocchgi1 OCCURS 0 WITH HEADER LINE.

DATA t_linha LIKE solisti1 OCCURS 0 WITH HEADER LINE.


DATA: t_pdf LIKE tline OCCURS 0 WITH HEADER LINE,
t_otf LIKE itcoo OCCURS 0 WITH HEADER LINE.

DATA: wl_cancel,
wl_length LIKE sood-objlen.

DATA: v_filename LIKE rlgrap-filename.


DATA: v_smtp_addr LIKE adr6-smtp_addr,
v_arq LIKE sofolenti1-object_id.

DATA: texto LIKE solisti1 OCCURS 0 WITH HEADER LINE,


receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
cabecalho LIKE solisti1 OCCURS 0 WITH HEADER LINE.

DATA: v_tipo TYPE c.

DATA v_kunnr LIKE kna1-kunnr.

*SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002.


*PARAMETER p_linhad RADIOBUTTON GROUP li.
*PARAMETER p_linhas RADIOBUTTON GROUP li.
*PARAMETER p_linham RADIOBUTTON GROUP li.
*SELECTION-SCREEN END OF BLOCK b1.

*parameter p_tipo for knmt-kdmat like radio.

START-OF-SELECTION.
perform retornadata.
* perform rotatoria.
* PERFORM busca_cliente.
* PERFORM imprime.
* PERFORM zf_gerar_pdf.
*** PERFORM zf_enviar_pdf.

*&---------------------------------------------------------------------*
*& Form retornadata
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form retornadata .

call function 'DAY_IN_WEEK'


exporting
DATUM = SY-DATUM
importing
wotnr = WOTNR.

call function 'RP_LAST_DAY_OF_MONTHS'


EXPORTING
DAY_IN = SY-DATUM
IMPORTING
LAST_DAY_OF_MONTH = LAST_DAY_OF_MONTH.

IF wotnr = 1.
opcao = 'S'.
perform rotatoria.
endif.
if sy-datum eq LAST_DAY_OF_MONTH.
opcao = 'M'.
perform rotatoria.
endif.

opcao = 'D'.
perform rotatoria.

endform. " retornadata

*&---------------------------------------------------------------------*
*& Form busca_cliente
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM busca_cliente.
*
* IF p_linhad <> ''.
* v_tipo = 'D'.
* ELSEIF p_linhas <> ''.
* v_tipo = 'S'.
* ELSEIF p_linham <> ''.
* v_tipo = 'M'.
* ENDIF.

SELECT kunnr adrnr katr1 INTO TABLE t_kna1 FROM kna1


WHERE kunnr <> ''.
DELETE t_kna1 WHERE katr1 <> v_tipo.

IF sy-subrc EQ 0.

SELECT kunnr matnr kdmat meins INTO TABLE t_knmt FROM knmt
FOR ALL ENTRIES IN t_kna1
WHERE kunnr = t_kna1-kunnr.
ENDIF.

IF sy-subrc EQ 0.
SELECT matnr labst INTO TABLE t_mard FROM mard
FOR ALL ENTRIES IN t_knmt
WHERE matnr = t_knmt-matnr.

SORT t_mard BY labst.


COLLECT t_mard.
ENDIF.

SELECT addrnumber smtp_addr INTO TABLE t_adr6 FROM adr6


FOR ALL ENTRIES IN t_kna1
WHERE addrnumber = t_kna1-adrnr.

LOOP AT t_knmt.
CLEAR t_saida.
READ TABLE t_mard WITH KEY matnr = t_knmt-matnr.
IF sy-subrc EQ 0.
t_saida-labst = t_mard-labst.
ENDIF.

READ TABLE t_kna1 WITH KEY kunnr = t_knmt-kunnr.


IF sy-subrc EQ 0.
SELECT SINGLE smtp_addr INTO t_saida-adrnr FROM adr6
WHERE addrnumber = t_kna1-adrnr.
*read table t_adr6 with key addrnumber = t_kna1-adrnr.
*if sy-subrc eq 0.
*t_saida-adrnr = t_adr6-smtp_addr.

*endif.

ENDIF.

t_saida-kunnr = t_knmt-kunnr.
t_saida-kdmat = t_knmt-kdmat.
t_saida-meins = t_knmt-meins.

APPEND t_saida.
ENDLOOP.

*loop at t_kna1.
*read table t_adr6 with key addrnumber = t_kna1-adrnr.
*if sy-subrc eq 0 .
*t_saida-adrnr = t_adr6-smtp_addr.
*endif.
*
*endloop.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form imprime
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM imprime.
FORMAT COLOR COL_HEADING.

WRITE: / text-h01, "Cliente


13 text-h02, "Material
31 text-h03, "Estoque livre
48 text-h04, "Unidade de medida
71 text-h05. " email do cliente

FORMAT COLOR OFF.


ULINE.
SORT t_saida BY kunnr.

LOOP AT t_saida.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.

WRITE:/ t_saida-kunnr,
14 t_saida-kdmat,
25 t_saida-labst,
53 t_saida-meins,
72 t_saida-adrnr.

ENDLOOP.

ENDFORM. " imprime

* CALL FUNCTION 'CLOSE_FORM'


* TABLES
* otfdata = t_otf
* EXCEPTIONS
* unopened = 1.
*
* CALL FUNCTION 'K_KKB_POPUP_RADIO3'
* EXPORTING
* i_title = 'Confirma��o'
* i_text1 = 'Gerar arquivo .PDF?'
* i_text2 = 'Gerar arquivo .PDF e enviar por e-mail?'
* i_text3 = 'N�o gerar arquivo .PDF'
* i_default = '3'
* IMPORTING
* i_result = v_answer
* EXCEPTIONS
* cancel = 1
* OTHERS = 2.
* IF sy-subrc <> 0.
* ENDIF.
*
* CASE v_answer.
* WHEN '1'.
* PERFORM zf_gerar_pdf.
* WHEN '2'.
* PERFORM zf_gerar_pdf.
* PERFORM zf_enviar_pdf.
* ENDCASE.

*&--------------------------------------------------------------------*
*& Form zf_gerar_pdf
*&--------------------------------------------------------------------*
FORM zf_gerar_pdf.

*** CLEAR: itcpo, t_otf, t_pdf. ", v_contra_amostra.


*** REFRESH: t_otf, t_pdf.

*** LOOP AT t_saida.


*** t_linha-line = t_saida.
*** APPEND t_linha.
*** ENDLOOP.
* Cabe�alho
WRITE: 'Cliente' TO t_linha-line(10),
'C�digo' TO t_linha-line+15(35),
'Quant.' TO t_linha-line+87(18),
'Un.' TO t_linha-line+100(03).
APPEND t_linha.

CLEAR t_linha.
APPEND t_linha.

SORT t_saida BY kunnr kdmat.


READ TABLE t_saida INDEX 1.
v_kunnr = t_saida-kunnr.

LOOP AT t_saida.
IF v_kunnr NE t_saida-kunnr.
PERFORM zf_enviar_pdf.
v_kunnr = t_saida-kunnr.
ELSE.
shift t_saida-kdmat right deleting trailing space.
translate t_saida-kdmat using ' 0'.
WRITE:

t_saida-kunnr TO t_linha-line(10),
t_saida-kdmat TO t_linha-line+15(35),
t_saida-labst TO t_linha-line+55(18),
t_saida-meins TO t_linha-line+80(03).

search t_linha-line for '-'.


if sy-subrc = 0.
move: t_linha-line+55(18) to t_linha-line+56(18),
' ' to t_linha-line+55(01).
endif.

APPEND t_linha.

ENDIF.

ENDLOOP.

PERFORM zf_enviar_pdf.

*** MOVE: ' ' TO itcpo-tdpageslct," Sele��o das p�ginas a imprimir


*** 'X' TO itcpo-tdnewid, " Nova Ordem
*** '1' TO itcpo-tdcopies, " N�mero de c�pias
*** 'DEFAULT_PRINTER' TO itcpo-tddest, " Nome da impressora
*** 'X' TO itcpo-tdpreview, " Sem Pr�via da impress�o
*** ' ' TO itcpo-tdcover, " Sem Cover
*** 'X' TO itcpo-tdlifetime, " Perman�ncia em spool
*** 'X' TO itcpo-tdimmed, " Impress�o
*** 'X' TO itcpo-tddelete, " Deletar ap�s
*** 'X' TO itcpo-tdgetotf. " Gerar arquivo OTF

**** Convert OTF format to PDF format


*** CALL FUNCTION 'CONVERT_OTF'
*** EXPORTING
*** format = 'PDF'
*** max_linewidth = 132
*** archive_index = ' '
*** IMPORTING
*** bin_filesize = wl_length
*** TABLES
*** otf = t_otf
*** lines = t_pdf
*** EXCEPTIONS
*** err_max_linewidth = 1
*** err_format = 2
*** err_conv_not_possible = 3
*** OTHERS = 4.

ENDFORM. " zf_gerar_pdf

*&--------------------------------------------------------------------*
*& Form zf_enviar_pdf
*&--------------------------------------------------------------------*
FORM zf_enviar_pdf.

* Busca Endere�o de E-Mail do Respons�vel


DATA: v_uname LIKE sy-uname.
v_uname = sy-uname.

*** SELECT SINGLE b~smtp_addr


*** INTO v_smtp_addr
*** FROM usr21 AS a INNER JOIN adr6 AS b
*** ON a~persnumber EQ b~persnumber AND
*** a~addrnumber EQ b~addrnumber
*** WHERE a~bname EQ v_uname.
***
*** IF sy-subrc = 0.

*** MOVE: v_smtp_addr TO receivers-receiver,


MOVE: t_saida-adrnr TO receivers-receiver,
'U' TO receivers-rec_type.
APPEND receivers.

*** t_sodocchgi1-obj_name = 'Teste e-mail'.


CONCATENATE 'Cliente' v_kunnr
INTO t_sodocchgi1-obj_descr SEPARATED BY space.
APPEND t_sodocchgi1.

CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'


EXPORTING
document_data = t_sodocchgi1
document_type = 'RAW'
put_in_outbox = 'X'
* IMPORTING
* SENT_TO_ALL =
* new_object_id = v_arq
TABLES
* object_header =
object_content = t_linha
* contents_hex =
* OBJECT_PARA =
* OBJECT_PARB =
receivers = receivers
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

CLEAR: t_linha, receivers, t_sodocchgi1.


REFRESH: t_linha, receivers, t_sodocchgi1.

* Cabe�alho
WRITE: 'Cliente' TO t_linha-line(10),
'C�digo' TO t_linha-line+15(35),
'Quant.' TO t_linha-line+55(07),
'Un.' TO t_linha-line+70(03).
APPEND t_linha.

CLEAR t_linha.
APPEND t_linha.

*ENDIF.

ENDFORM. " zf_enviar_pdf


*&---------------------------------------------------------------------*
*& Form rotatoria
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form rotatoria .
**Busca cliente_D=============
if opcao = 'S'.
v_tipo = 'S'.
elseif opcao = 'M'.
v_tipo = 'M'.
elseif opcao = 'D'.
v_tipo = 'D'.

endif.

SELECT kunnr adrnr katr1 INTO TABLE t_kna1 FROM kna1


WHERE kunnr <> ''.
DELETE t_kna1 WHERE katr1 <> v_tipo.

IF sy-subrc EQ 0.
SELECT kunnr matnr kdmat meins INTO TABLE t_knmt FROM knmt
FOR ALL ENTRIES IN t_kna1
WHERE kunnr = t_kna1-kunnr.
ENDIF.

IF sy-subrc EQ 0.
SELECT matnr labst INTO TABLE t_mard FROM mard
FOR ALL ENTRIES IN t_knmt
WHERE matnr = t_knmt-matnr.

SORT t_mard BY labst.


COLLECT t_mard.
ENDIF.

SELECT addrnumber smtp_addr INTO TABLE t_adr6 FROM adr6


FOR ALL ENTRIES IN t_kna1
WHERE addrnumber = t_kna1-adrnr.

LOOP AT t_knmt.
CLEAR t_saida.
READ TABLE t_mard WITH KEY matnr = t_knmt-matnr.
IF sy-subrc EQ 0.
t_saida-labst = t_mard-labst.
ENDIF.

READ TABLE t_kna1 WITH KEY kunnr = t_knmt-kunnr.


IF sy-subrc EQ 0.
SELECT SINGLE smtp_addr INTO t_saida-adrnr FROM adr6
WHERE addrnumber = t_kna1-adrnr.
*read table t_adr6 with key addrnumber = t_kna1-adrnr.
*if sy-subrc eq 0.
*t_saida-adrnr = t_adr6-smtp_addr.

*endif.

ENDIF.

t_saida-kunnr = t_knmt-kunnr.
t_saida-kdmat = t_knmt-kdmat.
t_saida-meins = t_knmt-meins.

APPEND t_saida.
ENDLOOP.
PERFORM zf_gerar_pdf.

endform. " rotatoria

You might also like