Você está na página 1de 10

Tela de Seleção:

Os botoes inicializam desabilitados, porque foi especificado assim

*-----------------------------------------------------------------------
* Programa : ZPTMR_004
* Cliente : Copersucar
* Módulo : TM
* Transação:
* Descrição: Atualização de Usuário de Aprovação e Liberação
* Autor : Mariana Lara Bottazzini Data: 07/05/2009
*-----------------------------------------------------------------------
* Histórico de Alterações:
*-----------------------------------------------------------------------
* Data |Change # |Autor |Alteração
*-----------------------------------------------------------------------
* 07/05/2009 |CPSK990642 |Mariana Bottazzini|Desenvolvimento Inicial
*-----------------------------------------------------------------------
REPORT zptmr_004 MESSAGE-ID zltm01.

*-----------------------------------------------------------------------
* Tabelas
*-----------------------------------------------------------------------
TABLES:
*** Tabela para botões da tela de seleção
sscrfields.
*-----------------------------------------------------------------------
* Definição de Tipos
*-----------------------------------------------------------------------
TYPES:

*** Usuários para a ajuda de pesquisa


BEGIN OF usr03_type,
bname TYPE usr03-bname,
END OF usr03_type,

***Descrição dos usuários


BEGIN OF desc_type,
name1 TYPE usr03-name1,
name2 TYPE usr03-name2,
END OF desc_type,
***Funções para ajuda de pesquisa
BEGIN OF func_user_type,
cd_func_user TYPE ztbtm_func_user-cd_func_user,
nm_func_user TYPE ztbtm_func_user-nm_func_user,
END OF func_user_type,

*** tabela de atualização aprovador


BEGIN OF aprov_type,
log_user_aprov TYPE ztbtm_nv_apr_lib-log_user_aprov,
nm_user_aprov TYPE ztbtm_nv_apr_lib-nm_user_aprov,
log_user_incl TYPE ztbtm_nv_apr_lib-log_user_incl,
dt_incl TYPE ztbtm_nv_apr_lib-dt_incl,
hr_incl TYPE ztbtm_nv_apr_lib-hr_incl,
END OF aprov_type.
*-----------------------------------------------------------------------
* Definição de Constantes
*-----------------------------------------------------------------------

CONSTANTS:
*** Grupo da tela de seleção
c_grp1(03) TYPE c VALUE 'GR1',
*** campo de usuário para ajuda de pesquisa
c_ret_field TYPE dfies-fieldname VALUE 'BNAME',
*** campo de funcao para ajuda de pesquisa
c_ret_field_func TYPE dfies-fieldname VALUE 'CD_FUNC_USER',
*** nome do parameter para ajuda de pesquisa
c_campo TYPE help_info-dynprofld VALUE 'P_USER',
*** nome do parameter para ajuda de pesquisa
c_campo_func TYPE help_info-dynprofld VALUE 'P_FUNCAO',
*** sim
c_sim(1) TYPE c VALUE 'S',
*** habilitar
c_hab(3) TYPE c VALUE 'HAB',
*** Desabilitar
c_des(3) TYPE c VALUE 'DES',
*** Status Aprovação
c_a(1) TYPE c VALUE 'A',
*** Status Aprovação
c_i(1) TYPE c VALUE 'I',
*** Ativo
c_ativo(5) TYPE c VALUE 'Ativo',
*** Ação de inclusao
c_inc(3) TYPE c VALUE 'INC',
*** Ação de alteração
c_alt(3) TYPE c VALUE 'ALT'.

*-----------------------------------------------------------------------
* Definição de Tabelas Globais
*-----------------------------------------------------------------------
DATA:
***Opções de escolha da ajuda de pesquisa da função
gw_func_user TYPE STANDARD TABLE OF func_user_type.

*-----------------------------------------------------------------------
* Definição de work areas
*-----------------------------------------------------------------------
DATA:
***para atualização do aprovador
gs_aprov TYPE ztbtm_nv_apr_lib,
***descrição do Usuário Logado
gs_user_log TYPE desc_type,
***ação de inclusao ou alteração
gc_acao(3) TYPE c,
*** Status da tabela de aprovação
gs_status TYPE ztbtm_nv_apr_lib-status_aprov,
*** tabela de aprovação
gs_aprv_lib TYPE aprov_type.

*-----------------------------------------------------------------------
* Definição de field-symbols
*-----------------------------------------------------------------------
FIELD-SYMBOLS:
***field symbol para as funções
<fs_func_user> TYPE func_user_type,
***field symbol do status de aprovação
<fs_status> TYPE ztbtm_nv_apr_lib-status_aprov.

*-----------------------------------------------------------------------
* Definição de telas de seleção
*-----------------------------------------------------------------------
SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME TITLE text-001.

*** Usuario Aprovador


SELECTION-SCREEN: BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(31) text-c01 FOR FIELD p_user.

PARAMETERS: p_user TYPE usr03-bname OBLIGATORY,


p_u_desc TYPE ztbtm_nv_apr_lib-nm_user_aprov MODIF ID gr1
.
SELECTION-SCREEN: END OF LINE.

*** Função Aprovador


SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) text-c03 FOR FIELD p_funcao.

PARAMETERS: p_funcao TYPE ztbtm_func_user-cd_func_user OBLIGATORY,


p_f_desc TYPE ztbtm_func_user-nm_func_user MODIF ID gr1.

SELECTION-SCREEN: END OF LINE.


SELECTION-SCREEN SKIP.

*** Situação
PARAMETERS: p_sit TYPE ztbtm_stat_aprov-nm_stat_aprov MODIF ID gr1.
SELECTION-SCREEN SKIP.

*** Botões na tela


SELECTION-SCREEN PUSHBUTTON: /05(20) bt1 USER-COMMAND hab MODIF ID hab,
35(20) bt2 USER-COMMAND des MODIF ID des.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN: END OF BLOCK b01.

*----------------------------------------------------------------------
* Evento: Inicialization
*----------------------------------------------------------------------
INITIALIZATION.

***Inicializa variáveis e os botões


PERFORM zf_initialization.

*----------------------------------------------------------------------
* Evento: At selection screen
*----------------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
***Fecha para entrada de valores os campos de descrição
PERFORM zf_trata_campos.

***Atribui o valor no campo de descrição do usuário


PERFORM zf_user_desc.

***Atribui valor no campo de descrição da função


PERFORM zf_func_desc.

***Ajuda de pesquisa para o campo usuário


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_user.
PERFORM zf_ajuda_pesq_user.

*** Ajuda de pesquisa para o campo Função


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_funcao.
PERFORM zf_ajuda_pesq_funcao.

*** Tratamento dos botões


AT SELECTION-SCREEN.
PERFORM zf_evento_botao.

*&---------------------------------------------------------------------*
*& Form ZF_INITIALIZATION
*&---------------------------------------------------------------------*
* Inicioaliza os botões da tela de seleção
*----------------------------------------------------------------------*
FORM zf_initialization.
bt1 = text-002. "Habilitar
bt2 = text-003. "Desabilitar
ENDFORM. " ZF_INITIALIZATION
*&---------------------------------------------------------------------*
*& Form ZF_TRATA_CAMPOS
*&---------------------------------------------------------------------*
* Fecha os campos de descrição
*----------------------------------------------------------------------*
FORM zf_trata_campos.

REFRESH: gw_func_user.
CLEAR: gs_aprov, gs_user_log.

*** Fecha campos para edição


LOOP AT SCREEN.
IF screen-group1 = c_grp1 OR
screen-group1 = c_hab OR
screen-group1 = c_des.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.

ENDFORM. " ZF_TRATA_CAMPOS

*&---------------------------------------------------------------------*
*& Form zf_ajuda_pesq_user
*&---------------------------------------------------------------------*
* Ajuda de pesquisa do campo usuário
*----------------------------------------------------------------------*
FORM zf_ajuda_pesq_user.

DATA: lw_valores TYPE STANDARD TABLE OF usr03_type,


lc_repid TYPE sy-repid,
lc_tela TYPE sy-dynnr.

SELECT bname FROM usr03 INTO TABLE lw_valores.

SORT lw_valores ASCENDING.

DELETE ADJACENT DUPLICATES FROM lw_valores.

MOVE: sy-repid TO lc_repid,


sy-dynnr TO lc_tela.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'


EXPORTING
retfield = c_ret_field
dynpprog = lc_repid
dynpnr = lc_tela
dynprofield = c_campo
value_org = c_sim
TABLES
value_tab = lw_valores
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.

ENDFORM. " zf_ajuda_pesq_user


*&---------------------------------------------------------------------*
*& Form zf_ajuda_pesq_user_desc
*&---------------------------------------------------------------------*
* Preenche descrição do campo
*----------------------------------------------------------------------*
FORM zf_user_desc.
DATA: ls_desc TYPE desc_type.

IF NOT p_user IS INITIAL.

CLEAR gc_acao.

SELECT SINGLE status_aprov


INTO gs_status
FROM ztbtm_nv_apr_lib
WHERE log_user_aprov EQ p_user.
*** Encontrou é alteração habilitar os dois botões
IF sy-subrc EQ 0.
PERFORM zf_desabilita_botao USING c_des.
PERFORM zf_desabilita_botao USING c_hab.
gc_acao = c_alt.
*** É Inclusao habilitar o inclusao (hab)
ELSE.
PERFORM zf_desabilita_botao USING c_hab.
gc_acao = c_inc.
ENDIF.

SELECT SINGLE name1 name2


INTO ls_desc
FROM usr03
WHERE bname EQ p_user.

IF sy-subrc NE 0.
***Login do usuário (p_user) não cadastrado no SAP.
MESSAGE i001 WITH p_user.
LOOP AT SCREEN.
IF screen-group1 = c_hab OR
screen-group1 = c_des.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
LEAVE LIST-PROCESSING.
ELSE.

CONCATENATE ls_desc-name1 ls_desc-name2


INTO p_u_desc
SEPARATED BY space.
ENDIF.
ENDIF.

ENDFORM. " zf_ajuda_pesq_user_desc


*&---------------------------------------------------------------------*
*& Form zf_ajuda_pesq_funcao
*&---------------------------------------------------------------------*
* Ajuda de pesquisa para o campo Função
*----------------------------------------------------------------------*
FORM zf_ajuda_pesq_funcao.

DATA: lc_repid TYPE sy-repid,


lc_tela TYPE sy-dynnr.
SELECT cd_func_user
nm_func_user
FROM ztbtm_func_user
INTO TABLE gw_func_user.

SORT gw_func_user ASCENDING.

DELETE ADJACENT DUPLICATES FROM gw_func_user.

MOVE: sy-repid TO lc_repid,


sy-dynnr TO lc_tela.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'


EXPORTING
retfield = c_ret_field_func
dynpprog = lc_repid
dynpnr = lc_tela
dynprofield = c_campo_func
value_org = c_sim
TABLES
value_tab = gw_func_user
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.

ENDFORM. " zf_ajuda_pesq_funcao


*&---------------------------------------------------------------------*
*& Form zf_func_desc
*&---------------------------------------------------------------------*
* Descrição do campo função
*----------------------------------------------------------------------*
FORM zf_func_desc.
IF NOT p_funcao IS INITIAL.
UNASSIGN <fs_func_user>.
READ TABLE gw_func_user ASSIGNING <fs_func_user>
WITH KEY cd_func_user = p_funcao.
IF <fs_func_user> IS ASSIGNED.
MOVE: <fs_func_user>-nm_func_user TO p_f_desc.
ENDIF.
ENDIF.

ENDFORM. " zf_func_desc


*&---------------------------------------------------------------------*
*& Form zf_desabilita_botao
*&---------------------------------------------------------------------*
* desabilita botão da tela de seleção
*----------------------------------------------------------------------*
FORM zf_desabilita_botao USING p_botao.
LOOP AT SCREEN.
IF screen-group1 = p_botao.
screen-input = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDFORM. " zf_desabilita_botao
*&---------------------------------------------------------------------*
*& Form zf_habilitar
*&---------------------------------------------------------------------*
* Tratamento do botão Habilitar
*----------------------------------------------------------------------*
FORM zf_habilitar.

CLEAR gs_user_log.

*** Coloca Ativo no campo da tela de seleção


*** Caso de inclusao
IF gc_acao EQ c_inc.
MOVE c_ativo TO p_sit.
*** Caso de alteração
ELSEIF gc_acao EQ c_alt.
PERFORM zf_status USING gs_status.
ENDIF.

*** Se já não foi selecionado descrição do Usuário Logado.


IF gs_user_log IS INITIAL.
SELECT SINGLE name1 name2
INTO gs_user_log
FROM usr03
WHERE bname EQ sy-uname.

IF sy-subrc EQ 0.

IF gc_acao = c_inc. "caso de inclusao

CONCATENATE gs_user_log-name1 gs_user_log-name2


INTO gs_aprov-nm_user_incl.

ELSEIF gc_acao = c_alt. "caso de alteração

CONCATENATE gs_user_log-name1 gs_user_log-name2


INTO gs_aprov-nm_user_alt.
ENDIF.

ELSE.
IF gc_acao = c_inc. "caso de inclusao
CONCATENATE gs_user_log-name1 gs_user_log-name2
INTO gs_aprov-nm_user_incl.

ELSEIF gc_acao = c_alt. "caso de alteração


CONCATENATE gs_user_log-name1 gs_user_log-name2
INTO gs_aprov-nm_user_alt.
ENDIF.

ENDIF.
ENDIF.

gs_aprov-cod_func = p_funcao.

*** se for uma inclusao


IF gc_acao EQ c_inc .
gs_aprov-status_aprov = c_a.

*** Senão se for uma alteração e o status for a


ELSEIF gs_status EQ c_a AND gc_acao EQ c_alt.
gs_aprov-status_aprov = c_i.
ENDIF.

*** Se for inclusao

IF gc_acao EQ c_inc.
gs_aprov-log_user_aprov = p_user.
gs_aprov-nm_user_aprov = p_u_desc.
gs_aprov-log_user_incl = sy-uname.
gs_aprov-dt_incl = sy-datum.
gs_aprov-hr_incl = sy-uzeit.
ENDIF.

*** Se for alteração


IF gc_acao EQ c_alt.

IF gs_aprv_lib IS INITIAL.
SELECT SINGLE log_user_aprov
nm_user_aprov
log_user_incl
dt_incl hr_incl
FROM ztbtm_nv_apr_lib
INTO gs_aprv_lib
WHERE log_user_aprov = p_user.

gs_aprov-log_user_aprov = gs_aprv_lib-log_user_aprov.
gs_aprov-nm_user_aprov = gs_aprv_lib-nm_user_aprov.
gs_aprov-log_user_incl = gs_aprv_lib-log_user_incl.
gs_aprov-dt_incl = gs_aprv_lib-dt_incl.
gs_aprov-hr_incl = gs_aprv_lib-hr_incl.

ENDIF.
gs_aprov-log_user_alt = sy-uname.
gs_aprov-dt_alt = sy-datum.
gs_aprov-hr_alt = sy-uzeit.
ENDIF.

*** Modifica a tabela do dic da dados


MODIFY ztbtm_nv_apr_lib FROM gs_aprov.

IF sy-subrc EQ 0 AND gc_acao EQ c_inc.


*** Inclusão Efetuada
MESSAGE i000 WITH text-004.
PERFORM zf_limpa_tela.
ELSEIF sy-subrc EQ 0 AND gc_acao EQ c_alt.
*** Alteração Efetuada
MESSAGE i000 WITH text-006.
PERFORM zf_limpa_tela.
ELSE.
***Erro ao executar inclusao/alteracao.
MESSAGE e000 WITH text-005.
ENDIF.

ENDFORM. " zf_habilitar


*&---------------------------------------------------------------------*
*& Form zf_desabilitar
*&---------------------------------------------------------------------*
* Tratamento do botão desabilitar
*----------------------------------------------------------------------*
FORM zf_desabilitar.
PERFORM zf_status USING gs_status.
IF gs_status EQ c_a.
CLEAR gs_user_log.

*** Se já não foi selecionado descrição do Usuário Logado.


IF gs_user_log IS INITIAL.
SELECT SINGLE name1 name2
INTO gs_user_log
FROM usr03
WHERE bname EQ sy-uname.

IF sy-subrc EQ 0.

CONCATENATE gs_user_log-name1 gs_user_log-name2


INTO gs_aprov-nm_user_alt.

ELSE.

CONCATENATE gs_user_log-name1 gs_user_log-name2


INTO gs_aprov-nm_user_alt.

ENDIF.
ENDIF.

IF gs_aprv_lib IS INITIAL.
SELECT SINGLE log_user_aprov
nm_user_aprov
log_user_incl
dt_incl hr_incl
FROM ztbtm_nv_apr_lib
INTO gs_aprv_lib
WHERE log_user_aprov = p_user.

gs_aprov-log_user_aprov = gs_aprv_lib-log_user_aprov.
gs_aprov-nm_user_aprov = gs_aprv_lib-nm_user_aprov.
gs_aprov-log_user_incl = gs_aprv_lib-log_user_incl.
gs_aprov-dt_incl = gs_aprv_lib-dt_incl.
gs_aprov-hr_incl = gs_aprv_lib-hr_incl.

ENDIF.

gs_aprov-log_user_alt = sy-uname.
gs_aprov-dt_alt = sy-datum.
gs_aprov-hr_alt = sy-uzeit.
gs_aprov-status_aprov = c_i.
MODIFY ztbtm_nv_apr_lib FROM gs_aprov.

IF sy-subrc EQ 0.
*** Alteração Efetuada
MESSAGE i000 WITH text-006.
PERFORM zf_limpa_tela.
ELSE.
***Erro ao executar inclusao/alteracao.
MESSAGE e000 WITH text-005.
ENDIF.
ENDIF.
ENDFORM. " zf_desabilitar
*&---------------------------------------------------------------------*
*& Form zf_evento_botao
*&---------------------------------------------------------------------*
* Evento dos botões
*----------------------------------------------------------------------*
FORM zf_evento_botao.

CASE sscrfields-ucomm.
WHEN c_hab.
PERFORM zf_habilitar.
WHEN c_des.
PERFORM zf_desabilitar.
ENDCASE.

ENDFORM. " zf_evento_botao


*&---------------------------------------------------------------------*
*& Form zf_limpa_tela
*&---------------------------------------------------------------------*
* Limpa tela de seleção
*----------------------------------------------------------------------*
FORM zf_limpa_tela.
CLEAR:
p_user,
p_funcao,
p_u_desc,
p_f_desc,
p_sit.
ENDFORM. " zf_limpa_tela
*&---------------------------------------------------------------------*
*& Form zf_status
*&---------------------------------------------------------------------*
* Consulta descrição do status do aprovador
*----------------------------------------------------------------------*
* -->P_STATUS Status do aprovador
*----------------------------------------------------------------------*
FORM zf_status USING p_status.

SELECT SINGLE nm_stat_aprov


FROM ztbtm_stat_aprov
INTO p_sit
WHERE cd_stat_aprov EQ p_status.

ENDFORM. " zf_status

Você também pode gostar