Escolar Documentos
Profissional Documentos
Cultura Documentos
Para ignorar o preenchimento dos campo obrigatório, insira o comando CANCEL dentro do
Status da tela 0020:
O mesmo será feito com o campo de Departamento. Para o campo Departamento, utilizar a
ajuda de pesquisa ZT6HDEPTO00. O Apêncice A ensina como desenvolver uma Ajuda de
Pesquisa Elementar.
Exercício 2 – Criar tela de Exibição / Alteração
O primeiro passo é saber qual tela chamará a tela de Alteração/Exibição. No nosso caso, a tela
principal é a tela 0010. Portanto precisamos entrar no lógica de processamento da Tela 0010:
Clique Duplo em 0030. Na tela a seguir, clique em Sim para criar o objeto.
ou
tecla F6.
Selecione a tabela WA_FUNC campo CODRE.
Insira um LABEL
*&---------------------------------------------------------------------*
*& PoolMóds. ZT6ADV0003
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
PROGRAM ZT6ADV0003.
*&---------------------------------------------------------------------*
*& Include ZT6ADV0003_TOP
*&---------------------------------------------------------------------*
TABLES: zt6func00, "Cadastro de Funcionários
zt6cargo00, "Cadastro de Cargos
zt6depto00. "Cadastro de Departamentos
*&---------------------------------------------------------------------*
*& Include ZT6ADV0003_PBO
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0010 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0010 OUTPUT.
SET PF-STATUS 'TELA_0010'.
SET TITLEBAR 'TIT_0010'.
ENDMODULE. " STATUS_0010 OUTPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0020 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0020 OUTPUT.
SET PF-STATUS 'TELA_0020'.
SET TITLEBAR 'TIT_0020'.
ENDMODULE. " STATUS_0020 OUTPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0030 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0030 OUTPUT.
DATA fcode TYPE TABLE OF sy-ucomm.
REFRESH fcode.
IF v_change EQ 'X'. "Tela de alteração
SET TITLEBAR 'TIT_0030_A'.
ELSE. "Tela de Exibição
SET TITLEBAR 'TIT_0030_B'.
APPEND 'CANCEL' TO fcode.
APPEND 'SAVE' TO fcode.
ENDIF.
SET PF-STATUS 'TELA_0030' EXCLUDING fcode.
ENDMODULE. " STATUS_0030 OUTPUT
*&---------------------------------------------------------------------*
*& Module change_screen_mode OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE change_screen_mode OUTPUT.
"Passar campo a campo para mudar os atributos
LOOP AT SCREEN.
IF v_change EQ ' '. "Tela de Exibição
IF screen-name EQ 'WA_FUNC-CODRE'.
screen-input = 1. "Campo fica aberto
ELSE.
screen-input = 0. "Campo fica fechado
ENDIF.
ELSE. "Tela de Alteração
"A tela está vazia
IF wa_func_aux IS INITIAL.
IF SCREEN-name EQ 'WA_FUNC-CODRE'.
SCREEN-INPUT = 1. "Campo fica aberto
ELSE.
SCREEN-INPUT = 0. "Campo fica fechado
ENDIF.
ELSE.
IF SCREEN-name EQ 'WA_FUNC-CODRE'.
SCREEN-INPUT = 0. "Campo fica fechado
ELSE.
SCREEN-INPUT = 1. "Campo fica aberto
ENDIF.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDMODULE. " change_screen_mode OUTPUT
Include: zt6adv0003_pai.
*&---------------------------------------------------------------------*
*& Include ZT6ADV0003_PAI
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0010 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0010 INPUT.
* Variável de Sistema SY-UCOMM --> User Command
* Esta variável grava a ultima ação do usuário.
CASE sy-ucomm.
WHEN 'BACK'. "Botão Back foi pressionado (F3)
LEAVE PROGRAM. "Sai do programa
WHEN 'FCREATE'. "Criar Funcionário
CALL SCREEN '0020'.
WHEN 'FCHANGE' OR 'FSHOW'.
IF sy-ucomm EQ 'FCHANGE'.
v_change = 'X'.
ELSE.
v_change = ' '.
ENDIF.
CALL SCREEN '0030'.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_0010 INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0020 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0020 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
* set SCREEN '0010'.
* leave screen.
* leave to screen '0010'.
* call screen '0010'.
IF NOT wa_func IS INITIAL.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
textline1 = text-m01
textline2 = text-m02
titel = text-t01
cancel_display = ' '
IMPORTING
answer = v_answer.
IF v_answer EQ 'J'. "Sair sem salvar.
PERFORM limpa_variaveis.
LEAVE TO SCREEN 0. "Volta para a tela anterior
ENDIF.
ENDIF.
WHEN 'ENTER'.
PERFORM verifica_dados CHANGING v_erro.
WHEN 'SAVE'.
PERFORM verifica_dados CHANGING v_erro.
PERFORM salva_dados USING v_erro 'I'.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_0020 INPUT
*&---------------------------------------------------------------------*
*& Module saida_0020 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE saida_0020 INPUT.
CASE sy-ucomm.
WHEN 'CANCEL'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " saida_0020 INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0030 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0030 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'ENTER'.
PERFORM busca_funcionario.
WHEN 'OTHER'.
PERFORM limpa_variaveis.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_0030 INPUT
Include: zt6adv0003_fct.
*&---------------------------------------------------------------------*
*& Include ZT6ADV0003_FCT
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form verifica_dados
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM verifica_dados CHANGING l_erro.
CLEAR v_erro.
SELECT SINGLE * FROM zt6cargo00 WHERE
cargo EQ wa_func-cargo.
IF sy-subrc NE 0. "Não encontrou o registro
MESSAGE i002(zmsg00) WITH
'Cargo não encontrado.'.
l_erro = 'X'.
CLEAR: zt6cargo00.
ENDIF.
SELECT SINGLE * FROM zt6depto00 WHERE
depto EQ wa_func-depto.
IF sy-subrc NE 0. "Não encontrou o registro
MESSAGE i002(zmsg00) WITH
'Departamento não encontrado.'.
l_erro = 'X'.
CLEAR: zt6depto00.
ENDIF.
ENDFORM. " verifica_dados
*&---------------------------------------------------------------------*
*& Form salva_dados
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_V_ERRO text
*----------------------------------------------------------------------*
FORM salva_dados USING p_v_erro v_tprec.
IF p_v_erro IS INITIAL. "Não tem erro
MOVE-CORRESPONDING wa_func TO zt6func00.
IF v_tprec EQ 'I'. "é novo registro
PERFORM calcula_codre.
INSERT zt6func00.
ELSE. "é modificação
UPDATE zt6func00.
ENDIF.
IF sy-subrc EQ 0.
MESSAGE s002(zmsg00) WITH
'Funcionário'
zt6func00-codre
zt6func00-nome
'gravado com sucesso'.
PERFORM limpa_variaveis.
ELSE.
MESSAGE i002(zmsg00) WITH
'Erro ao gravar funcionário'
zt6func00-codre
zt6func00-nome.
ENDIF.
ELSE. "Existem erros na tela
MESSAGE i002(zmsg00) WITH
'Existem erros. Não é possível gravar'.
ENDIF.
ENDFORM. " salva_dados
*&---------------------------------------------------------------------*
*& Form calcula_codre
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM calcula_codre .
SELECT MAX( codre ) INTO wa_func-codre
FROM zt6func00.
IF sy-subrc NE 0. "Tabela vazia
zt6func00-codre = '0000000001'.
ELSE.
zt6func00-codre = wa_func-codre + 1.
ENDIF.
ENDFORM. " calcula_codre
*&---------------------------------------------------------------------*
*& Form limpa_variaveis
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form limpa_variaveis .
CLEAR: wa_func, wa_func_aux, v_erro, v_answer.
endform. " limpa_variaveis
*&---------------------------------------------------------------------*
*& Form busca_funcionario
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form busca_funcionario .
IF wa_func-codre IS INITIAL.
MESSAGE I002(zmsg00) WITH
'Digite algum código para continuar.'.
ELSE.
SELECT SINGLE * INTO wa_func
FROM zt6func00
WHERE codre EQ wa_func-codre.
IF sy-subrc NE 0.
MESSAGE I002(zmsg00) WITH
'Código não encontrado.'.
PERFORM limpa_variaveis.
ELSE.
wa_func_aux = wa_func.
ENDIF.
ENDIF.
endform. " busca_funcionario
APENDICE A – Criação de Ajuda de Pesquisa
Salve e ative.
Para testar, pressione F8 ou clique em .