You are on page 1of 29

PROGRAM zmmajuste_inventario.

TABLES: mara, mard, marc, makt, msku , t001l, kna1, mbew, *mbew, *marc.
TYPE-POOLS vrm.
* Definicion de datos para carga el Excel.
TYPES kcde_row_col(4) TYPE n.
TYPES: kcde_intern_value(32).
TYPES: BEGIN OF kcde_intern_struc,
row TYPE kcde_row_col,
col TYPE kcde_row_col,
value TYPE kcde_intern_value,
END OF kcde_intern_struc.
TYPES: kcde_intern TYPE kcde_intern_struc OCCURS 0.
DATA: excel TYPE kcde_intern,
w_excel TYPE kcde_intern_struc.
DATA: contador TYPE i.
*local class to handle semantic checks
CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA: g_verifier TYPE REF TO lcl_event_receiver.
DATA pr_data_changed.
DATA: ok_code LIKE sy-ucomm,
save_ok LIKE sy-ucomm,
g_container TYPE scrfname VALUE 'BCALV_GRID',
g_grid TYPE REF TO cl_gui_alv_grid,
g_custom_container TYPE REF TO cl_gui_custom_container,
gt_fieldcat TYPE lvc_t_fcat,
gs_layout TYPE lvc_s_layo,
g_max TYPE i VALUE 100,
g_success TYPE c.
TYPES: BEGIN OF proc_log,
matnr LIKE mara-matnr,
maktx LIKE makt-maktx,
erfmg LIKE goitem-erfmg,
doc LIKE bapi2017_gm_head_ret, "Documento Creado
return LIKE bapiret2, "Errores devueltos
icon TYPE iconname,
END OF proc_log.
DATA: eproc_log TYPE proc_log.
DATA: grid2 TYPE REF TO cl_gui_alv_grid,
* reference to dialogbox container.
dialogbox_container TYPE REF TO cl_gui_dialogbox_container,
log_fieldcat TYPE lvc_t_fcat,
res_fieldcat TYPE lvc_t_fcat.
DATA: BEGIN OF gt_proc_log OCCURS 0.
INCLUDE STRUCTURE eproc_log.
DATA: END OF gt_proc_log.
DATA: BEGIN OF gt_proc_res OCCURS 0,
matnr LIKE mara-matnr,
doc LIKE bapi2017_gm_head_ret,
error TYPE i,
END OF gt_proc_res.
* Variables para gestin de variantes en ALV.
DATA: x_save VALUE 'A'.
DATA: g_repid TYPE sy-repid.
DATA: gx_variant LIKE disvariant,
g_variant LIKE disvariant,
g_save(1) TYPE c,
g_default(1) TYPE c,
g_exit(1) TYPE c.
TYPES: BEGIN OF stock,
werks LIKE marc-werks,
lgort LIKE mard-lgort,
matnr LIKE mara-matnr, "Material
maktx LIKE makt-maktx, "Texto breve material
labst LIKE mard-labst, "Stock
labs2 LIKE mard-labst, "Stock Sap
meins LIKE mara-meins, "Unidad de Medida
difer LIKE mard-labst, "Diferencia (Cantidad a ajustar).
lvorm LIKE mara-lvorm, "Peticion borrado a nivel mdte
mstae LIKE mara-mstae, "Status material a nivel mdte
lvorc LIKE marc-lvorm, "Peticion borrado a nivel centro
mmsta LIKE marc-mmsta, "Status material a nivel centro
error(1),
desc_error(30),
END OF stock.
DATA: g_stock TYPE stock.
TYPES: BEGIN OF estr_alv,
werks LIKE marc-werks,
lgort LIKE mard-lgort,
matnr LIKE mara-matnr, "Material
maktx LIKE makt-maktx, "Texto breve material
labst LIKE mard-labst, "Stock Fichero
labs2 LIKE mard-labst, "Stock Sap
meins LIKE mara-meins, "Unidad de Medida
difer LIKE mard-labst, "Diferencia (Cantidad a ajustar).
lvorm LIKE mara-lvorm, "Peticion borrado a nivel mdte
mstae LIKE mara-mstae, "Status material a nivel mdte
lvorc LIKE marc-lvorm, "Peticion borrado a nivel centro
mmsta LIKE marc-mmsta, "Status material a nivel centro
error(1),
desc_error(30),
celltab TYPE lvc_t_styl,
color TYPE lvc_t_scol,
END OF estr_alv.
DATA: BEGIN OF gt_outtab OCCURS 0. "with header line
INCLUDE STRUCTURE g_stock.
DATA: celltab TYPE lvc_t_styl.
DATA: color TYPE lvc_t_scol.
DATA: END OF gt_outtab.
DATA: g_rsnum LIKE rkpf-rsnum,
g_rspos LIKE resb-rspos.
*Resultados tras la ejecucion de la creacion de vistas
DATA: BEGIN OF alv OCCURS 0,
mtart LIKE mara-mtart,
matnr LIKE mara-matnr,
maktx LIKE makt-maktx,
bklas LIKE mbew-bklas,
peinh LIKE mbew-peinh,
END OF alv.
*Resultados de la comprobacion
DATA: BEGIN OF alv2 OCCURS 0,
mtart LIKE mara-mtart,
matnr LIKE mara-matnr,
maktx LIKE makt-maktx,
texto(40),
END OF alv2.
***************************************************************
* Selection Screen
*-------------------------------------------
SELECTION-SCREEN: BEGIN OF BLOCK sele0 WITH FRAME TITLE text-000.
PARAMETERS:
nom_fic LIKE rlgrap-filename OBLIGATORY.
PARAMETERS: p_fecha LIKE sy-datum DEFAULT sy-datum OBLIGATORY,
p_texto TYPE bktxt DEFAULT 'Introduzca texto' OBLIGATORY.
*SELECT-OPTIONS: matnr FOR mara-matnr.
PARAMETERS: werks LIKE t001l-werks DEFAULT '1003' OBLIGATORY,
lgort LIKE t001l-lgort DEFAULT '1003' OBLIGATORY,
kostl LIKE csks-kostl DEFAULT '1003300001' OBLIGATORY.
SELECTION-SCREEN: END OF BLOCK sele0.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_vari LIKE disvariant-variant. " ALV Variant
SELECTION-SCREEN SKIP 1.
*INCLUDE bdcrecxx.
*---------------------------------------------------------------------*
* MAIN *
*---------------------------------------------------------------------*
INITIALIZATION.
g_repid = sy-repid.
g_save = 'A'.
PERFORM variant_init.
* Get default variant
gx_variant = g_variant.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = g_save
CHANGING
cs_variant = gx_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 0.
p_vari = gx_variant-variant.
ENDIF.
* Para que aparezca el dilogo de peticin de fichero a cargar.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR nom_fic .
* achtung: die hilfe zeigt das dateisystem des prsentationsservers
MESSAGE i041(du).
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = nom_fic
def_path = '/'
mask = ',*.*,*.*.'
mode = 'O'
title = text-dsp
IMPORTING
filename = nom_fic
EXCEPTIONS
inv_winsys = 01
no_batch = 02
selection_cancel = 03
selection_error = 04.
* Process on value request
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
PERFORM f4_for_variant.
START-OF-SELECTION.
* Leo la tabla de saldos de.
CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
EXPORTING
filename = nom_fic
* Migracion Enterprise
i_begin_col = 1
i_begin_row = 1
i_end_col = 2
i_end_row = 25000
* RANGE_BEGIN = 'A1'
* RANGE_END = 'O9999'
* Migracion Enterprise
TABLES
intern = excel
EXCEPTIONS
OTHERS = 1.
DATA: linea TYPE i.
CLEAR gt_outtab.
REFRESH gt_outtab.
linea = 1.
LOOP AT excel INTO w_excel.
IF linea NE w_excel-row.
APPEND gt_outtab.
CLEAR gt_outtab.
linea = w_excel-row.
ENDIF.
IF w_excel-col = 1.
WRITE w_excel-value TO gt_outtab-matnr.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = gt_outtab-matnr
IMPORTING
output = gt_outtab-matnr
* EXCEPTIONS
* LENGTH_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* gt_outtab-matnr = w_excel-value.
ENDIF.
IF w_excel-col = 2.
gt_outtab-labst = w_excel-value.
ENDIF.
ENDLOOP.
APPEND gt_outtab.
* Recorro la tabla para completar la informacin que falta.
LOOP AT gt_outtab.
* Descripcion del material
CLEAR mara.
SELECT SINGLE * FROM mara
WHERE matnr = gt_outtab-matnr.
IF sy-subrc NE 0.
gt_outtab-error = 'X'.
gt_outtab-desc_error = 'MATERIAL INEXISTENTE EN SAP'.
ENDIF.
CLEAR makt.
SELECT SINGLE * FROM makt
WHERE matnr = gt_outtab-matnr
AND spras = sy-langu.
CLEAR marc.
SELECT SINGLE * FROM marc
WHERE matnr = gt_outtab-matnr
AND werks = werks.
CLEAR mard.
SELECT SINGLE * FROM mard
WHERE matnr = gt_outtab-matnr
AND werks = werks
AND lgort = lgort.
gt_outtab-werks = werks.
gt_outtab-lgort = lgort.
gt_outtab-maktx = makt-maktx. "Texto breve material
gt_outtab-labs2 = mard-labst. "Stock Sap
gt_outtab-meins = mara-meins. "Unidad de Medida
gt_outtab-difer = gt_outtab-labs2 - gt_outtab-labst. "Diferencia (Cantidad
a ajustar).
gt_outtab-lvorm = mara-lvorm. "Peticion borrado a nivel mdte
gt_outtab-mstae = mara-mstae. "Status material a nivel mdte
gt_outtab-lvorc = marc-lvorm. "Peticion borrado a nivel centro
gt_outtab-mmsta = marc-mmsta. "Status material a nivel centro
MODIFY gt_outtab.
ENDLOOP.
* Llamo al control para visualizar resultados y continuar con las operaciones.
CALL SCREEN 100.
*---------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
*.............
PUBLIC SECTION.
TYPES: BEGIN OF stock_key.
TYPES: lgort TYPE lgort.
TYPES: matnr TYPE matnr.
TYPES: kunnr TYPE kunnr.
TYPES: END OF stock_key.
TYPES: stock_keys TYPE STANDARD TABLE OF stock_key,
stock_table TYPE STANDARD TABLE OF stock,
sestr_alv TYPE STANDARD TABLE OF estr_alv.
METHODS:
handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed,
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column,
handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
handle_user_command_2
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
handle_before_user_command_2
FOR EVENT before_user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive,
handle_toolbar_2
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive,
get_inserted_rows
EXPORTING
inserted_rows TYPE stock_keys,
get_modified_rows
EXPORTING
modified_rows TYPE sestr_alv,
get_deleted_rows
EXPORTING
deleted_rows TYPE stock_table,
set_toolbar_active,
set_toolbar_inactive,
cambiar_a_resumen,
cambiar_a_detalle,
refresh_delta_tables,
set_table_is_initial,
set_table_is_not_initial,
table_is_initial
RETURNING value(initial) TYPE char01,
handle_double_click_dbox
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column,
handle_close
FOR EVENT close OF cl_gui_dialogbox_container
IMPORTING sender.
*..............
PRIVATE SECTION.
* Indicador Salida final activado/desactivado
DATA: sf TYPE c.
DATA: toolbar_status.
* 4.Define internal tables to remember inserted and deleted lines,
* thus the delta between input made after the last saving.
DATA: modified_rows TYPE STANDARD TABLE OF estr_alv.
DATA: inserted_rows TYPE stock_keys,
deleted_rows TYPE STANDARD TABLE OF stock.
DATA: dialogbox_tabla TYPE c.
DATA: dialogbox_status TYPE c.
"'X': does exist, SPACE: does not ex.
* This flag is set if any error occured in one of the
* following methods:
DATA: error_in_data TYPE c.
* This flag signals that no records were read for the flight
* table initially:
DATA: initial_table TYPE c.
** Methods to modularize event handler method HANDLE_DATA_CHANGED:
*
METHODS:
update_delta_tables
IMPORTING
pr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
METHODS:
perform_semantic_checks
IMPORTING
pr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
METHODS:
get_cell_values
IMPORTING
row_id TYPE int4
pr_data_changed TYPE REF TO cl_alv_changed_data_protocol
EXPORTING
key TYPE stock_key.
ENDCLASS. "lcl_event_receiver DEFINITION
**************************************************************
*---------------------------------------------------------------------*
* MODULE PBO OUTPUT *
*---------------------------------------------------------------------*
MODULE pbo OUTPUT.
SET PF-STATUS 'MAIN100'.
SET TITLEBAR 'MAIN100'.
IF g_custom_container IS INITIAL.
PERFORM create_and_init_alv CHANGING gt_outtab[]
gt_fieldcat.
ENDIF.
ENDMODULE. "pbo OUTPUT
*---------------------------------------------------------------------*
* MODULE PAI INPUT *
*---------------------------------------------------------------------*
MODULE pai INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE TO SCREEN 0.
PERFORM exit_program.
* when 'SWITCH'.
* perform switch_edit_mode.
WHEN OTHERS.
* do nothing
ENDCASE.
ENDMODULE. "pai INPUT
*---------------------------------------------------------------------*
* Form VARIANT_INIT
*---------------------------------------------------------------------*
FORM variant_init.
CLEAR g_variant.
g_variant-report = g_repid.
ENDFORM. "variant_init
*---------------------------------------------------------------------*
* FORM EXIT_PROGRAM *
*---------------------------------------------------------------------*
FORM exit_program.
DATA: t_modified_rows TYPE TABLE OF estr_alv,
lineas TYPE i.
DATA: texto1(70), texto2(70),titulo(70),respuesta(1).
DATA: l_valid TYPE c.
*
CALL METHOD g_grid->check_changed_data
IMPORTING
e_valid = l_valid.
IF l_valid IS INITIAL.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = text-i06
txt1 = text-i07
txt2 = text-i08
txt3 = text-i09.
ENDIF.
CALL METHOD g_verifier->get_modified_rows
IMPORTING
modified_rows = t_modified_rows.
DESCRIBE TABLE t_modified_rows LINES lineas.
IF lineas > 0.
texto1 = ' Desea Salir ?'.
texto2 = space.
titulo = 'Confirmacin Salida de Pantalla'.
PERFORM pide_confirmac USING 'N' texto1 texto2 titulo
CHANGING respuesta.
IF respuesta = 'J'.
LEAVE TO SCREEN 0.
ENDIF.
ELSE.
LEAVE TO SCREEN 0.
ENDIF.
ENDFORM. "exit_program
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_FIELDCAT text
*----------------------------------------------------------------------*
FORM build_fieldcat CHANGING pt_fieldcat TYPE lvc_t_fcat.
DATA ls_fcat TYPE lvc_s_fcat.
CLEAR pt_fieldcat.
REFRESH pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'WERKS'.
ls_fcat-col_pos = 1.
ls_fcat-outputlen = 8.
ls_fcat-coltext = 'Centro'.
ls_fcat-scrtext_l = 'Centro'.
ls_fcat-scrtext_m = 'Centro'.
ls_fcat-scrtext_s = 'Centro'.
* ls_fcat-emphasize = 'C200'.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'LGORT'.
ls_fcat-col_pos = 2.
ls_fcat-outputlen = 8.
ls_fcat-coltext = 'Almacen'.
ls_fcat-scrtext_l = 'Almacen'.
ls_fcat-scrtext_m = 'Almacen'.
ls_fcat-scrtext_s = 'Almacen'.
* ls_fcat-emphasize = 'C200'.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'MATNR'.
ls_fcat-col_pos = 3.
ls_fcat-outputlen = 8.
ls_fcat-coltext = 'Material'.
ls_fcat-scrtext_l = 'Material'.
ls_fcat-scrtext_m = 'Material'.
ls_fcat-scrtext_s = 'Material'.
ls_fcat-emphasize = 'C200'.
ls_fcat-no_zero = 'X'.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'MAKTX'.
ls_fcat-col_pos = 4.
ls_fcat-outputlen = 40.
ls_fcat-coltext = 'Descripcion'.
ls_fcat-scrtext_l = 'Descripcion'.
ls_fcat-scrtext_m = 'Descripcion'.
ls_fcat-scrtext_s = 'Descripcion'.
ls_fcat-emphasize = 'C200'.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'LABS2'.
ls_fcat-col_pos = 4.
ls_fcat-outputlen = 15.
ls_fcat-coltext = 'Stock SAP'.
ls_fcat-scrtext_l = 'Stock SAP'.
ls_fcat-scrtext_m = 'Stock SAP'.
ls_fcat-scrtext_s = 'Stock SAP'.
ls_fcat-emphasize = 'C200'.
* ls_fcat-no_zero = 'X'.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'LABST'.
ls_fcat-col_pos = 5.
ls_fcat-outputlen = 15.
ls_fcat-coltext = 'Stock Contado'.
ls_fcat-scrtext_l = 'Stock Contado'.
ls_fcat-scrtext_m = 'Stock Contado'.
ls_fcat-scrtext_s = 'Stock Contado'.
ls_fcat-emphasize = 'C200'.
* ls_fcat-no_zero = 'X'.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'DIFER'.
ls_fcat-col_pos = 6.
ls_fcat-outputlen = 15.
ls_fcat-coltext = 'Difer.Stock'.
ls_fcat-scrtext_l = 'Difer.Stock'.
ls_fcat-scrtext_m = 'Difer.Stock'.
ls_fcat-scrtext_s = 'Difer.Stock'.
ls_fcat-emphasize = 'C200'.
* ls_fcat-no_zero = 'X'.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'ERROR'.
ls_fcat-col_pos = 7.
ls_fcat-outputlen = 6.
ls_fcat-coltext = 'Error'.
ls_fcat-scrtext_l = 'Error'.
ls_fcat-scrtext_m = 'Error'.
ls_fcat-scrtext_s = 'Error'.
ls_fcat-emphasize = 'Error'.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'DESC_ERROR'.
ls_fcat-col_pos = 8.
ls_fcat-outputlen = 40.
ls_fcat-coltext = 'Error'.
ls_fcat-scrtext_l = 'Error'.
ls_fcat-scrtext_m = 'Error'.
ls_fcat-scrtext_s = 'Error'.
ls_fcat-emphasize = 'Error'.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'LVORM'.
ls_fcat-col_pos = 10.
ls_fcat-outputlen = 3.
ls_fcat-coltext = 'PB'.
ls_fcat-scrtext_l = 'PB'.
ls_fcat-scrtext_m = 'PB'.
ls_fcat-scrtext_s = 'PB'.
ls_fcat-emphasize = 'C200'.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'MSTAE'.
ls_fcat-col_pos = 11.
ls_fcat-outputlen = 3.
ls_fcat-coltext = 'ST'.
ls_fcat-scrtext_l = 'ST'.
ls_fcat-scrtext_m = 'ST'.
ls_fcat-scrtext_s = 'ST'.
ls_fcat-emphasize = 'C200'.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'LVORC'.
ls_fcat-col_pos = 12.
ls_fcat-outputlen = 4.
ls_fcat-coltext = 'PBC'.
ls_fcat-scrtext_l = 'PBC'.
ls_fcat-scrtext_m = 'PBC'.
ls_fcat-scrtext_s = 'PBC'.
ls_fcat-emphasize = 'C200'.
APPEND ls_fcat TO pt_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'MMSTA'.
ls_fcat-col_pos = 13.
ls_fcat-outputlen = 4.
ls_fcat-coltext = 'STC'.
ls_fcat-scrtext_l = 'STC'.
ls_fcat-scrtext_m = 'STC'.
ls_fcat-scrtext_s = 'STC'.
ls_fcat-emphasize = 'C200'.
APPEND ls_fcat TO pt_fieldcat.
ENDFORM. "build_fieldcat
*&---------------------------------------------------------------------*
*& Form CREATE_AND_INIT_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_OUTTAB text
* <--P_GT_FIELDCAT text
* <--P_GS_LAYOUT text
*----------------------------------------------------------------------*
FORM create_and_init_alv CHANGING pt_outtab LIKE gt_outtab[]
pt_fieldcat TYPE lvc_t_fcat.
DATA: ll TYPE lvc_s_row,
cc TYPE lvc_s_col.
DATA: lt_exclude TYPE ui_functions.
CREATE OBJECT g_custom_container
EXPORTING
container_name = g_container.
CREATE OBJECT g_grid
EXPORTING
i_parent = g_custom_container.
* Create Objekt to verify input values.
* (This object is already needed in form SELECT_DATA).
CREATE OBJECT g_verifier.
SET HANDLER g_verifier->handle_user_command FOR g_grid.
SET HANDLER g_verifier->handle_data_changed FOR g_grid.
SET HANDLER g_verifier->handle_double_click FOR g_grid.
SET HANDLER g_verifier->handle_toolbar FOR g_grid.
PERFORM select_data CHANGING pt_outtab[].
* Build fieldcat and set columns PLANETYPE and SEATSOCC
* edit enabled.
PERFORM build_fieldcat CHANGING pt_fieldcat.
PERFORM exclude_tb_functions CHANGING lt_exclude.
gs_layout-stylefname = 'CELLTAB'.
* gs_layout-grid_title =
* 'Traslado de Reservas Restauracin (Gestin)'.
gs_layout-ctab_fname = 'COLOR'.
gx_variant-variant = p_vari.
CALL METHOD g_grid->set_table_for_first_display
EXPORTING
it_toolbar_excluding = lt_exclude
is_layout = gs_layout
is_variant = gx_variant
i_save = x_save
CHANGING
it_fieldcatalog = pt_fieldcat
it_outtab = pt_outtab[].
* Set editable cells to ready for input initially
* RE
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
* RE
** Refresh Tootbar
* CALL METHOD g_grid->set_toolbar_interactive.
CALL METHOD cl_gui_control=>set_focus
EXPORTING
control = g_grid.
ENDFORM. "CREATE_AND_INIT_ALV
*&---------------------------------------------------------------------*
*& Form select_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_OUTTAB text
*----------------------------------------------------------------------*
FORM select_data CHANGING pt_outtab LIKE gt_outtab[].
DATA: lt_stock TYPE TABLE OF stock,
ls_stock TYPE stock,
ls_outtab LIKE LINE OF gt_outtab,
l_index TYPE i,
lt_celltab TYPE lvc_t_styl,
lt_color TYPE lvc_s_scol,
num_lin TYPE i,
almacen LIKE mard-werks.
DATA: stock LIKE mard-labst.
DESCRIBE TABLE pt_outtab LINES num_lin.
IF num_lin = 0.
* Tell Verify-Objekt that the table was initial
CALL METHOD g_verifier->set_table_is_initial.
ELSE.
CALL METHOD g_verifier->set_table_is_not_initial.
* move corresponding fields from lt_reserva to gt_outtab
* LOOP AT lt_stock INTO ls_stock.
* MOVE-CORRESPONDING ls_stock TO ls_outtab.
* APPEND ls_outtab TO pt_outtab.
* ENDLOOP.
* 3.Set all cells of the table non-editable by using the style table.
LOOP AT pt_outtab INTO ls_outtab.
l_index = sy-tabix.
IF ls_outtab-error = 'X'.
lt_color-fname = 'MATNR'.
lt_color-nokeycol = 'X'.
lt_color-color-col = 6.
INSERT lt_color INTO TABLE ls_outtab-color.
lt_color-fname = 'MAKTX'.
lt_color-nokeycol = 'X'.
lt_color-color-col = 6.
INSERT lt_color INTO TABLE ls_outtab-color.
lt_color-fname = 'ERROR'.
lt_color-nokeycol = 'X'.
lt_color-color-col = 6.
INSERT lt_color INTO TABLE ls_outtab-color.
lt_color-fname = 'DESC_ERROR'.
lt_color-nokeycol = 'X'.
lt_color-color-col = 6.
INSERT lt_color INTO TABLE ls_outtab-color.
ELSE.
REFRESH ls_outtab-color.
ENDIF.
* Copy your celltab to the celltab of the current row of gt_outtab.
INSERT LINES OF lt_celltab INTO TABLE ls_outtab-celltab.
MODIFY pt_outtab FROM ls_outtab INDEX l_index.
ENDLOOP.
MESSAGE s008(zsistemas) WITH 'Total registros'
'Seleccionados:' num_lin.
ENDIF.
ENDFORM. " select_data
*---------------------------------------------
FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
*
DATA ls_exclude TYPE ui_func.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_graph.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_help.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_info.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_refresh.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_filter.
APPEND ls_exclude TO pt_exclude.
ENDFORM. " EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*& Form switch_edit_mode
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*FORM switch_edit_mode .
* IF g_grid->is_ready_for_input( ) eq 0.
** set edit enabled cells ready for input
* CALL METHOD g_grid->set_ready_for_input
* EXPORTING i_ready_for_input = 1.
*
* ELSE.
** lock edit enabled cells against input
* CALL METHOD g_grid->set_ready_for_input
* EXPORTING i_ready_for_input = 0.
* ENDIF.
*
*ENDFORM. " switch_edit_mode
*&---------------------------------------------------------------------*
*& Form f4_for_variant
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f4_for_variant .
*
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = g_variant
i_save = g_save
* it_default_fieldcat =
IMPORTING
e_exit = g_exit
es_variant = gx_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 2.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF g_exit = space.
p_vari = gx_variant-variant.
ENDIF.
ENDIF.
ENDFORM. " f4_for_variant
*&---------------------------------------------------------------------*
*& Form PIDE_CONFIRMAC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_1131 text
* -->P_TEXTO1 text
* -->P_TEXTO2 text
* -->P_TITULO text
* <--P_RESPUESTA text
*----------------------------------------------------------------------*
* Funcion para pedir un mensaje de confirmacion (popup).
FORM pide_confirmac USING p_defecto "Opcin por defecto
p_texto1 "Texto1 dentro de la ventana
p_texto2 "Texto2 dentro de la ventana
p_titulo "Titulo de la ventana
CHANGING p_respuesta.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = p_defecto
textline1 = p_texto1
textline2 = p_texto2
titel = p_titulo
IMPORTING
answer = p_respuesta
EXCEPTIONS
OTHERS = 1.
ENDFORM. " PIDE_CONFIRMAC
**---------------------------------------------------------
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_data_changed.
*
DATA: ls_good TYPE lvc_s_modi,
ls_new TYPE lvc_s_moce.
error_in_data = space.
* remember modified lines for saving
CALL METHOD update_delta_tables( er_data_changed ).
* check mt_good_cells semantically
CALL METHOD perform_semantic_checks( er_data_changed ).
IF error_in_data = 'X'.
CALL METHOD er_data_changed->display_protocol.
ENDIF.
ENDMETHOD. "handle_data_changed
**---------------------------------------------------------
METHOD handle_double_click.
*
DATA: ls_stock LIKE LINE OF gt_outtab.
DATA: garg TYPE eqegraarg, contador TYPE i.
DATA: enq TYPE STANDARD TABLE OF seqg3.
* 4.The event DOUBLE_CLICK provides parameters for row and column
* of the click. Use row parameter to select a line of the
* corresponding internal table.
* read selected row from internal table gt_sflight
READ TABLE gt_outtab INDEX e_row-index INTO ls_stock.
ENDMETHOD. "handle_double_click
*-----------------------------------------------------------------------
METHOD handle_toolbar.
* 2.In event handler method for event TOOLBAR: Append own functions
* by using event parameter E_OBJECT.
DATA: ls_toolbar TYPE stb_button.
*....................................................................
* E_OBJECT of event TOOLBAR is of type REF TO CL_ALV_EVENT_TOOLBAR_SET.
* This class has got one attribute, namly MT_TOOLBAR, which
* is a table of type TTB_BUTTON. One line of this table is
* defined by the Structure STB_BUTTON (see data deklaration above).
*
* A remark to the flag E_INTERACTIVE:
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* 'e_interactive' is set, if this event is raised due to
* the call of 'set_toolbar_interactive' by the user.
* You can distinguish this way if the event was raised
* by yourself or by ALV
* (e.g. in method 'refresh_table_display').
* An application of this feature is still unknown... :-)
* append a separator to normal toolbar
CLEAR ls_toolbar.
MOVE 3 TO ls_toolbar-butn_type.
APPEND ls_toolbar TO e_object->mt_toolbar.
* append an icon to put all to nothing
* append a separator to normal toolbar
CLEAR ls_toolbar.
MOVE 3 TO ls_toolbar-butn_type.
APPEND ls_toolbar TO e_object->mt_toolbar.
* append an icon to make doc. material
CLEAR ls_toolbar.
MOVE 'TRASPASO' TO ls_toolbar-function.
MOVE '@K5@' TO ls_toolbar-icon.
MOVE 'Generar Ajuste Inventario'(111) TO ls_toolbar-quickinfo.
MOVE 'Inventario'(112) TO ls_toolbar-text.
MOVE toolbar_status TO ls_toolbar-disabled.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD. "handle_toolbar
*-----------------------------------------------------------------------
METHOD handle_toolbar_2.
DATA: ls_toolbar TYPE stb_button.
* append a separator to normal toolbar
CLEAR ls_toolbar.
MOVE 3 TO ls_toolbar-butn_type.
APPEND ls_toolbar TO e_object->mt_toolbar.
* append an icon to put all to nothing
CLEAR ls_toolbar.
MOVE 'RESUM' TO ls_toolbar-function.
MOVE '@5A@' TO ls_toolbar-icon.
MOVE 'Resumen de Resultados'(111) TO ls_toolbar-quickinfo.
MOVE 'Resumen'(112) TO ls_toolbar-text.
MOVE ' ' TO ls_toolbar-disabled.
APPEND ls_toolbar TO e_object->mt_toolbar.
CLEAR ls_toolbar.
MOVE 'DETAL' TO ls_toolbar-function.
MOVE '@59@' TO ls_toolbar-icon.
MOVE 'Detalle de Resultados'(111) TO ls_toolbar-quickinfo.
MOVE 'Detalle'(112) TO ls_toolbar-text.
MOVE ' ' TO ls_toolbar-disabled.
APPEND ls_toolbar TO e_object->mt_toolbar.
* append a separator to normal toolbar
CLEAR ls_toolbar.
MOVE 3 TO ls_toolbar-butn_type.
APPEND ls_toolbar TO e_object->mt_toolbar.
*
CLEAR ls_toolbar.
MOVE 'EXIT' TO ls_toolbar-function.
MOVE '@3X@' TO ls_toolbar-icon.
MOVE 'Salir de los Resultados'(111) TO ls_toolbar-quickinfo.
MOVE 'Salir'(112) TO ls_toolbar-text.
MOVE ' ' TO ls_toolbar-disabled.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD. "handle_toolbar_2
*-------------------------------------------------------------------
METHOD handle_user_command.
DATA: ll TYPE lvc_s_row,
cc TYPE lvc_s_col,
ss TYPE lvc_s_stbl.
* 3.In event handler method for event USER_COMMAND: Query your
* function codes defined in step 2 and react accordingly.
DATA: lt_rows TYPE lvc_t_row.
CASE e_ucomm.
WHEN 'TRASPASO'.
* CALL METHOD g_grid->get_selected_rows
* IMPORTING
* et_index_rows = lt_rows.
* CALL METHOD cl_gui_cfw=>flush.
* IF sy-subrc NE 0.
** add your handling, for example
* CALL FUNCTION 'POPUP_TO_INFORM'
* EXPORTING
* titel = g_repid
* txt2 = sy-subrc
* txt1 = 'Error in Flush'(500).
* ELSE.
* Set editable cells to ready for input initially
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 0.
CALL METHOD g_verifier->set_toolbar_inactive.
PERFORM generar_traspasos.
IF gt_proc_log IS NOT INITIAL.
IF dialogbox_status IS INITIAL.
dialogbox_status = 'X'.
PERFORM create_detail_list.
ELSE.
CALL METHOD dialogbox_container->set_visible
EXPORTING
visible = 'X'.
CALL METHOD grid2->refresh_table_display.
ENDIF.
ELSE.
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
CALL METHOD g_verifier->set_toolbar_active.
MESSAGE s008(zsistemas) WITH 'No hay nada que traspasar'.
ENDIF.
** Ok code here
* ENDIF.
ENDCASE.
ss-row = 'X'.
ss-col = 'X'.
CALL METHOD g_grid->refresh_table_display
EXPORTING
is_stable = ss.
* ll-index = 1.
* cc-fieldname = 'ERFMG'.
* CALL METHOD g_grid->set_current_cell_via_id
* EXPORTING
* is_row_id = ll
* is_column_id = cc.
ENDMETHOD. "handle_user_command
*-------------------------------------------------------------------
METHOD handle_user_command_2.
DATA: lt_rows TYPE lvc_t_row.
CASE e_ucomm.
WHEN 'RESUM'.
CALL METHOD g_verifier->cambiar_a_resumen.
WHEN 'DETAL'.
CALL METHOD g_verifier->cambiar_a_detalle.
WHEN 'EXIT'.
CALL METHOD g_verifier->handle_close
EXPORTING
sender = dialogbox_container.
ENDCASE.
ENDMETHOD. "handle_user_command_2
*-----------------------------------------------------------------------
METHOD handle_before_user_command_2.
* CASE e_ucomm.
* WHEN '&PRINT'.
* CALL METHOD g_grid->set_user_command
* EXPORTING
* i_ucomm = space.
* ENDCASE.
ENDMETHOD. "handle_before_user_command_2
*-----------------------------------------------------------------------
METHOD handle_close.
DATA: texto1(70), texto2(70),titulo(70),respuesta(1).
* 6.Handle the CLOSE-button of the dialogbox
* set dialogbox invisible
* (the dialogbox is destroyed outomatically when the user
* switches to another dynpro).
texto1 = ' Salir de la aplicacin ?'.
texto2 = space.
titulo = 'Confirmacin Salida de Pantalla'.
PERFORM pide_confirmac USING 'N' texto1 texto2 titulo
CHANGING respuesta.
IF respuesta = 'J'.
CALL METHOD sender->set_visible
EXPORTING
visible = space.
LEAVE TO SCREEN 0.
ENDIF.
* In this example closing the dialogbox leads
* to make it invisible. It is also conceivable to destroy it
* and recreate it if the user doubleclicks a line again.
* Displaying a great amount of data has a greater impact on performance.
ENDMETHOD. "handle_close
*-----------------------------------------------------------------------
METHOD handle_double_click_dbox.
*
DATA: ls_log LIKE LINE OF gt_proc_log.
DATA: ls_res LIKE LINE OF gt_proc_res.
* 4.The event DOUBLE_CLICK provides parameters for row and column
* of the click. Use row parameter to select a line of the
* corresponding internal table.
IF dialogbox_tabla EQ 'D'.
READ TABLE gt_proc_log INDEX e_row-index INTO ls_log.
CALL FUNCTION 'MIGO_DIALOG'
EXPORTING
i_action = 'A04'
i_mblnr = ls_log-doc-mat_doc
i_mjahr = ls_log-doc-doc_year
EXCEPTIONS
illegal_combination = 1
OTHERS = 2.
* IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
ELSE.
READ TABLE gt_proc_res INDEX e_row-index INTO ls_res.
CALL FUNCTION 'MIGO_DIALOG'
EXPORTING
i_action = 'A04'
i_mblnr = ls_res-doc-mat_doc
i_mjahr = ls_res-doc-doc_year
EXCEPTIONS
illegal_combination = 1
OTHERS = 2.
ENDIF.
ENDMETHOD. "handle_double_click_dbox
*-----------------------------------------------------------------------
*-------------------------------------------------------
METHOD update_delta_tables.
DATA: l_ins_row TYPE lvc_s_moce,
l_mod_row TYPE stock,
l_del_row TYPE lvc_s_moce,
ls_key TYPE stock_key,
ls_stock TYPE stock,
ls_outtab LIKE LINE OF gt_outtab.
FIELD-SYMBOLS: <fs> TYPE ANY.
ASSIGN pr_data_changed->mp_mod_rows->* TO <fs>.
modified_rows = <fs>.
ENDMETHOD. "update_delta_tables
*---------------------------------------------------------
METHOD get_cell_values.
* get values of key cells of row ROW_ID
TYPES: kunnr TYPE kunnr.
* RSNUM
CALL METHOD pr_data_changed->get_cell_value
EXPORTING
i_row_id = row_id
i_fieldname = 'LGORT'
IMPORTING
e_value = key-lgort.
IF sy-subrc NE 0.
MESSAGE i000(0k) WITH text-e02. "Fehler beim Einfgen
ENDIF.
* RSPOS
CALL METHOD pr_data_changed->get_cell_value
EXPORTING
i_row_id = row_id
i_fieldname = 'MATNR'
IMPORTING
e_value = key-matnr.
IF sy-subrc NE 0.
MESSAGE i000(0k) WITH text-e02. "Fehler beim Einfgen
ENDIF.
ENDMETHOD. "get_cell_values
*---------------------------------------------------------
METHOD perform_semantic_checks.
DATA: ls_outtab LIKE LINE OF gt_outtab.
DATA: ls_good TYPE lvc_s_modi,
l_bdmng TYPE bdmng.
ENDMETHOD. "perform_semantic_checks
*------------------------------------------------------
METHOD get_inserted_rows.
inserted_rows = me->inserted_rows.
ENDMETHOD. "get_inserted_rows
*------------------------------------------------------
METHOD get_deleted_rows.
deleted_rows = me->deleted_rows.
ENDMETHOD. "get_deleted_rows
*------------------------------------------------------
METHOD get_modified_rows.
modified_rows = me->modified_rows.
ENDMETHOD. "get_modified_rows
*------------------------------------------------------
METHOD refresh_delta_tables.
CLEAR me->inserted_rows[].
CLEAR me->modified_rows[].
CLEAR me->deleted_rows[].
ENDMETHOD. "refresh_delta_tables
*------------------------------------------------------
METHOD set_toolbar_active.
CLEAR toolbar_status.
CALL METHOD g_grid->set_toolbar_interactive.
ENDMETHOD. "set_table_is_initial
*------------------------------------------------------
METHOD set_toolbar_inactive.
toolbar_status = 'X'.
CALL METHOD g_grid->set_toolbar_interactive.
ENDMETHOD. "set_table_is_not_initial
*------------------------------------------------------
METHOD set_table_is_initial.
initial_table = 'X'.
ENDMETHOD. "set_table_is_initial
*------------------------------------------------------
METHOD set_table_is_not_initial.
initial_table = space.
ENDMETHOD. "set_table_is_not_initial
*------------------------------------------------------
METHOD table_is_initial.
IF initial_table = 'X'.
initial = 'X'.
ELSE.
initial = space.
ENDIF.
ENDMETHOD. "table_is_initial
*&---------------------------------------------------------------------*
METHOD cambiar_a_resumen.
dialogbox_tabla = 'R'.
CALL METHOD grid2->set_table_for_first_display
* exporting i_structure_name = 'PROC_LOG'
* is_layout = gs_layout
CHANGING
it_fieldcatalog = res_fieldcat
it_outtab = gt_proc_res[].
ENDMETHOD. " cambiar_a_resumen
*&---------------------------------------------------------------------*
METHOD cambiar_a_detalle.
dialogbox_tabla = 'D'.
CALL METHOD grid2->set_table_for_first_display
* exporting i_structure_name = 'PROC_LOG'
* is_layout = gs_layout
CHANGING
it_fieldcatalog = log_fieldcat
it_outtab = gt_proc_log[].
ENDMETHOD. " cambiar_a_detalle
ENDCLASS. "lcl_event_receiver IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form generar_traspasos
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM generar_traspasos .
DATA: header LIKE bapi2017_gm_head_01.
DATA: code LIKE bapi2017_gm_code.
DATA: item LIKE TABLE OF bapi2017_gm_item_create.
DATA: litem LIKE LINE OF item.
DATA: docs LIKE bapi2017_gm_head_ret.
DATA: return LIKE TABLE OF bapiret2.
DATA: lreturn LIKE LINE OF return.
DATA: ls_outtab LIKE LINE OF gt_outtab.
DATA: numl TYPE i.
DATA: x VALUE 'X'.
DATA: nerr TYPE i.
DATA: contador TYPE i.
DATA: move_type TYPE bwart,
spec_stock TYPE sobkz.
* Determino el tipo de movimientos a realizar
* LO VOY A DETERMINAR A NIVEL DE CADA POSICION
* IF werks <> werkd. "Si centros son distintos es un 301.
* move_type = '301'.
* ELSE. "SI centros son iguales es un 311.
* move_type = '311'.
* ENDIF.
* IF libre = 'X'.
* CLEAR spec_stock.
* ELSE.
* spec_stock = 'W'.
* ENDIF.
SET PARAMETER ID 'NDR' FIELD x.
contador = 1.
LOOP AT gt_outtab INTO ls_outtab.
IF contador = 1.
CLEAR header.
CLEAR code.
CLEAR item.
REFRESH item.
CLEAR return.
REFRESH return.
* Fecha de Doc. y Contab. del traspaso
header-pstng_date = p_fecha.
header-doc_date = p_fecha.
header-header_txt = p_texto.
* 04 = Traspaso
code-gm_code = '06'. "otros mov '03'.
ENDIF.
*
IF ls_outtab-error IS INITIAL AND ls_outtab-difer <> 0.
"No hay ningun error en la linea y la diferencia es distinta de 0.
IF ls_outtab-difer > 0.
move_type = '551'.
ELSEIF ls_outtab-difer < 0.
move_type = '552'.
ELSE.
CONTINUE.
ENDIF.
ELSE.
CONTINUE.
ENDIF.
CLEAR litem.
litem-material = ls_outtab-matnr.
litem-ITEM_TEXT = ls_outtab-maktx.
litem-plant = ls_outtab-werks.
litem-stge_loc = ls_outtab-lgort.
litem-move_type = move_type.
litem-spec_stock = spec_stock.
litem-entry_qnt = ABS( ls_outtab-difer ).
litem-entry_uom = ls_outtab-meins.
litem-costcenter = kostl.
* litem-move_plant = ls_outtab-werkd.
* litem-move_stloc = ls_outtab-lgord.
* IF spec_stock = 'W'.
* litem-customer = ls_outtab-kunnr.
* CLEAR: litem-stge_loc, litem-move_stloc.
* ENDIF.
APPEND litem TO item.
*
contador = contador + 1.
IF contador = 300.
DESCRIBE TABLE item LINES numl.
CHECK numl GT 0.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = header
goodsmvt_code = code
* TESTRUN = ' '
IMPORTING
goodsmvt_headret = docs
* MATERIALDOCUMENT =
* MATDOCUMENTYEAR =
TABLES
goodsmvt_item = item
* GOODSMVT_SERIALNUMBER =
return = return.
LOOP AT item INTO litem.
CLEAR gt_proc_log.
gt_proc_log-matnr = litem-material.
gt_proc_log-maktx = litem-ITEM_TEXT.
gt_proc_log-erfmg = litem-entry_qnt.
gt_proc_log-doc = docs.
IF return IS INITIAL.
gt_proc_log-icon = '@5B@'.
ELSE.
READ TABLE return WITH KEY row = sy-tabix INTO lreturn.
IF sy-subrc EQ 0.
gt_proc_log-return = lreturn.
gt_proc_log-icon = '@5C@'.
ELSE.
gt_proc_log-icon = '@5D@'.
ENDIF.
ENDIF.
APPEND gt_proc_log.
CLEAR gt_proc_res.
gt_proc_res-matnr = litem-material.
gt_proc_res-doc = docs.
DESCRIBE TABLE return LINES gt_proc_res-error.
APPEND gt_proc_res.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
contador = 1.
ENDIF.
ENDLOOP.
* Ejecuto el ultimo lote de materiales al salir.
IF contador <> 1.
DESCRIBE TABLE item LINES numl.
CHECK numl GT 0.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = header
goodsmvt_code = code
* TESTRUN = ' '
IMPORTING
goodsmvt_headret = docs
* MATERIALDOCUMENT =
* MATDOCUMENTYEAR =
TABLES
goodsmvt_item = item
* GOODSMVT_SERIALNUMBER =
return = return.
LOOP AT item INTO litem.
CLEAR gt_proc_log.
gt_proc_log-matnr = litem-material.
gt_proc_log-maktx = litem-ITEM_TEXT.
gt_proc_log-erfmg = litem-entry_qnt.
gt_proc_log-doc = docs.
IF return IS INITIAL.
gt_proc_log-icon = '@5B@'.
ELSE.
READ TABLE return WITH KEY row = sy-tabix INTO lreturn.
IF sy-subrc EQ 0.
gt_proc_log-return = lreturn.
gt_proc_log-icon = '@5C@'.
ELSE.
gt_proc_log-icon = '@5D@'.
ENDIF.
ENDIF.
APPEND gt_proc_log.
CLEAR gt_proc_res.
gt_proc_res-matnr = litem-material.
gt_proc_res-doc = docs.
DESCRIBE TABLE return LINES gt_proc_res-error.
APPEND gt_proc_res.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDIF.
* CLEAR gt_proc_log.
* LOOP AT gt_proc_log.
* READ TABLE gt_outtab WITH KEY rsnum = gt_proc_log-rsnum
* rspos = gt_proc_log-rspos
* INTO ls_outtab.
* IF sy-subrc EQ 0.
* gt_proc_log-matnr = ls_outtab-matnr.
* gt_proc_log-maktx = ls_outtab-maktx.
* gt_proc_log-erfmg = ls_outtab-erfmg.
* MODIFY gt_proc_log.
* ENDIF.
* ENDLOOP.
ENDFORM. " generar_traspasos
*&---------------------------------------------------------------------*
*& Form BUILD_LOG_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_FIELDCAT text
*----------------------------------------------------------------------*
FORM build_log_fieldcat CHANGING e01_lt_fieldcat TYPE lvc_t_fcat.
DATA ls_fieldcat TYPE lvc_s_fcat.
CLEAR e01_lt_fieldcat.
REFRESH e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ICON'.
ls_fieldcat-key = 'X'.
ls_fieldcat-icon = 'X'.
ls_fieldcat-outputlen = 2.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MATNR'.
ls_fieldcat-coltext = 'Material'.
ls_fieldcat-scrtext_l = 'Material'.
ls_fieldcat-scrtext_m = 'Material'.
ls_fieldcat-scrtext_s = 'Material'.
ls_fieldcat-outputlen = 8.
ls_fieldcat-no_zero = 'X'.
ls_fieldcat-emphasize = 'C200'.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MAKTX'.
ls_fieldcat-coltext = 'Descripcin'.
ls_fieldcat-scrtext_l = 'Descripcin'.
ls_fieldcat-scrtext_m = 'Descripcin'.
ls_fieldcat-scrtext_s = 'Descripcin'.
ls_fieldcat-outputlen = 15.
ls_fieldcat-emphasize = 'C200'.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ERFMG'.
ls_fieldcat-coltext = 'Cantidad'.
ls_fieldcat-scrtext_l = 'cantidad'.
ls_fieldcat-scrtext_m = 'Cantidad'.
ls_fieldcat-scrtext_s = 'Cantidad'.
ls_fieldcat-decimals = 3.
ls_fieldcat-emphasize = 'C200'.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'DOC-MAT_DOC'.
ls_fieldcat-coltext = 'Doc.Material'.
ls_fieldcat-scrtext_l = 'Doc.Material'.
ls_fieldcat-scrtext_m = 'Doc.Material'.
ls_fieldcat-scrtext_s = 'Doc.Material'.
ls_fieldcat-outputlen = 10.
ls_fieldcat-emphasize = 'C200'.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'DOC-DOC_YEAR'.
ls_fieldcat-coltext = 'Ejer.'.
ls_fieldcat-scrtext_l = 'Ejer.'.
ls_fieldcat-scrtext_m = 'Ejer.'.
ls_fieldcat-scrtext_s = 'Ejer.'.
ls_fieldcat-outputlen = 5.
ls_fieldcat-emphasize = 'C200'.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'RETURN-MESSAGE'.
ls_fieldcat-coltext = 'Mensaje'.
ls_fieldcat-scrtext_l = 'Mensaje'.
ls_fieldcat-scrtext_m = 'Mensaje'.
ls_fieldcat-scrtext_s = 'Mensaje'.
ls_fieldcat-outputlen = 30.
ls_fieldcat-emphasize = 'C200'.
APPEND ls_fieldcat TO e01_lt_fieldcat.
ENDFORM. "build_log_fieldcat
*&---------------------------------------------------------------------*
*& Form BUILD_RES_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_FIELDCAT text
*----------------------------------------------------------------------*
FORM build_res_fieldcat CHANGING e01_lt_fieldcat TYPE lvc_t_fcat.
DATA ls_fieldcat TYPE lvc_s_fcat.
CLEAR e01_lt_fieldcat.
REFRESH e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MATNR'.
ls_fieldcat-key = 'X'.
ls_fieldcat-coltext = 'Material'.
ls_fieldcat-scrtext_l = 'Material'.
ls_fieldcat-scrtext_m = 'Material'.
ls_fieldcat-scrtext_s = 'Material'.
ls_fieldcat-outputlen = 8.
ls_fieldcat-no_zero = 'X'.
ls_fieldcat-emphasize = 'C200'.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'DOC-MAT_DOC'.
ls_fieldcat-coltext = 'Doc.Material'.
ls_fieldcat-scrtext_l = 'Doc.Material'.
ls_fieldcat-scrtext_m = 'Doc.Material'.
ls_fieldcat-scrtext_s = 'Doc.Material'.
ls_fieldcat-outputlen = 10.
ls_fieldcat-emphasize = 'C200'.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'DOC-DOC_YEAR'.
ls_fieldcat-coltext = 'Ejer.'.
ls_fieldcat-scrtext_l = 'Ejer.'.
ls_fieldcat-scrtext_m = 'Ejer.'.
ls_fieldcat-scrtext_s = 'Ejer.'.
ls_fieldcat-outputlen = 5.
ls_fieldcat-emphasize = 'C200'.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ERROR'.
ls_fieldcat-coltext = 'Error'.
ls_fieldcat-scrtext_l = 'Error'.
ls_fieldcat-scrtext_m = 'Error'.
ls_fieldcat-scrtext_s = 'Error'.
ls_fieldcat-outputlen = 5.
ls_fieldcat-emphasize = 'C200'.
APPEND ls_fieldcat TO e01_lt_fieldcat.
ENDFORM. "build_fieldcat
*&---------------------------------------------------------------------*
*& Form create_detail_list
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_detail_list.
* create dialogbox container as dynpro-instance
* When the user switches to another screen, it is
* destroyed by lifetime mangagement of CFW
CREATE OBJECT dialogbox_container
EXPORTING
top = 150
left = 150
lifetime = cntl_lifetime_dynpro
caption = 'Resultados'(200)
width = 800
height = 200.
CREATE OBJECT grid2
EXPORTING
i_parent = dialogbox_container.
SET HANDLER g_verifier->handle_toolbar_2 FOR grid2.
SET HANDLER g_verifier->handle_user_command_2 FOR grid2.
SET HANDLER g_verifier->handle_before_user_command_2 FOR grid2.
* controlamos el dbl-click en el Dialog-Box de los resultados.
SET HANDLER g_verifier->handle_double_click_dbox FOR grid2.
* Register ABAP OO event 'CLOSE'. It is not necessary to register this
* event at the frontend (this is done during creation).
SET HANDLER g_verifier->handle_close FOR dialogbox_container.
* display data
gs_layout-grid_title = space.
PERFORM build_log_fieldcat CHANGING log_fieldcat.
PERFORM build_res_fieldcat CHANGING res_fieldcat.
CALL METHOD g_verifier->cambiar_a_detalle.
* CALL METHOD grid2->set_table_for_first_display
** exporting i_structure_name = 'PROC_LOG'
** is_layout = gs_layout
* CHANGING
* it_fieldcatalog = log_fieldcat
* it_outtab = gt_proc_log[].
*
** Refresh Tootbar
* CALL METHOD grid2->set_toolbar_interactive.
CALL METHOD cl_gui_control=>set_focus
EXPORTING
control = grid2.
ENDFORM. " create_detail_list

You might also like