Vous êtes sur la page 1sur 15

************************************************************************

*** PGM ID : ZMMR931Z


*** DER ID : MM.001
*** M�dulo : MM
*** Transa��o :
*** Descri��o : Relatorio para extrair dados necess�rios que
*** possibilitem � Controladoria da CONTAX atuar nos
*** problemas de cadastro existentes e buscar as
*** devidas solu��es.
*** Autor : Daniel Camacho da Costa
*** Data de Cria��o : 08/05/2007
***---------------------------------------------------------------------
** Hist�rico de Altera��es:
**---------------------------------------------------------------------
** Data | Change | Autor | Descri��o da Altera��o
**---------------------------------------------------------------------
** dd/mm/aaaa | | |
************************************************************************
REPORT zmmr931z MESSAGE-ID zfiint .

*-----------------------------------------------------------------------
* TIPOS STANDARD
*-----------------------------------------------------------------------
TYPE-POOLS:
vrm, "Necess�rio para uso de ALV
slis. "Tipos globais para ALV

************************************************************************
* Tabelas *
************************************************************************
TABLES: mbew, "Avalia��o do material
asmd. "Mestre de servi�o: dados b�sicos
************************************************************************
* Constantes *
************************************************************************
CONSTANTS: c_x TYPE c VALUE 'X', "X
c_pt(02) TYPE c VALUE 'PT', "PT
c_t01(03) TYPE c VALUE 'T01', "T01
c_bloq(4) TYPE c VALUE 'BLOQ', "BLOQ

***ALV
* c_r TYPE c VALUE 'R', "R
c_l TYPE c VALUE 'L', "L
c_a TYPE c VALUE 'A', "A
c_h TYPE c VALUE 'H', "H
c_mask_data(12) TYPE c VALUE '__/__/____', "__/__/____
c_mask_hora(10) TYPE c VALUE '__:__:__', "__:__:
c_t_fser(06) TYPE c VALUE 'T_FSER', "T_FSERV
c_t_fmat(06) TYPE c VALUE 'T_FMAT'. "T_FMAT
************************************************************************
* Tabelas internas *
************************************************************************

***TABELAS PARA O RELATORIO DE MATERIAIS

***Avalia��o do material
DATA: BEGIN OF t_mbew OCCURS 0,
matnr LIKE mbew-matnr, "N� do material
bwkey LIKE mbew-bwkey, "�rea de avalia��o
bwtar LIKE mbew-bwtar, "Tipo de avalia��o
bklas LIKE mbew-bklas, "Classe de avalia��o
END OF t_mbew.

***Textos breves de material


DATA: BEGIN OF t_makt OCCURS 0,
matnr LIKE makt-matnr, "n� do material
maktx LIKE makt-maktx, "Texto breve de material
END OF t_makt.

***TABELAS PARA O RELATORIO DE SERVI�OS

***Mestre de servi�o : dados b�sicos


DATA: BEGIN OF t_asmd OCCURS 0,
asnum LIKE asmd-asnum, "N� de servi�o
bklas LIKE asmd-bklas, "Classe de avalia��o
END OF t_asmd.

***Texto breve servi�o


DATA: BEGIN OF t_asmdt OCCURS 0,
asnum LIKE asmdt-asnum, "N� de servi�o
asktx LIKE asmdt-asktx, "Texto breve servi�o
END OF t_asmdt.

***TABELAS EM COMUM

***Tabela de contas fixas


DATA: BEGIN OF t_t030 OCCURS 0,
ktopl LIKE t030-ktopl, "Plano de contas
ktosl LIKE t030-ktosl, "Chave de opera��o
bwmod LIKE t030-bwmod, "C�digo de agrupamento de avalia��o
komok LIKE t030-komok, "Modifica��o de contas
bklas LIKE t030-bklas, "Classe de avalia��o
konts LIKE t030-konts, "N� conta do Raz�o
END OF t_t030.

***Mestre de contas do Raz�o (plano de contas: denomina��o)


DATA: BEGIN OF t_skat OCCURS 0,
ktopl LIKE skat-ktopl, "Plano de contas
saknr LIKE skat-saknr, "N� conta do Raz�o
txt50 LIKE skat-txt50, "Texto descritivo das contas do Raz�o
END OF t_skat.

***TABELAS FINAIS

***tabela final de materiais


DATA: BEGIN OF t_fmat OCCURS 0,
matnr LIKE mbew-matnr, "N� do material
bwkey LIKE mbew-bwkey, "�rea de avalia��o
bklas LIKE mbew-bklas, "Classe de avalia��o
maktx LIKE makt-maktx, "Texto breve de material
konts LIKE t030-konts, "N� conta do Raz�o
txt50 LIKE skat-txt50, "Texto descritivo das contas do Raz�o
END OF t_fmat.
***tabela final de servi�os
DATA: BEGIN OF t_fser OCCURS 0,
asnum LIKE asmd-asnum, "N� de servi�o
bklas LIKE asmd-bklas, "Classe de avalia��o
asktx LIKE asmdt-asktx, "Texto breve servi�o
konts LIKE t030-konts, "N� conta do Raz�o
txt50 LIKE skat-txt50, "Texto descritivo das contas do Raz�o
END OF t_fser.

***ALV

*** Tabela do alv


DATA: t_arq_itabname TYPE slis_tabname.

*** Tabelas utilizadas no ALV


DATA: t_listheader TYPE slis_t_listheader.

*** Tabela de Sa�da do ALV


DATA: t_arq_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.

***Interface do ALV
data: t_fcode TYPE slis_extab,
t_tab_fcode TYPE slis_t_extab.

************************************************************************
* Vari�veis *
************************************************************************
data:
w_repid like sy-repid, "Nome do Programa
w_listheader type slis_listheader. "Cabe�alho

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

SELECTION-SCREEN SKIP.
SELECTION-SCREEN ULINE.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETERS:
p_matnr RADIOBUTTON GROUP a. "Relatorio de Materias

SELECTION-SCREEN COMMENT 05(30) text-001.


"Relatorio de Materias

SELECTION-SCREEN END OF LINE.


SELECTION-SCREEN SKIP.

SELECT-OPTIONS:
s_matnr FOR mbew-matnr, "n� do material
s_bwkey FOR mbew-bwkey, "area de avalia��o
s_bklas FOR mbew-bklas. "classe de avalia��o

SELECTION-SCREEN SKIP.
SELECTION-SCREEN ULINE.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETERS:
p_asnum RADIOBUTTON GROUP a. "Relatorio de servi�os

SELECTION-SCREEN COMMENT 05(29) text-004. "Relatorio de Materias

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN SKIP.
SELECT-OPTIONS:
s_asnum FOR asmd-asnum, "n� do servi�o
s_bkla FOR asmd-bklas. "classe de avalia��o

SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK b1.

************************************************************************
* EVENTO: AT SELECTION SCREEN *
************************************************************************
AT SELECTION-SCREEN.

IF p_matnr = c_x.
IF s_matnr IS INITIAL.
MESSAGE e020 WITH text-005. "Favor preencher o n� do material
ENDIF.
ELSEIF s_asnum IS INITIAL.
MESSAGE e020 WITH text-006. "Favor preencher o C�digo do servi�o
ENDIF.

*-----------------------------------------------------------------------
* EVENTO: TOP-OF-PAGE
*-----------------------------------------------------------------------
TOP-OF-PAGE.

*** Monta o Cabe�alho do ALV.


PERFORM f_t_top_of_page.

***********************************************************************
* Programa Principal *
************************************************************************
START-OF-SELECTION.

***Limpa as tabelas internas


PERFORM f_limpar.

IF p_matnr IS INITIAL.

***Executa a sele��o para o relat�rio de servi�os


PERFORM f_sel_servico.

***monta a tabela final


PERFORM f_t_servico.

ELSE.
***Executa a sele��o para o relat�rio de materiais
PERFORM f_sel_material.

***monta a tabela final


PERFORM f_t_material.

ENDIF.

*----------------------------------------------------------------------
* evento: end-of-selection
*----------------------------------------------------------------------
END-OF-SELECTION.

IF p_matnr IS INITIAL.

IF t_fser[] IS INITIAL.
STOP.
ENDIF.

ELSE.

IF t_fmat[] IS INITIAL.
STOP.
ENDIF.

ENDIF.
***cria a fieldcat
PERFORM f_cria_fieldcat.

*** Modifica o cabe�alho de acordo com o Usuario


PERFORM f_modifica_fieldcat.

*** Executa a chamada do Cabe�alho e da Estrutura ALV


PERFORM f_executa_alv. " Imprime os dados Relat�rio.

FREE: t_mbew,
t_makt,
t_asmd,
t_asmdt,
t_t030,
t_skat,
t_fser,
t_fmat.

************************************************************************
* Sub-rotinas *
************************************************************************

*&---------------------------------------------------------------------*
*& Form f_limpar
*&---------------------------------------------------------------------*
* limpa as tabelas
*----------------------------------------------------------------------*
FORM f_limpar .

CLEAR: t_mbew,
t_makt,
t_asmd,
t_asmdt,
t_t030,
t_skat,
t_fser,
t_fmat.

REFRESH: t_mbew,
t_makt,
t_asmd,
t_asmdt,
t_t030,
t_skat,
t_fser,
t_fmat.

ENDFORM. " f_limpar


*&---------------------------------------------------------------------*
*& Form f_sel_servico
*&---------------------------------------------------------------------*
* seleciona os dados para o relatorio de servi�os
*----------------------------------------------------------------------*
FORM f_sel_servico .

***seleciona os codigos de servi�o


SELECT asnum bklas
FROM asmd
INTO TABLE t_asmd
WHERE lvorm NE c_x
AND asnum IN s_asnum
AND bklas IN s_bkla.

IF sy-subrc = 0.

DELETE t_asmd WHERE bklas IS INITIAL.

***seleciona os textos referentes aos codigos de servi�o


SELECT asnum asktx
FROM asmdt
INTO TABLE t_asmdt
FOR ALL ENTRIES IN t_asmd
WHERE asnum = t_asmd-asnum
AND spras = c_pt.

***seleciona as contas do raz�o


SELECT ktopl ktosl bwmod komok bklas konts
FROM t030
INTO TABLE t_t030
FOR ALL ENTRIES IN t_asmd
WHERE bklas = t_asmd-bklas
AND ktopl = c_t01.

IF sy-subrc = 0.

DELETE t_t030 WHERE konts < 40000000.


DELETE t_t030 WHERE konts > 49999999.
***seleciona os textos referentes as contas do raz�o
SELECT ktopl saknr txt50
FROM skat
INTO TABLE t_skat
FOR ALL ENTRIES IN t_t030
WHERE saknr = t_t030-konts
AND ktopl = t_t030-ktopl
AND spras = c_pt.

ENDIF.

ELSE.

MESSAGE i020 WITH text-008.


"C�gigo do servi�o ou Classe de avalia��o inv�lido

ENDIF.

ENDFORM. " f_sel_servico


*&---------------------------------------------------------------------*
*& Form f_sel_material
*&---------------------------------------------------------------------*
* seleciona os dados para o relatorio de materiais
*----------------------------------------------------------------------*
FORM f_sel_material .

***seleciona os materiais, centros e classes de avalia��o


SELECT matnr bwkey bwtar bklas
FROM mbew
INTO TABLE t_mbew
WHERE matnr IN s_matnr
AND bwkey IN s_bwkey
AND bklas IN s_bklas
AND lvorm NE c_x.

IF sy-subrc = 0.

DELETE t_mbew WHERE bklas IS INITIAL.

***seleciona os textos de materiais


SELECT matnr maktx
FROM makt
INTO TABLE t_makt
FOR ALL ENTRIES IN t_mbew
WHERE matnr = t_mbew-matnr
AND spras = c_pt.

***seleciona as contas do raz�o


SELECT ktopl ktosl bwmod komok bklas konts
FROM t030
INTO TABLE t_t030
FOR ALL ENTRIES IN t_mbew
WHERE bklas = t_mbew-bklas
AND ktopl = c_t01.

IF sy-subrc = 0.
DELETE t_t030 WHERE konts < 40000000.
DELETE t_t030 WHERE konts > 49999999.

***seleciona os textos referentes as contas do raz�o


SELECT ktopl saknr txt50
FROM skat
INTO TABLE t_skat
FOR ALL ENTRIES IN t_t030
WHERE saknr = t_t030-konts
AND ktopl = t_t030-ktopl
AND spras = c_pt.

ENDIF.

ELSE.

MESSAGE i020 WITH text-009 text-003.


"Numero do material, Centro ou Classe de Avalia��o inv�lidos

ENDIF.

ENDFORM. " f_sel_material

*&---------------------------------------------------------------------*
*& Form f_t_servico
*&---------------------------------------------------------------------*
* Monta a tabela de servi�o
*----------------------------------------------------------------------*
FORM f_t_servico .

***organiza a tabela t_t030 por classe de avalia��o


SORT t_t030 BY bklas.

LOOP AT t_asmd.

***move o numero do servi�o e a classe de avalia��o para atabela final


t_fser-asnum = t_asmd-asnum.
t_fser-bklas = t_asmd-bklas.

***busca a denomina��o do servi�o


READ TABLE t_asmdt WITH KEY asnum = t_asmd-asnum.
IF sy-subrc = 0.

***se a denomina��o for bloqueada ignorar o registro


IF t_asmdt-asktx(4) = c_bloq.

CLEAR: t_asmd,
t_asmdt,
t_fser.
CONTINUE.

ELSE.

t_fser-asktx = t_asmdt-asktx.

ENDIF.
ENDIF.
***busca o n� da conta do raz�o
READ TABLE t_t030 WITH KEY bklas = t_asmd-bklas.

IF sy-subrc = 0.

***prucura mais de uma conta para uma mesma classe de avalia��o


LOOP AT t_t030 FROM sy-tabix.

IF t_t030-bklas = t_asmd-bklas.
t_fser-konts = t_t030-konts.

***busca o texto descritivo


READ TABLE t_skat WITH KEY saknr = t_t030-konts.

IF sy-subrc = 0.
t_fser-txt50 = t_skat-txt50.
ENDIF.

ELSE.
EXIT.
ENDIF.

APPEND t_fser.

ENDLOOP.

ENDIF.
APPEND t_fser.
CLEAR t_fser.
ENDLOOP.

***organiza a tabela final por conta do raz�o


SORT t_fser BY asnum bklas konts.

***apaga os registros iguais


DELETE ADJACENT DUPLICATES FROM t_fser.

ENDFORM. " f_t_servico

*&---------------------------------------------------------------------*
*& Form f_t_material
*&---------------------------------------------------------------------*
* Monta a tabela de material
*----------------------------------------------------------------------*
FORM f_t_material .

SORT t_t030 BY bklas.

LOOP AT t_mbew.

t_fmat-matnr = t_mbew-matnr.
t_fmat-bwkey = t_mbew-bwkey.
t_fmat-bklas = t_mbew-bklas.

READ TABLE t_makt WITH KEY matnr = t_mbew-matnr.

IF sy-subrc = 0.
t_fmat-maktx = t_makt-maktx.

ENDIF.

***busca o n� da conta do raz�o


READ TABLE t_t030 WITH KEY bklas = t_mbew-bklas.

IF sy-subrc = 0.

***prucura mais de uma conta para uma mesma classe de avalia��o


LOOP AT t_t030 FROM sy-tabix.

IF t_t030-bklas = t_mbew-bklas.
t_fmat-konts = t_t030-konts.

***busca o texto descritivo


READ TABLE t_skat WITH KEY saknr = t_t030-konts.

IF sy-subrc = 0.
t_fmat-txt50 = t_skat-txt50.
ENDIF.

ELSE.
EXIT.
ENDIF.

APPEND t_fmat.

ENDLOOP.

ENDIF.
APPEND t_fmat.
CLEAR t_fmat.
ENDLOOP.

***organiza a tabela final por conta do raz�o


SORT t_fmat BY matnr bwkey bklas konts.

DELETE ADJACENT DUPLICATES FROM t_fmat.

ENDFORM. " f_t_material

*&---------------------------------------------------------------------*
*& Form f_t_top_of_page
*&---------------------------------------------------------------------*
* cabe�alho ALV
*----------------------------------------------------------------------*
FORM f_t_top_of_page .

* varialve local.

DATA: l_data(10) TYPE c, "Vari�vel Data


l_hora(08) TYPE c. "Vari�vel Hora

CLEAR: l_data, l_hora.

*** Monta as linhas de cabe�alho


CLEAR t_listheader[].
CLEAR w_listheader.

*** Titulo
CLEAR w_listheader.
w_listheader-typ = c_h.

IF p_matnr IS INITIAL.
w_listheader-info = text-012.

ELSE.
w_listheader-info = text-013.

ENDIF.
APPEND w_listheader TO t_listheader.

*** Data e Hora


w_listheader-typ = c_a.

CONCATENATE sy-datum+6(02)
sy-datum+4(02)
sy-datum(04)
INTO l_data.

WRITE l_data TO l_data USING EDIT MASK c_mask_data. "__.__.____

CONCATENATE text-010 "Data :


l_data
INTO w_listheader-info SEPARATED BY space.

APPEND w_listheader TO t_listheader.

WRITE sy-uzeit TO l_hora USING EDIT MASK c_mask_hora. "__:__:__

CONCATENATE text-011 "Hor�rio:


l_hora
INTO w_listheader-info SEPARATED BY space.

APPEND w_listheader TO t_listheader.

*** Logotipo do relat�rio


CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
* i_logo = c_zembraer1
it_list_commentary = t_listheader.

ENDFORM. " f_t_top_of_page


*&---------------------------------------------------------------------*
*& Form f_cria_fieldcat
*&---------------------------------------------------------------------*
* Cria Fieldcat
*----------------------------------------------------------------------*
FORM f_cria_fieldcat .

****monta o ALV de acordo com o tipo de relatorio


IF p_matnr IS INITIAL.
t_arq_itabname = c_t_fser.
ELSE.
t_arq_itabname = c_t_fmat.
ENDIF.

w_repid = sy-repid.

CLEAR t_arq_fieldcat.
REFRESH t_arq_fieldcat.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'


EXPORTING
i_program_name = w_repid
i_internal_tabname = t_arq_itabname
i_inclname = w_repid
CHANGING
ct_fieldcat = t_arq_fieldcat[].

ENDFORM. " f_cria_fieldcat


*&---------------------------------------------------------------------*
*& Form f_modifica_fieldcat
*&---------------------------------------------------------------------*
* Modifica Fieldcat
*----------------------------------------------------------------------*
FORM f_modifica_fieldcat .

LOOP AT t_arq_fieldcat.

CLEAR:
t_arq_fieldcat-key,
t_arq_fieldcat-seltext_s,
t_arq_fieldcat-seltext_m,
t_arq_fieldcat-seltext_l,
t_arq_fieldcat-ref_fieldname,
t_arq_fieldcat-ref_tabname.

****monta o ALV de acordo com o tipo de relatorio


IF p_matnr IS INITIAL.

CASE t_arq_fieldcat-fieldname.

WHEN 'ASNUM'.
t_arq_fieldcat-just = c_l.
t_arq_fieldcat-col_pos = 1.
t_arq_fieldcat-reptext_ddic = text-014. "C�digo do Servi�o
t_arq_fieldcat-outputlen = 20. "tamanho

WHEN 'ASKTX'.
t_arq_fieldcat-just = c_l.
t_arq_fieldcat-col_pos = 2.
t_arq_fieldcat-reptext_ddic = text-015.
"Texto Breve do Servi�o
t_arq_fieldcat-outputlen = 40. "tamanho

WHEN 'BKLAS'.
t_arq_fieldcat-just = c_l.
t_arq_fieldcat-col_pos = 3.
t_arq_fieldcat-reptext_ddic = text-016. "Classe de Avalia��o
t_arq_fieldcat-outputlen = 19. "tamanho
WHEN 'KONTS'.
t_arq_fieldcat-just = c_l.
t_arq_fieldcat-col_pos = 4.
t_arq_fieldcat-reptext_ddic = text-017. "Conta do Raz�o
t_arq_fieldcat-outputlen = 14. "tamanho

WHEN 'TXT50'.
t_arq_fieldcat-just = c_l.
t_arq_fieldcat-col_pos = 4.
t_arq_fieldcat-reptext_ddic = text-018.
"Denomina��o da Conta Raz�o
t_arq_fieldcat-outputlen = 50. "tamanho

ENDCASE.

MODIFY t_arq_fieldcat.

ELSE.

CASE t_arq_fieldcat-fieldname.

WHEN 'MATNR'.
t_arq_fieldcat-just = c_l.
t_arq_fieldcat-col_pos = 1.
t_arq_fieldcat-reptext_ddic = text-019. "C�digo do Material
t_arq_fieldcat-outputlen = 20. "tamanho

WHEN 'MAKTX'.
t_arq_fieldcat-just = c_l.
t_arq_fieldcat-col_pos = 2.
t_arq_fieldcat-reptext_ddic = text-020.
"Texto Breve do Material
t_arq_fieldcat-outputlen = 40. "tamanho

WHEN 'BWKEY'.
t_arq_fieldcat-just = c_l.
t_arq_fieldcat-col_pos = 3.
t_arq_fieldcat-reptext_ddic = text-021. "Centro
t_arq_fieldcat-outputlen = 6. "tamanho

WHEN 'BKLAS'.
t_arq_fieldcat-just = c_l.
t_arq_fieldcat-col_pos = 4.
t_arq_fieldcat-reptext_ddic = text-016. "Classe de Avalia��o
t_arq_fieldcat-outputlen = 19. "tamanho

WHEN 'KONTS'.
t_arq_fieldcat-just = c_l.
t_arq_fieldcat-col_pos = 5.
t_arq_fieldcat-reptext_ddic = text-017. "Conta do Raz�o
t_arq_fieldcat-outputlen = 14. "tamanho

WHEN 'TXT50'.
t_arq_fieldcat-just = c_l.
t_arq_fieldcat-col_pos = 6.
t_arq_fieldcat-reptext_ddic = text-018.
"Denomina��o da Conta Raz�o
t_arq_fieldcat-outputlen = 50. "tamanho

ENDCASE.

MODIFY t_arq_fieldcat.

ENDIF.
ENDLOOP.

ENDFORM. " f_modifica_fieldcat


*&---------------------------------------------------------------------*
*& Form f_executa_alv
*&---------------------------------------------------------------------*
* Executa ALV
*----------------------------------------------------------------------*
FORM f_executa_alv .

*Tabela para desabilitar botao na fun��o do ALV

REFRESH t_tab_fcode.

t_fcode-fcode = text-022. "&UMC

APPEND t_fcode TO t_tab_fcode.

w_repid = sy-repid.

****monta o ALV de acordo com o tipo de relatorio


IF p_matnr IS INITIAL.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' "#EC *


EXPORTING
i_callback_program = w_repid
i_callback_top_of_page = 'F_T_TOP_OF_PAGE'
it_fieldcat = t_arq_fieldcat[]
it_excluding = t_tab_fcode[]
i_default = c_x
i_save = c_a
TABLES
t_outtab = t_fser
EXCEPTIONS
program_error = 1
OTHERS = 2.

ELSE.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' "#EC *


EXPORTING
i_callback_program = w_repid
i_callback_top_of_page = 'F_T_TOP_OF_PAGE'
it_fieldcat = t_arq_fieldcat[]
it_excluding = t_tab_fcode[]
i_default = c_x
i_save = c_a
TABLES
t_outtab = t_fmat
EXCEPTIONS
program_error = 1
OTHERS = 2.

ENDIF.

ENDFORM. " f_executa_alv

************************************************************************
* Fim do Abap *

Vous aimerez peut-être aussi