You are on page 1of 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