Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 03
Clique em Sim.
Clique em Gravar.
Módulo POOL ( ON LINE )
4
Neste primeiro passo, criamos os Includes. Na barra de Objetos, temos a seguinte situação:
* Declaração de tabelas
TABLES: ztb01_cargo, "Cadastro de Cargo
ztb01_depto, "Cadastro de Departamento
ztb01_func. "Cadastro de Funcionários
Para criarmos a primeira tela, clique com o botão direito sobre o nome do programa
principal:
Criar Tela:
Clique em Ok.
Módulo POOL ( ON LINE )
8
Clique em Sim.
Módulo POOL ( ON LINE )
10
Descomente SET
Dar Enter
Exemplo: F2
Módulo POOL ( ON LINE )
15
Clique em Voltar.
Módulo POOL ( ON LINE )
16
*&--------------------------------------------------------------------
-*
*& Include ZMP01_CADFUNC_PAI
*&--------------------------------------------------------------------
-*
*&--------------------------------------------------------------------
-*
*& Module USER_COMMAND_0100 INPUT
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
MODULE user_command_0100 INPUT.
CASE sy-ucomm.
WHEN 'BACK'. "Botão Back foi pressionado (F3)
LEAVE PROGRAM. "Sai do programa
WHEN 'FCREATE'.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
Módulo POOL ( ON LINE )
19
Clique em Ok.
Módulo POOL ( ON LINE )
20
Vamos agora tratar o comando FCREATE, dentro da User Command da Tela 0100.
WHEN 'FCREATE'. "Criar funcionário
call SCREEN '0200'.
Como a tela 0020 não existe vamos cria-la com um clique duplo em 0200.
Descomente os módulos.
Criar o Titulo:
Clique em Ok.
Módulo POOL ( ON LINE )
30
*&--------------------------------------------------------------------
-*
*& PoolMóds. ZMP01_CADFUNC
*&
*&--------------------------------------------------------------------
-*
*&
*&
*&--------------------------------------------------------------------
-*
PROGRAM ZMP01_CADFUNC.
* Include para Tabelas, Tipos, Variaveis, tab. internas e etc.
include ZMP01_CADFUNC_top.
* Include para Processo PBO - Antes da texla ser exibida
include ZMP01_CADFUNC_pbo.
* Include para Processo PAI - Depois da Tela ser exibida
include ZMP01_CADFUNC_pai.
* Include para Funcoes e Forms
include ZMP01_CADFUNC_fct.
Módulo POOL ( ON LINE )
34
Include: ZMP01_CADFUNC_FCT
*&--------------------------------------------------------------------
-*
*& Include ZMP01_CADFUNC_FCT
*&--------------------------------------------------------------------
-*
*&--------------------------------------------------------------------
-*
*& Form VERIFICA_DADOS
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
* <--P_V_ERRO text
*---------------------------------------------------------------------
-*
FORM verifica_dados CHANGING p_v_erro.
CLEAR: v_erro.
* Verifica se cargo existe
SELECT count(*)
FROM ztb01_cargo
WHERE cargo EQ wa_func-cargo.
IF sy-subrc NE 0. "Não encontrou o registro
MESSAGE i002(zmsg00) WITH
'Cargo não encontrado.'.
v_erro = 'X'.
ENDIF.
* Verifica Departamento.
SELECT count(*)
FROM ztb01_depto
WHERE depto EQ wa_func-depto.
IF sy-subrc NE 0. "Não encontrou o registro
MESSAGE i002(zmsg00) WITH
'Departamento não encontrado.'.
v_erro = 'X'.
ENDIF.
ENDFORM. " VERIFICA_DADOS
*&--------------------------------------------------------------------
-*
*& Form SALVA_DADOS
*&--------------------------------------------------------------------
-*
Módulo POOL ( ON LINE )
35
* text
*---------------------------------------------------------------------
-*
* -->P_0046 text
*---------------------------------------------------------------------
-*
FORM salva_dados USING l_typrec.
* Move Dados correspondente da workarea para tabela
MOVE-CORRESPONDING wa_func TO ztb01_func.
IF l_typrec EQ 'I'. "Insert
INSERT ztb01_func.
ELSE. "Atualizar Funcionário
UPDATE ztb01_func.
ENDIF.
IF sy-subrc EQ 0. "Sucesso ao Gravar
MESSAGE i000(zmsg00) WITH 'Funcionário'
wa_func-codre
wa_func-nome
'Gravado com Sucesso'.
PERFORM limpa_variaveis.
ELSE.
MESSAGE i000(zmsg00) WITH 'Erro ao Gravar Funcionário'
wa_func-codre
wa_func-nome.
ENDIF.
ENDFORM. " SALVA_DADOS
*&--------------------------------------------------------------------
-*
*& Form CALCULA_CODRE
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------------
-*
FORM calcula_codre .
SELECT MAX( codre )
INTO wa_func-codre
FROM ztb01_func.
IF sy-subrc NE 0. "Tabela vazia
Módulo POOL ( ON LINE )
36
ztb01_func-codre = '0000000001'.
ELSE.
ztb01_func-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_DADOS
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------------
-*
FORM busca_dados .
SELECT SINGLE *
FROM ztb01_func
INTO wa_func
WHERE codre EQ wa_func-codre.
IF sy-subrc EQ 0. "Se dados foram encontrados
SELECT SINGLE descr INTO wa_func-dcargo
FROM ztb01_cargo
WHERE cargo EQ wa_func-cargo.
Módulo POOL ( ON LINE )
37
SELECT SINGLE descr INTO wa_func-ddepto
FROM ztb01_depto
WHERE depto EQ wa_func-depto.
wa_func_aux = wa_func.
ELSE.
MESSAGE 'Dados não Encontrados' TYPE 'I'.
PERFORM limpa_variaveis.
ENDIF.
ENDFORM. " BUSCA_DADOS
*&--------------------------------------------------------------------
-*
*& Form DEMITE_FUNCIONARIO
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------------
-*
FORM demite_funcionario .
DATA: v_dif TYPE i.
IF wa_func-dtdem IS INITIAL.
wa_func-dtdem = sy-datum.
PERFORM confirma_demissao.
IF v_answer EQ '1'.
PERFORM salva_dados USING 'U'.
ELSE.
wa_func-demit = space.
ENDIF.
ELSE.
v_dif = sy-datum - wa_func-dtdem. "subtrai data atual - data demi
ssão
IF v_dif GT 7. "Maior que
MESSAGE 'Não pode demitir retroativo maior que uma semana' TYPE
'I'.
ELSEIF v_dif GT -30. "Menor que
Módulo POOL ( ON LINE )
38
MESSAGE 'Não pode demitir acima de 30 de antecedência' TYPE 'I'.
ELSE.
PERFORM confirma_demissao.
IF v_answer EQ '1'.
PERFORM salva_dados USING 'U'.
ELSE.
wa_func-demit = ' '.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " DEMITE_FUNCIONARIO
*&--------------------------------------------------------------------
-*
*& Form CONFIRMA_DEMISSAO
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------------
-*
FORM confirma_demissao .
DATA: v_text_question(128) TYPE c,
v_datac(10).
WRITE wa_func-dtdem TO v_datac.
CONCATENATE 'Funcionário' wa_func-codre wa_func-nome
'será demitido em' v_datac '.'
'Confirma?' INTO
v_text_question SEPARATED BY space.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Confirma Demissão?'
diagnose_object = ' '
text_question = v_text_question
text_button_1 = 'Sim'
icon_button_1 = 'ICON_OKAY'
text_button_2 = 'Não'
Módulo POOL ( ON LINE )
39
icon_button_2 = 'ICON_CANCEL'
default_button = '1'
display_cancel_button = ' '
IMPORTING
answer = v_answer.
ENDFORM. " CONFIRMA_DEMISSAO
*&--------------------------------------------------------------------
-*
*& Form ALTERA_TELA
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------------
-*
FORM altera_tela .
*** Tratar tela de Exibição
IF v_change = ' '.
LOOP AT SCREEN.
IF screen-name EQ 'WA_FUNC-CODRE'.
screen-input = 1. "Deixa campo aberto
ELSE.
screen-input = 0. "Fecha campo
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ELSE.
IF wa_func_aux IS INITIAL. "Nenhum funcionário selecionado
LOOP AT SCREEN.
IF screen-name EQ 'WA_FUNC-CODRE'.
screen-input = 1. "Deixa campo aberto
ELSE.
screen-input = 0. "Fecha campo
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ELSE.
LOOP AT SCREEN.
IF screen-name EQ 'WA_FUNC-CODRE' OR
screen-name EQ 'WA_FUNC-DCARGO' OR
Módulo POOL ( ON LINE )
40
screen-name EQ 'WA_FUNC-DDEPTO'.
screen-input = 0. "Fecha campo
ELSE.
screen-input = 1. "Deixa campo aberto
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM. " ALTERA_TELA
*&--------------------------------------------------------------------
-*
*& Form CONFIRMA_SAIDA
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------------
-*
FORM confirma_saida .
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Confirma Saída?'
* DIAGNOSE_OBJECT = ' '
text_question =
'Dados não foram salvos. Deseja sair?'
text_button_1 = 'Sim'
icon_button_1 = 'ICON_OKAY'
text_button_2 = 'Não'
icon_button_2 = 'ICON_CANCEL'
default_button = '1'
display_cancel_button = ' '
IMPORTING
answer = v_answer.
ENDFORM. " CONFIRMA_SAIDA
*&--------------------------------------------------------------------
-*
*& Form VALIDA_DADOS
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
Módulo POOL ( ON LINE )
41
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------------
-*
FORM valida_dados .
*** Verificar campo CARGO
SELECT count(*)
FROM ztb01_cargo
WHERE cargo EQ wa_func-cargo.
IF sy-subrc NE 0.
MESSAGE 'CARGO NÃO ENCONTTRADO' TYPE 'I'.
v_erro = 'X'. "Erro encontrado. Não permite continuar
ENDIF.
*** Verificar campo DEPARTAMENTO
SELECT count(*)
FROM ztb01_depto
WHERE depto EQ wa_func-depto.
IF sy-subrc NE 0.
MESSAGE 'DEPARTAMENTO NÃO ENCONTTRADO' TYPE 'I'.
v_erro = 'X'. "Erro encontrado. Não permite continuar
ENDIF.
ENDFORM. " VALIDA_DADOS
Módulo POOL ( ON LINE )
42
Include: ZMP01_CADFUNC_PAI
*&--------------------------------------------------------------------
-*
*& Include ZMP01_CADFUNC_PAI
*&--------------------------------------------------------------------
-*
*&--------------------------------------------------------------------
-*
*& Module USER_COMMAND_0100 INPUT
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
MODULE user_command_0100 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 'SAIR'.
LEAVE PROGRAM. "Sai do programa
WHEN 'FCREATE'. "Criar funcionário
v_tprec = 'I'.
CALL SCREEN '0200'.
WHEN 'FCHANGE' OR 'FSHOW'. "Alterar ou Modificar
IF sy-ucomm EQ 'FCHANGE'.
v_change = 'X'.
ELSE.
v_change = ' '.
ENDIF.
CALL SCREEN '0300'.
WHEN 'FDEMI'. "Demitir funcionário
CALL SCREEN '0400' STARTING AT 3 3.
WHEN OTHERS.
Módulo POOL ( ON LINE )
43
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&--------------------------------------------------------------------
-*
*& Module USER_COMMAND_0200 INPUT
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
MODULE user_command_0200 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
* set SCREEN '0010'.
* leave screen.
*
* leave to screen '0010'.
*
* call screen '0010'.
LEAVE TO SCREEN 0. "Volta para a tela anterior
WHEN 'SAIR' OR 'CANC'.
LEAVE PROGRAM. "Sai do programa
WHEN 'ENTER'.
PERFORM verifica_dados CHANGING v_erro.
WHEN 'SAVE'.
PERFORM verifica_dados CHANGING v_erro.
PERFORM salva_dados USING 'I'.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_0200 INPUT
*&--------------------------------------------------------------------
-*
*& Module USER_COMMAND_0300 INPUT
Módulo POOL ( ON LINE )
44
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
MODULE user_command_0300 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
IF v_change EQ ' '. "Tela de Exibição
PERFORM limpa_variaveis.
LEAVE TO SCREEN 0.
ELSE.
IF wa_func EQ wa_func_aux. "Não houve alteração
PERFORM limpa_variaveis.
LEAVE TO SCREEN 0.
ELSE. "houve alteração pergunta antes de sair
PERFORM confirma_saida.
IF v_answer EQ '1'.
PERFORM limpa_variaveis.
LEAVE TO SCREEN 0.
ENDIF.
ENDIF.
ENDIF.
WHEN 'ENTER'.
IF v_change EQ ' '. "Tela de Exibição
PERFORM busca_dados.
ELSE. "Tela de Alteração
IF wa_func_aux IS INITIAL.
PERFORM busca_dados.
ELSE.
PERFORM valida_dados.
ENDIF.
ENDIF.
WHEN 'FOTHER'.
IF wa_func = wa_func_aux. "Não houve alteração
PERFORM limpa_variaveis.
ELSE.
PERFORM confirma_saida.
IF v_answer EQ '1'.
PERFORM limpa_variaveis.
ENDIF.
ENDIF.
Módulo POOL ( ON LINE )
45
WHEN 'SAVE'.
PERFORM valida_dados.
IF v_erro IS INITIAL. "não encontrou erros
PERFORM salva_dados USING 'U'.
ELSE.
MESSAGE 'Existem erros. Dados não foram Gravados' TYPE 'I'.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_0300 INPUT
*&--------------------------------------------------------------------
-*
*& Module USER_COMMAND_0400 INPUT
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
MODULE user_command_0400 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
PERFORM limpa_variaveis.
LEAVE TO SCREEN 0.
WHEN 'ENTER'.
IF wa_func_aux IS INITIAL OR
wa_func-codre NE wa_func_aux-codre.
PERFORM busca_dados.
IF wa_func-demit EQ 'X'. "Já está demitido
MESSAGE 'Funcionário já demitido' TYPE 'I'.
PERFORM limpa_variaveis.
ENDIF.
ENDIF.
WHEN 'FFIRE'. "CODE pela check box do ON-Line
IF wa_func_aux IS INITIAL.
MESSAGE 'Selecione um funcionário para ser demitido' TYPE 'I'.
ELSE.
PERFORM demite_funcionario.
ENDIF.
WHEN OTHERS.
Módulo POOL ( ON LINE )
46
ENDCASE.
ENDMODULE. " USER_COMMAND_0400 INPUT
Módulo POOL ( ON LINE )
47
Include: ZMP01_CADFUNC_PBO
*&--------------------------------------------------------------------
-*
*& Include ZMP01_CADFUNC_PBO
*&--------------------------------------------------------------------
-*
*&--------------------------------------------------------------------
-*
*& Module STATUS_0100 OUTPUT
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'TELA_0100'.
SET TITLEBAR 'TIT_0100'.
ENDMODULE. " STATUS_0100 OUTPUT
*&--------------------------------------------------------------------
-*
*& Module STATUS_0200 OUTPUT
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
MODULE status_0200 OUTPUT.
SET PF-STATUS 'TELA_0200'.
SET TITLEBAR 'TIT_0200'.
ENDMODULE. " STATUS_0200 OUTPUT
*&--------------------------------------------------------------------
-*
*& Module STATUS_0300 OUTPUT
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
MODULE status_0300 OUTPUT.
DATA fcode TYPE TABLE OF sy-ucomm.
REFRESH fcode. "Limpa o conteúdo da tabela
IF v_change EQ 'X'. "Tela de Alteração
SET TITLEBAR 'TIT_0300'.
Módulo POOL ( ON LINE )
48
ELSE. "Tela de Exibição
SET TITLEBAR 'TIT_0310'.
APPEND 'FOTHER' TO fcode.
APPEND 'SAVE' TO fcode.
ENDIF.
SET PF-STATUS 'TELA_0300' EXCLUDING fcode.
* Fecha campo da tela
PERFORM altera_tela.
ENDMODULE. " STATUS_0300 OUTPUT
*&--------------------------------------------------------------------
-*
*& Module STATUS_0400 OUTPUT
*&--------------------------------------------------------------------
-*
* text
*---------------------------------------------------------------------
-*
MODULE status_0400 OUTPUT.
SET PF-STATUS 'TELA_0400'.
SET TITLEBAR 'TIT_0400'.
ENDMODULE. " STATUS_0400 OUTPUT
Módulo POOL ( ON LINE )
49
Módulo POOL ( ON LINE )
50