Módulo: GERAL
Funcionalidade: Atualização SYSID
Data/Hora da Publicação: 27/08/2007 00:00:00
Data/Hora Última Alteração: 16/02/2011 10:03:05
Descrição da Nota: ATUALIZ. SYSID GERAÇÃO POR BLOCOS
Sintoma
Quando a tabela possui muitos registros o programa apresenta erro de tempo de execução.
Solução
Atualização para que o processamento seja executado em blocos de 100.000 registros.
Não Usar - 2.00.0000
Produto:
Nota
Descrição
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 04533 Data: 27/08/2007 Hora: 15:28:52
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 04533
Categoria : Erro de Programa
Prioridade : Alta
Versão PW.TP : 2.0
Pacote : 00026
Agrupamento : 00010
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
04398 - 00001 - 2.0 - 00026 - EXITS PARA TRATAMENTO DE AUTORIZAÇÃO
----------------------------------------------------------------------------------------------------
ATUALIZ. SYSID GERAÇÃO POR BLOCOS
----------------------------------------------------------------------------------------------------
Palavras Chave:
ATUALIZ. SYSID GERAÇÃO POR BLOCOS
----------------------------------------------------------------------------------------------------
Objetos da nota:
REPS /PWS/ZYTPR036
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYTPR036
REPORT /pws/zytpr036 MESSAGE-ID /pws/zytpm.
TABLES: dd03l.
DATA: itab_tabela LIKE dd03l-tabname OCCURS 0 WITH HEADER LINE,
v_resp(1) TYPE c,
v_text_1(50) TYPE c,
v_text_2(50) TYPE c,
v_file TYPE string,
v_tot LIKE sy-tabix,
v_lin LIKE sy-tabix,
v_tipo TYPE REF TO data,
* >> Início da exclusão:
v_queb LIKE sy-tabix VALUE 10000,
* << Fim da exclusão
* >> Início da inclusão:
v_queb LIKE sy-tabix VALUE 100000,
* << Fim da inclusão
v_mens(255) TYPE c,
v_perc TYPE i,
v_tam TYPE i,
v_result,
v_msg(91),
v_ans_aux.
DATA:
BEGIN OF t_exec OCCURS 0 ,
tabname LIKE dd02t-tabname ,
dir LIKE rlgrap-filename ,
...
...
OTHERS = 3.
IF sy-subrc EQ 0.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = t_fieldcat
IMPORTING
ep_table = v_tipo.
ENDIF.
ENDFORM.
FORM executa.
* >> Início da inclusão: FORM EXECUTA
DATA: v_resto TYPE i,
v_tipo_aux TYPE REF TO data,
qtd_arq TYPE i,
qtd_aux(10) TYPE c.
* << Fim da inclusão
IF sy-batch IS INITIAL.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = text-003
text_question = text-002
display_cancel_button = space
IMPORTING
answer = v_resp.
CHECK v_resp = '1'.
ENDIF.
v_tam = strlen( p_dir ) + 1.
PERFORM selecao.
DESCRIBE TABLE itab_tabela LINES v_tot.
IF p_backup = 'X'.
IF sy-batch IS INITIAL.
CALL SCREEN '0002' STARTING AT 30 6.
ENDIF.
IF v_queb IS INITIAL.
* >> Início da exclusão: FORM EXECUTA
v_queb = 10000.
* << Fim da exclusão
* >> Início da inclusão: FORM EXECUTA
v_queb = 100000.
* << Fim da inclusão
ENDIF.
ENDIF.
LOOP AT itab_tabela.
v_perc = sy-tabix * 100 / v_tot.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = v_perc
text = itab_tabela.
PERFORM criar_tipo USING itab_tabela CHANGING v_tipo.
* >> Início da exclusão: FORM EXECUTA
ASSIGN v_tipo->* TO: <itab_dados>.
SELECT * FROM (itab_tabela)
INTO TABLE <itab_dados> WHERE sysid <> p_dest.
* << Fim da exclusão
* >> Início da inclusão: FORM EXECUTA
ASSIGN v_tipo->* TO: <tab_aux>.
* << Fim da inclusão
* >> Início da exclusão: FORM EXECUTA
IF sy-subrc = 0.
v_lin = sy-dbcnt.
PERFORM backup.
ELSE.
WRITE: / text-013 , itab_tabela.
ENDIF.
ENDLOOP.
ENDFORM.
FORM selecao.
SELECT tabname FROM dd03l
INTO TABLE itab_tabela
WHERE tabname LIKE '/PWS/ZYTPT%' AND
as4local = 'A' AND
keyflag = 'X' AND
rollname IN ('/PWS/ZYTPL181', 'SYSYSID').
SORT itab_tabela.
ENDFORM.
FORM backup.
DATA: v_resto TYPE i,
v_inicio TYPE i,
v_fim TYPE i,
v_tipo_aux TYPE REF TO data,
qtd_arq TYPE i,
qtd_aux(10) TYPE c.
* << Fim da exclusão
* >> Início da inclusão: FORM BACKUP
SELECT COUNT( * ) FROM (itab_tabela)
INTO v_lin WHERE sysid <> p_dest.
* << Fim da inclusão
IF v_lin > v_queb.
v_resto = v_lin MOD v_queb.
IF v_resto > 0.
qtd_arq = ( v_lin DIV v_queb ) + 1.
ELSE.
qtd_arq = v_lin DIV v_queb.
ENDIF.
ELSE.
qtd_arq = 1.
ENDIF.
* >> Início da exclusão: FORM BACKUP
v_inicio = 1.
v_fim = v_queb.
* << Fim da exclusão
* >> Início da inclusão: FORM BACKUP
WHILE sy-subrc EQ 0.
* << Fim da inclusão
* >> Início da exclusão: FORM BACKUP
CREATE DATA v_tipo_aux LIKE <itab_dados>.
* << Fim da exclusão
* >> Início da inclusão: FORM BACKUP
SELECT * FROM (itab_tabela) UP TO v_queb ROWS
INTO TABLE <tab_aux> WHERE sysid <> p_dest.
* << Fim da inclusão
* >> Início da exclusão: FORM BACKUP
ASSIGN v_tipo_aux->* TO <tab_aux>.
* << Fim da exclusão
* >> Início da inclusão: FORM BACKUP
IF sy-subrc = 0.
* << Fim da inclusão
* >> Início da exclusão: FORM BACKUP
DO qtd_arq TIMES.
* << Fim da exclusão
qtd_arq_aux = sy-index.
qtd_aux = qtd_arq.
v_perc = sy-index * 100 / qtd_arq.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = v_perc
text = itab_tabela.
SHIFT qtd_arq_aux LEFT DELETING LEADING space.
SHIFT qtd_aux LEFT DELETING LEADING space.
* >> Início da exclusão: FORM BACKUP
CLEAR <tab_aux>.
REFRESH <tab_aux>.
APPEND LINES OF <itab_dados>
FROM v_inicio TO v_fim
TO <tab_aux>.
* << Fim da exclusão
IF p_backup = 'X'.
IF NOT sy-batch IS INITIAL.
* >> Início da exclusão: FORM BACKUP
CONCATENATE p_dir '/' itab_tabela+5 '_' qtd_arq_aux 'of' qtd_aux
* << Fim da exclusão
* >> Início da inclusão: FORM BACKUP
CONCATENATE p_dir '/' itab_tabela+5 '_'
qtd_arq_aux 'of' qtd_aux
* << Fim da inclusão
'.bkp_sysid' INTO v_file.
PERFORM down_server.
ELSE.
* >> Início da exclusão: FORM BACKUP
CONCATENATE p_dir '\' itab_tabela+5 '_' qtd_arq_aux 'of' qtd_aux
* << Fim da exclusão
* >> Início da inclusão: FORM BACKUP
CONCATENATE p_dir '\' itab_tabela+5 '_'
qtd_arq_aux 'of' qtd_aux
* << Fim da inclusão
'.bkp_sysid' INTO v_file.
PERFORM down_local.
ENDIF.
ENDIF.
* >> Início da inclusão: FORM BACKUP
PERFORM atualizar_tabela.
ELSE.
IF sy-index EQ 1.
WRITE: / text-013 , itab_tabela.
ENDIF.
ENDIF.
ENDWHILE.
ENDLOOP.
* << Fim da inclusão
* >> Início da exclusão: FORM BACKUP
v_inicio = v_fim + 1.
v_fim = v_inicio + v_queb - 1.
* << Fim da exclusão
* >> Início da inclusão: FORM BACKUP
ENDFORM.
FORM selecao.
SELECT tabname FROM dd03l
INTO TABLE itab_tabela
WHERE tabname LIKE '/PWS/ZYTPT%' AND
as4local = 'A' AND
keyflag = 'X' AND
rollname IN ('/PWS/ZYTPL181', 'SYSYSID').
SORT itab_tabela.
ENDFORM.
* << Fim da inclusão
* >> Início da exclusão: FORM BACKUP
PERFORM atualizar_tabela.
ENDDO.
ENDFORM.
* << Fim da exclusão
FORM atualizar_tabela.
DELETE (itab_tabela) FROM TABLE <tab_aux>.
LOOP AT <tab_aux> ASSIGNING <wa_tabela>.
ASSIGN COMPONENT 'SYSID' OF STRUCTURE <wa_tabela> TO <valor>.
<valor> = p_dest.
MODIFY <tab_aux> FROM <wa_tabela>.
ENDLOOP.
MODIFY (itab_tabela) FROM TABLE <tab_aux>.
COMMIT WORK.
IF sy-subrc = 0.
...