0% found this document useful (0 votes)
86 views29 pages

Zmmajuste Inventario

Download as txt, pdf, or txt
Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1/ 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,
maktx LIKE makt-maktx,
labst LIKE mard-labst,
labs2 LIKE mard-labst,
meins LIKE mara-meins,
difer LIKE mard-labst,
lvorm LIKE mara-lvorm,
mstae LIKE mara-mstae,
lvorc LIKE marc-lvorm,
mmsta LIKE marc-mmsta,
error(1),
desc_error(30),
END OF stock.

"Material
"Texto breve material
"Stock
"Stock Sap
"Unidad de Medida
"Diferencia (Cantidad a ajustar).
"Peticion borrado a nivel mdte
"Status material a nivel mdte
"Peticion borrado a nivel centro
"Status material a nivel centro

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.
INCLUDE STRUCTURE g_stock.
DATA: celltab TYPE lvc_t_styl.
DATA: color TYPE lvc_t_scol.
DATA: END OF gt_outtab.

"with header line

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
matnr LIKE
maktx LIKE
bklas LIKE
peinh LIKE
END OF alv.

mara-mtart,
mara-matnr,
makt-maktx,
mbew-bklas,
mbew-peinh,

*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
def_path
mask
mode
title
IMPORTING
filename
EXCEPTIONS
inv_winsys
no_batch
selection_cancel
selection_error

=
=
=
=
=

nom_fic
'/'
',*.*,*.*.'
'O'
text-dsp

= nom_fic
=
=
=
=

01
02
03
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
ls_fcat-col_pos
ls_fcat-outputlen
ls_fcat-coltext
ls_fcat-scrtext_l
ls_fcat-scrtext_m
ls_fcat-scrtext_s
ls_fcat-emphasize
ls_fcat-no_zero
APPEND ls_fcat TO

= 'MATNR'.
= 3.
= 8.
= 'Material'.
= 'Material'.
= 'Material'.
= 'Material'.
= 'C200'.
= 'X'.
pt_fieldcat.

CLEAR ls_fcat.
ls_fcat-fieldname
ls_fcat-col_pos
ls_fcat-outputlen
ls_fcat-coltext
ls_fcat-scrtext_l
ls_fcat-scrtext_m
ls_fcat-scrtext_s
ls_fcat-emphasize
APPEND ls_fcat TO

= 'MAKTX'.
= 4.
= 40.
= 'Descripcion'.
= 'Descripcion'.
= 'Descripcion'.
= 'Descripcion'.
= 'C200'.
pt_fieldcat.

CLEAR ls_fcat.
ls_fcat-fieldname
ls_fcat-col_pos
ls_fcat-outputlen
ls_fcat-coltext
ls_fcat-scrtext_l
ls_fcat-scrtext_m
ls_fcat-scrtext_s
ls_fcat-emphasize
* ls_fcat-no_zero
APPEND ls_fcat TO

=
=
=
=
=
=
=
=

CLEAR ls_fcat.
ls_fcat-fieldname
ls_fcat-col_pos
ls_fcat-outputlen
ls_fcat-coltext
ls_fcat-scrtext_l
ls_fcat-scrtext_m
ls_fcat-scrtext_s
ls_fcat-emphasize
* ls_fcat-no_zero
APPEND ls_fcat TO

=
=
=
=
=
=
=
=

CLEAR ls_fcat.
ls_fcat-fieldname
ls_fcat-col_pos
ls_fcat-outputlen
ls_fcat-coltext
ls_fcat-scrtext_l

=
=
=
=
=

'LABS2'.
4.
15.
'Stock SAP'.
'Stock SAP'.
'Stock SAP'.
'Stock SAP'.
'C200'.
= 'X'.
pt_fieldcat.
'LABST'.
5.
15.
'Stock Contado'.
'Stock Contado'.
'Stock Contado'.
'Stock Contado'.
'C200'.
= 'X'.
pt_fieldcat.
'DIFER'.
6.
15.
'Difer.Stock'.
'Difer.Stock'.

ls_fcat-scrtext_m
ls_fcat-scrtext_s
ls_fcat-emphasize
* ls_fcat-no_zero
APPEND ls_fcat TO

= 'Difer.Stock'.
= 'Difer.Stock'.
= 'C200'.
= 'X'.
pt_fieldcat.

CLEAR ls_fcat.
ls_fcat-fieldname
ls_fcat-col_pos
ls_fcat-outputlen
ls_fcat-coltext
ls_fcat-scrtext_l
ls_fcat-scrtext_m
ls_fcat-scrtext_s
ls_fcat-emphasize
APPEND ls_fcat TO

= 'ERROR'.
= 7.
= 6.
= 'Error'.
= 'Error'.
= 'Error'.
= 'Error'.
= 'Error'.
pt_fieldcat.

CLEAR ls_fcat.
ls_fcat-fieldname
ls_fcat-col_pos
ls_fcat-outputlen
ls_fcat-coltext
ls_fcat-scrtext_l
ls_fcat-scrtext_m
ls_fcat-scrtext_s
ls_fcat-emphasize
APPEND ls_fcat TO

= 'DESC_ERROR'.
= 8.
= 40.
= 'Error'.
= 'Error'.
= 'Error'.
= 'Error'.
= 'Error'.
pt_fieldcat.

CLEAR ls_fcat.
ls_fcat-fieldname
ls_fcat-col_pos
ls_fcat-outputlen
ls_fcat-coltext
ls_fcat-scrtext_l
ls_fcat-scrtext_m
ls_fcat-scrtext_s
ls_fcat-emphasize
APPEND ls_fcat TO

= 'LVORM'.
= 10.
= 3.
= 'PB'.
= 'PB'.
= 'PB'.
= 'PB'.
= 'C200'.
pt_fieldcat.

CLEAR ls_fcat.
ls_fcat-fieldname
ls_fcat-col_pos
ls_fcat-outputlen
ls_fcat-coltext
ls_fcat-scrtext_l
ls_fcat-scrtext_m
ls_fcat-scrtext_s
ls_fcat-emphasize
APPEND ls_fcat TO

= 'MSTAE'.
= 11.
= 3.
= 'ST'.
= 'ST'.
= 'ST'.
= 'ST'.
= 'C200'.
pt_fieldcat.

CLEAR ls_fcat.
ls_fcat-fieldname
ls_fcat-col_pos
ls_fcat-outputlen
ls_fcat-coltext
ls_fcat-scrtext_l
ls_fcat-scrtext_m
ls_fcat-scrtext_s
ls_fcat-emphasize

=
=
=
=
=
=
=
=

'LVORC'.
12.
4.
'PBC'.
'PBC'.
'PBC'.
'PBC'.
'C200'.

APPEND ls_fcat TO pt_fieldcat.


CLEAR ls_fcat.
ls_fcat-fieldname
ls_fcat-col_pos
ls_fcat-outputlen
ls_fcat-coltext
ls_fcat-scrtext_l
ls_fcat-scrtext_m
ls_fcat-scrtext_s
ls_fcat-emphasize
APPEND ls_fcat TO

= 'MMSTA'.
= 13.
= 4.
= 'STC'.
= 'STC'.
= 'STC'.
= 'STC'.
= 'C200'.
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
is_layout
is_variant
i_save
CHANGING
it_fieldcatalog
it_outtab

=
=
=
=

lt_exclude
gs_layout
gx_variant
x_save

= pt_fieldcat
= 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
ls_fieldcat-key
ls_fieldcat-icon
ls_fieldcat-outputlen
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.
ls_fieldcat-fieldname
ls_fieldcat-coltext
ls_fieldcat-scrtext_l
ls_fieldcat-scrtext_m
ls_fieldcat-scrtext_s
ls_fieldcat-outputlen
ls_fieldcat-no_zero
ls_fieldcat-emphasize
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.
ls_fieldcat-fieldname
ls_fieldcat-coltext
ls_fieldcat-scrtext_l
ls_fieldcat-scrtext_m
ls_fieldcat-scrtext_s
ls_fieldcat-outputlen
ls_fieldcat-emphasize
APPEND ls_fieldcat TO

= 'ICON'.
= 'X'.
= 'X'.
= 2.
e01_lt_fieldcat.
=
=
=
=
=
=

'MATNR'.
'Material'.
'Material'.
'Material'.
'Material'.
8.
= 'X'.
= 'C200'.
e01_lt_fieldcat.
= 'MAKTX'.
= 'Descripcin'.
= 'Descripcin'.
= 'Descripcin'.
= 'Descripcin'.
= 15.
= 'C200'.
e01_lt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ERFMG'.
ls_fieldcat-coltext = 'Cantidad'.
ls_fieldcat-scrtext_l = 'cantidad'.

ls_fieldcat-scrtext_m
ls_fieldcat-scrtext_s
ls_fieldcat-decimals
ls_fieldcat-emphasize
APPEND ls_fieldcat TO

= 'Cantidad'.
= 'Cantidad'.
= 3.
= 'C200'.
e01_lt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname
ls_fieldcat-coltext
ls_fieldcat-scrtext_l
ls_fieldcat-scrtext_m
ls_fieldcat-scrtext_s
ls_fieldcat-outputlen
ls_fieldcat-emphasize
APPEND ls_fieldcat TO

= 'DOC-MAT_DOC'.
= 'Doc.Material'.
= 'Doc.Material'.
= 'Doc.Material'.
= 'Doc.Material'.
= 10.
= 'C200'.
e01_lt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname
ls_fieldcat-coltext
ls_fieldcat-scrtext_l
ls_fieldcat-scrtext_m
ls_fieldcat-scrtext_s
ls_fieldcat-outputlen
ls_fieldcat-emphasize
APPEND ls_fieldcat TO

= 'DOC-DOC_YEAR'.
= 'Ejer.'.
= 'Ejer.'.
= 'Ejer.'.
= 'Ejer.'.
= 5.
= 'C200'.
e01_lt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname
ls_fieldcat-coltext
ls_fieldcat-scrtext_l
ls_fieldcat-scrtext_m
ls_fieldcat-scrtext_s
ls_fieldcat-outputlen
ls_fieldcat-emphasize
APPEND ls_fieldcat TO
ENDFORM.

= 'RETURN-MESSAGE'.
= 'Mensaje'.
= 'Mensaje'.
= 'Mensaje'.
= 'Mensaje'.
= 30.
= 'C200'.
e01_lt_fieldcat.
"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
ls_fieldcat-key
ls_fieldcat-coltext
ls_fieldcat-scrtext_l
ls_fieldcat-scrtext_m
ls_fieldcat-scrtext_s
ls_fieldcat-outputlen
ls_fieldcat-no_zero
ls_fieldcat-emphasize

=
=
=
=
=
=
=
=
=

'MATNR'.
'X'.
'Material'.
'Material'.
'Material'.
'Material'.
8.
'X'.
'C200'.

APPEND ls_fieldcat TO e01_lt_fieldcat.


CLEAR ls_fieldcat.
ls_fieldcat-fieldname
ls_fieldcat-coltext
ls_fieldcat-scrtext_l
ls_fieldcat-scrtext_m
ls_fieldcat-scrtext_s
ls_fieldcat-outputlen
ls_fieldcat-emphasize
APPEND ls_fieldcat TO

= 'DOC-MAT_DOC'.
= 'Doc.Material'.
= 'Doc.Material'.
= 'Doc.Material'.
= 'Doc.Material'.
= 10.
= 'C200'.
e01_lt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname
ls_fieldcat-coltext
ls_fieldcat-scrtext_l
ls_fieldcat-scrtext_m
ls_fieldcat-scrtext_s
ls_fieldcat-outputlen
ls_fieldcat-emphasize
APPEND ls_fieldcat TO

= 'DOC-DOC_YEAR'.
= 'Ejer.'.
= 'Ejer.'.
= 'Ejer.'.
= 'Ejer.'.
= 5.
= 'C200'.
e01_lt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname
ls_fieldcat-coltext
ls_fieldcat-scrtext_l
ls_fieldcat-scrtext_m
ls_fieldcat-scrtext_s
ls_fieldcat-outputlen
ls_fieldcat-emphasize
APPEND ls_fieldcat TO

= 'ERROR'.
= 'Error'.
= 'Error'.
= 'Error'.
= 'Error'.
= 5.
= 'C200'.
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