segunda-feira, 12 de abril de 2010

Program to see all the user exits of a Transaction

*&---------------------------------------------------------------------*
*& Report ZUSEREXIT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*


REPORT zuserexit NO STANDARD PAGE HEADING.
TABLES : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
TABLES : tstct.
DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.
DATA : field1(30).
DATA : v_devclass LIKE tadir-devclass.
PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.

SELECT SINGLE * FROM tstc WHERE tcode EQ p_tcode.
IF sy-subrc EQ 0.
SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'
AND object = 'PROG'
AND obj_name = tstc-pgmna.
MOVE : tadir-devclass TO v_devclass.
IF sy-subrc NE 0.
SELECT SINGLE * FROM trdir WHERE name = tstc-pgmna.
IF trdir-subc EQ 'F'.
SELECT SINGLE * FROM tfdir WHERE pname = tstc-pgmna.
SELECT SINGLE * FROM enlfdir WHERE funcname =
tfdir-funcname.
SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'
AND object = 'FUGR'
AND obj_name EQ enlfdir-area.

MOVE : tadir-devclass TO v_devclass.
ENDIF.
ENDIF.
SELECT * FROM tadir INTO TABLE jtab
WHERE pgmid = 'R3TR'
AND object = 'SMOD'
AND devclass = v_devclass.
SELECT SINGLE * FROM tstct WHERE sprsl EQ sy-langu AND
tcode EQ p_tcode.
FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
WRITE:/(19) 'Transaction Code - ',
20(20) p_tcode,
45(50) tstct-ttext.
SKIP.
IF NOT jtab[] IS INITIAL.
WRITE:/(95) sy-uline.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE:/1 sy-vline,
2 'Exit Name',
21 sy-vline ,
22 'Description',
95 sy-vline.
WRITE:/(95) sy-uline.
LOOP AT jtab.
SELECT SINGLE * FROM modsapt
WHERE sprsl = sy-langu AND
name = jtab-obj_name.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE:/1 sy-vline,
2 jtab-obj_name HOTSPOT ON,
21 sy-vline ,
22 modsapt-modtext,
95 sy-vline.
ENDLOOP.
WRITE:/(95) sy-uline.
DESCRIBE TABLE jtab.
SKIP.
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
WRITE:/ 'No of Exits:' , sy-tfill.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(95) 'No User Exit exists'.
ENDIF.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(95) 'Transaction Code Does Not Exist'.
ENDIF.

AT LINE-SELECTION.
GET CURSOR FIELD field1.
CHECK field1(4) EQ 'JTAB'.
SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.

sexta-feira, 9 de abril de 2010

How to write any table (example2)

REPORT zsl_ex_7.

SELECTION-SCREEN: BEGIN OF BLOCK myblock WITH FRAME TITLE text-001.

PARAMETERS: table TYPE c LENGTH 30 DEFAULT 'SPFLI',
where TYPE c LENGTH 70 DEFAULT 'carrid = ''AA'''.

SELECTION-SCREEN:END OF BLOCK myblock.

DATA: data_ref TYPE REF TO data.

FIELD-SYMBOLS: ‹tab› TYPE ANY TABLE.

*&--------------------------------------------------------------------*
START-OF-SELECTION.
*&--------------------------------------------------------------------*
CREATE DATA data_ref TYPE TABLE OF (table).
ASSIGN data_ref->* TO ‹tab›.
SELECT * FROM (table) INTO TABLE ‹tab› WHERE (where).

PERFORM write_table USING ‹tab›.

How to write any table (example)

*&---------------------------------------------------------------------*
*& Report ZSL_EX_6
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zsl_ex_6.

*&--------------------------------------------------------------------*
*& Form write_table
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->P_TABLE text
*---------------------------------------------------------------------*
FORM write_table USING p_table TYPE ANY TABLE.

FIELD-SYMBOLS: ‹line› TYPE data,
‹field› TYPE data.

WRITE:/ '{'.
LOOP AT p_table ASSIGNING ‹line›.
WRITE /4 '('.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE ‹line› TO ‹field›.
IF sy-subrc ‹› 0.
EXIT.
ENDIF.
WRITE /8 ‹field›.
ENDDO. "loop a componente
WRITE /4 ')'.
ENDLOOP. "loop a tabela
WRITE / '}'.
ENDFORM. "write_table


TYPES: BEGIN OF my_line_type,
name TYPE string,
birth_date TYPE d,
salary TYPE p DECIMALS 2,
END OF my_line_type,

my_table_type TYPE HASHED TABLE OF my_line_type
WITH UNIQUE KEY name birth_date.

DATA: my_wa TYPE my_line_type,
my_table TYPE my_table_type.

*&--------------------------------------------------------------------*
START-OF-SELECTION.
*&--------------------------------------------------------------------*
my_wa-name = 'Peter Smith'.
my_wa-birth_date = '19640303'.
my_wa-salary = '20000.00'.
INSERT my_wa INTO TABLE my_table.

my_wa-name = 'April May June'.
my_wa-birth_date = '19660401'.
my_wa-salary = '1000000.00'.
INSERT my_wa INTO TABLE my_table.

my_wa-name = 'Maria albertina'.
my_wa-birth_date = '19640601'.
my_wa-salary = '1.00'.
INSERT my_wa INTO TABLE my_table.

PERFORM write_table USING my_table.

segunda-feira, 22 de março de 2010

Upload txt/excel files to internal table (example)

DATA: file_path TYPE string.
DATA: len TYPE i.

file_path = l_file.
TRANSLATE file_path TO UPPER CASE.
len = STRLEN( file_path ) - 3.

CLEAR tabi.

IF file_path+len(3) = 'XLS'.
break slopes.

DATA t_excel TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE.

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = l_file
i_begin_col = 1
i_begin_row = 1
i_end_col = 2
i_end_row = 50
TABLES
intern = t_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.


LOOP AT t_excel.
CASE t_excel-col.
WHEN 1.
s_tabi-matnr = t_excel-value.
WHEN 2.
s_tabi-erfmg = t_excel-value.
ENDCASE.
AT END OF row.
APPEND s_tabi to tabi.
CLEAR s_tabi.
ENDAT.
ENDLOOP.


ELSE.




CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = file_path
filetype = 'ASC'
has_field_separator = 'X'
CHANGING
data_tab = tabi.
ENDIF.

sexta-feira, 19 de março de 2010

How to download/upload files

*&---------------------------------------------------------------------*
*& Report ZSL_TRANSFERENCIAS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zsl_transferencias.

TABLES: mara, makt.

DATA: BEGIN OF s_tabi,
matnr LIKE mara-matnr,
ERSDA like mara-ERSDA,
maktx LIKE makt-maktx,
END OF s_tabi,

tabi LIKE s_tabi OCCURS 0 WITH HEADER LINE.

SELECTION-SCREEN: BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
PARAMETERS: upload RADIOBUTTON GROUP 1,
download RADIOBUTTON GROUP 1.

SELECTION-SCREEN:END OF BLOCK block1.

SELECTION-SCREEN: BEGIN OF BLOCK block2 WITH FRAME TITLE text-002.
PARAMETERS: f_server(132) DEFAULT 'TESTE_SLOPES',
f_client LIKE RLGRAP-FILENAME default 'C:\TESTE\TESTE.TXT'.
SELECTION-SCREEN:END OF BLOCK block2.


*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR F_CLIENT.
*&---------------------------------------------------------------------*

PERFORM F4_FILE_PC.

*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR F_SERVER.
*&---------------------------------------------------------------------*

PERFORM F4_FILE_SERVER.


*&---------------------------------------------------------------------*
START-OF-SELECTION.
*&---------------------------------------------------------------------*

*clear tabi.
*refresh tabi.

IF upload = 'X'.

* bastava select a MAKT
SELECT a~matnr a~ERSDA
t~maktx
FROM mara AS a
INNER JOIN makt AS t
ON a~matnr = t~matnr
INTO TABLE tabi.

*copia para o pc

PERFORM local_save USING f_client.

*copia para o servidor

OPEN DATASET f_server FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

LOOP AT tabi.
TRANSFER tabi TO f_server.
ENDLOOP.

CLOSE DATASET f_server.

ELSE.

*preenche tabi

OPEN DATASET f_server FOR INPUT IN TEXT MODE ENCODING DEFAULT.

DO.
READ DATASET f_server INTO tabi.
IF sy-subrc NE 0.
EXIT.
ENDIF.
APPEND tabi.
ENDDO.

*escreve no pc

PERFORM local_save USING f_client.


ENDIF.
*&---------------------------------------------------------------------*
*& Form local_save
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->file_name text
*----------------------------------------------------------------------*
FORM local_save USING file_name.


DATA: L_FILE TYPE STRING.
L_FILE = FILE_NAME.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = L_FILE
tables
data_tab = tabi.



ENDFORM. " loc
*&---------------------------------------------------------------------*
*& Form F4_FILE_PC
*&---------------------------------------------------------------------*
form F4_FILE_PC .

CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = 'F_CLIENT'
IMPORTING
FILE_NAME = F_CLIENT .


endform. " F4_FILE_
*&---------------------------------------------------------------------*
*& Form F4_FILE_SERVER
*&---------------------------------------------------------------------*

form F4_FILE_SERVER .

DATA: l_location LIKE dxfields-location,
l_server LIKE msxxlist-name,
l_path LIKE dxfields-longpath,
l_flag LIKE dxfields-abendflag.

CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION'
EXPORTING
I_LOCATION_FLAG = 'A'
* I_SERVER = '?'
* I_PATH =
* FILEMASK = '*.*'
* FILEOPERATION = 'R'
IMPORTING
o_location_flag = l_location
o_server = l_server
o_path = l_path
abend_flag = l_flag
EXCEPTIONS
RFC_ERROR = 1
ERROR_WITH_GUI = 2
OTHERS = 3
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

MOVE l_path TO f_server.

endform. " F4_FILE_S

How to create a dialog to go to a local/server directory and save/read a file

this form opens a dialog to select the directory where you want to save/read a local file


*&---------------------------------------------------------------------*
*& Form f4_save_lfile
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_P_LFILE text *----------------------------------------------------------------------* FORM f4_save_lfile CHANGING p_file. DATA: l_filename TYPE string, l_path TYPE string, l_fullpath TYPE string. CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
* window_title =
default_extension = 'TXT'
* default_file_name =
* with_encoding =
* file_filter =
* initial_directory =
prompt_on_overwrite = 'X'
CHANGING
filename = l_filename
path = l_path
fullpath = l_fullpath
* user_action =
* file_encoding =
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

p_file = l_fullpath.

ENDFORM. " f4_save_lfile

To do the same but on a server file, you should use this:

*&---------------------------------------------------------------------*
*& Form f4_rfile
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_P_RFILE text *----------------------------------------------------------------------* FORM f4_rfile CHANGING p_rfile. *" VALUE(I_LOCATION_FLAG) LIKE DXFIELDS-LOCATION DEFAULT ' ' *" VALUE(I_SERVER) LIKE MSXXLIST-NAME DEFAULT '?' *" VALUE(I_PATH) LIKE DXFIELDS-LONGPATH OPTIONAL *" VALUE(FILEMASK) LIKE DXFIELDS-FILEMASK DEFAULT '*.*' *" VALUE(FILEOPERATION) LIKE DXFIELDS-FILEOPER DEFAULT 'R' *" EXPORTING DATA: l_location LIKE dxfields-location, l_server LIKE msxxlist-name, l_path LIKE dxfields-longpath, l_flag LIKE dxfields-abendflag. CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION' EXPORTING i_location_flag = 'A' * I_SERVER = '?' * I_PATH = * FILEMASK = '*.*' * FILEOPERATION = 'R' IMPORTING o_location_flag = l_location o_server = l_server o_path = l_path abend_flag = l_flag EXCEPTIONS rfc_error = 1 error_with_gui = 2 OTHERS = 3 . IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

MOVE l_path TO p_rfile.

ENDFORM. " f4_rfile

quarta-feira, 17 de março de 2010

How to sum all entries with the same key

Just use the COLLECT function it sums all entries with the same key, or add a new entrie if the key doesnt exist yet


...
MOVE-CORRESPONDING t_vbrp TO tab_pesos.
COLLECT tab_pesos.
...