Skip to content

Instantly share code, notes, and snippets.

@hugo-dc
Created October 10, 2012 18:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hugo-dc/3867666 to your computer and use it in GitHub Desktop.
Save hugo-dc/3867666 to your computer and use it in GitHub Desktop.
Backup to transparent tables with common key
*&---------------------------------------------------------------------*
*& Report ZMAY_BACKUP
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zmay_backup.
TABLES:
zclients_may_cat,
zhcortes_may_cat,
zdcortes_may_cat,
zcmc_anticipos,
zcorte_bloqueado.
DATA:
ti_clientes LIKE zclients_may_cat OCCURS 0 WITH HEADER LINE,
ti_hcortes LIKE zhcortes_may_cat OCCURS 0 WITH HEADER LINE,
ti_dcortes LIKE zdcortes_may_cat OCCURS 0 WITH HEADER LINE,
ti_anticipos LIKE zcmc_anticipos OCCURS 0 WITH HEADER LINE,
ti_corte_blq LIKE zcorte_bloqueado OCCURS 0 WITH HEADER LINE,
BEGIN OF ti_file OCCURS 0,
line(600),
END OF ti_file,
BEGIN OF ti_tables OCCURS 0,
zeta LIKE dd02l-tabname,
it(12),
END OF ti_tables.
DATA:
ref_tab TYPE REF TO data.
DATA:
ti_uno LIKE rfc_db_opt OCCURS 0 WITH HEADER LINE,
ti_dos LIKE tab512 OCCURS 0.
FIELD-SYMBOLS:
<itable> TYPE table,
<wa> TYPE ANY,
<field>.
DATA:
ti_fields LIKE rfc_db_fld OCCURS 0 WITH HEADER LINE,
field TYPE string,
fname TYPE string,
len TYPE i,
v_ans TYPE c.
*--------------------------------------------------------------------*
*--------------------------------------------------------------------*
*
*--------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS:
p_kunnr LIKE kna1-kunnr,
p_dw RADIOBUTTON GROUP r1,
p_up RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF BLOCK b1.
*--------------------------------------------------------------------*
*
*--------------------------------------------------------------------*
INITIALIZATION.
PERFORM add_table USING: 'zclients_may_cat' 'ti_clientes',
'zhcortes_may_cat' 'ti_hcortes',
'zdcortes_may_cat' 'ti_dcortes',
'zcmc_anticipos' 'ti_anticipos',
'zcorte_bloqueado' 'ti_corte_blq'.
*--------------------------------------------------------------------*
*
*--------------------------------------------------------------------*
START-OF-SELECTION.
CASE 'X'.
WHEN p_dw.
PERFORM download USING p_kunnr.
WHEN p_up.
PERFORM upload USING p_kunnr.
ENDCASE.
*&---------------------------------------------------------------------*
*& Form DOWNLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_KUNNR text
*----------------------------------------------------------------------*
FORM download USING i_kunnr.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = '¿Realmente quiere eliminar los registros de las tablas?'
default_button = '2'
IMPORTING
answer = v_ans.
IF v_ans <> '1'.
EXIT.
ENDIF.
LOOP AT ti_tables.
CLEAR:
ti_uno[],
ti_dos[],
ti_fields[],
ti_file[],
ti_file.
TRANSLATE ti_tables-zeta TO UPPER CASE.
CALL FUNCTION 'RFC_READ_TABLE'
EXPORTING
query_table = ti_tables-zeta
TABLES
OPTIONS = ti_uno
fields = ti_fields
data = ti_dos.
CREATE DATA ref_tab TYPE TABLE OF (ti_tables-zeta).
ASSIGN ref_tab->* TO <itable>.
SELECT * FROM (ti_tables-zeta) INTO TABLE <itable>
WHERE kunnr = i_kunnr.
IF sy-subrc <> 0.
WRITE:/ 'No se encontraron registros en la tabla', ti_tables-zeta, 'para el cliente', i_kunnr,
/ 'no se hace nada para esta tabla', /.
CONTINUE.
ENDIF.
LOOP AT <itable> ASSIGNING <wa>.
LOOP AT ti_fields.
field = '<WA>'.
CONCATENATE field '-' ti_fields-fieldname INTO field.
ASSIGN (field) TO <field>.
field = <field>.
CONCATENATE ti_file ',' field INTO ti_file.
ENDLOOP.
len = STRLEN( ti_file ).
ti_file = ti_file+1(len).
APPEND ti_file.
ENDLOOP.
AT NEW it.
fname = ti_tables-zeta.
CONCATENATE 'C:\Proyectos_SAP\respaldo_c8q\' i_kunnr '+' fname '.txt' INTO fname.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = fname
TABLES
data_tab = ti_file.
IF sy-subrc = 0.
DELETE FROM (ti_tables-zeta)
WHERE kunnr = i_kunnr.
WRITE:/ '>> Se ha eliminado de tabla Z:', ti_tables-zeta, 'para el cliente', i_kunnr, 'y respaldado en el archivo: ', fname.
ELSE.
WRITE:/ 'Ocurrió un error al descargar la tabla', ti_tables-zeta, 'para el cliente', i_kunnr, '. No se eliminó de tabla Z'.
ENDIF.
ENDAT.
ENDLOOP.
ENDFORM. " DOWNLOAD
*&---------------------------------------------------------------------*
*& Form UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_KUNNR text
*----------------------------------------------------------------------*
FORM upload USING i_kunnr.
DATA:
ti_values TYPE char100 OCCURS 0 WITH HEADER LINE,
ix TYPE i.
LOOP AT ti_tables.
fname = 'C:\Proyectos_SAP\respaldo_c8q\'.
CONCATENATE fname i_kunnr '+' ti_tables-zeta '.txt' INTO fname.
CLEAR ti_file[].
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = fname
TABLES
data_tab = ti_file
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc = 0.
LOOP AT ti_file.
CLEAR: ti_fields[].
SPLIT ti_file AT ',' INTO TABLE ti_values.
ASSIGN (ti_tables-zeta) TO <wa>.
TRANSLATE ti_tables-zeta TO UPPER CASE.
CALL FUNCTION 'RFC_READ_TABLE'
EXPORTING
query_table = ti_tables-zeta
TABLES
OPTIONS = ti_uno
fields = ti_fields
data = ti_dos.
LOOP AT ti_fields.
ix = sy-tabix.
LOOP AT ti_values.
IF ix = sy-tabix.
CONCATENATE ti_tables-zeta '-' ti_fields-fieldname INTO field.
ASSIGN (field) TO <field>.
<field> = ti_values.
EXIT.
ENDIF.
ENDLOOP.
ENDLOOP.
ASSIGN (ti_tables-zeta) TO <field>.
INSERT (ti_tables-zeta) FROM <field>.
IF sy-subrc = 0.
WRITE: / 'Se ha cargado información en tabla ', ti_tables-zeta, 'para el cliente', i_kunnr.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM. " UPLOAD
*&---------------------------------------------------------------------*
*& Form ADD_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0116 text
* -->P_0117 text
*----------------------------------------------------------------------*
FORM add_table USING p_zeta
p_it.
ti_tables-zeta = p_zeta.
ti_tables-it = p_it.
APPEND ti_tables.
ENDFORM. " ADD_TABLE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment