giovedì 26 novembre 2009
Caricare una immagine in una dynpro
-From transaction SMW0, select Binary data for WEBRFC applications.
-The new logo must be in a .gif format.
-From this transaction create a new object and then choose IMPORT.
Successivamente inserire il seguente codice nel PAI della dynpro:
DATA container TYPE REF TO cl_gui_custom_container.
DATA picture TYPE REF TO cl_gui_picture.
CLASS cl_gui_cfw DEFINITION LOAD.
CREATE OBJECT container
EXPORTING container_name = 'CUSTOM'. " nome del container custom
CREATE OBJECT picture
EXPORTING parent = container.
CALL METHOD picture->set_display_mode
EXPORTING display_mode = 1.
CALL METHOD picture->set_3d_border
EXPORTING border = 1.
CLEAR url.
PERFORM load_pic_from_db CHANGING url.
CALL METHOD picture->load_picture_from_url
EXPORTING url = url.
init = 'X'.
CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS cntl_system_error = 1
cntl_error = 2.
FORM load_pic_from_db CHANGING url.
DATA query_table LIKE w3query OCCURS 1 WITH HEADER LINE.
DATA html_table LIKE w3html OCCURS 1.
DATA return_code LIKE w3param-ret_code.
DATA content_type LIKE w3param-cont_type.
DATA content_length LIKE w3param-cont_len.
DATA pic_data LIKE w3mime OCCURS 0.
DATA pic_size TYPE i.
REFRESH query_table.
query_table-name = '_OBJECT_ID'.
query_table-value = 'ZTAGETIK'. " Inserire il nome dell'immagine custom
APPEND query_table.
CALL FUNCTION 'WWW_GET_MIME_OBJECT'
TABLES
query_string = query_table
html = html_table
mime = pic_data
CHANGING
return_code = return_code
content_type = content_type
content_length = content_length
EXCEPTIONS
invalid_table = 1
parameter_not_found = 2
OTHERS = 3.
IF sy-subrc = 0.
pic_size = content_length.
ENDIF.
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
type = 'image'
subtype = cndp_sap_tab_unknown
size = pic_size
lifetime = cndp_lifetime_transaction
TABLES
data = pic_data
CHANGING
url = url
EXCEPTIONS
OTHERS = 1.
ENDFORM.
mercoledì 18 novembre 2009
Sottomettere RSNAST00 e ottenere N° spool
DATA: v_jobgroup LIKE tbtcjob-jobgroup.
RANGES: r_kappl FOR nast-kappl,
DATA: v_jobname LIKE tbtcjob-jobname.
DATA: v_jobcount LIKE tbtcjob-jobcount.
DATA: v_status TYPE tbtco-status.
DATA: v_spool TYPE tbtcp-listident.
r_objky FOR nast-objky,
r_kschl FOR nast-kschl,
r_nacha FOR nast-nacha.
MOVE: '1209770006' TO r_objky-low,
'EQ' TO r_objky-option,
'I' TO r_objky-sign.
APPEND r_objky.
MOVE: 'ZADC' TO r_kschl-low,
'EQ' TO r_kschl-option,
'I' TO r_kschl-sign.
APPEND r_kschl.
MOVE: '1' TO r_nacha-low,
'EQ' TO r_nacha-option,
'I' TO r_nacha-sign.
APPEND r_nacha.
MOVE: 'V3' TO r_kappl-low,
'EQ' TO r_kappl-option,
'I' TO r_kappl-sign.
APPEND r_kappl.
v_jobgroup = 'Test'.
v_jobname = sy-repid.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobgroup = v_jobgroup
jobname = v_jobname
IMPORTING
jobcount = v_jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
SUBMIT rsnast00
VIA JOB v_jobname
NUMBER v_jobcount
WITH s_kappl IN r_kappl
WITH s_objky IN r_objky
WITH s_kschl IN r_kschl
WITH s_nacha IN r_nacha " '1'
WITH p_again = vstato
AND RETURN.
*Close job to start immediately
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = v_jobcount
jobname = v_jobname
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
* Check the status.
DO.
SELECT SINGLE status FROM tbtco
INTO v_status
WHERE jobname = v_jobname
AND jobcount = v_jobcount.
IF sy-subrc = 0 AND v_status = 'F'.
EXIT.
ENDIF.
ENDDO.
* Get the spool
SELECT SINGLE listident FROM tbtcp
INTO v_spool
WHERE jobname = v_jobname
AND jobcount = v_jobcount.
WRITE: / v_spool.
giovedì 12 novembre 2009
Generare ALV dinamicamente da tabella interna
TYPE-POOLS: slis.
DATA: lt_layout TYPE slis_layout_alv.
DATA: BEGIN OF tb_tb001 OCCURS 0,
bukrs TYPE bukrs,
butxt TYPE butxt,
ort01 TYPE ort01,
land1 TYPE land1.
DATA: END OF tb_tb001.
DATA t_fil TYPE slis_t_fieldcat_alv.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = 'TB_TB001'
* I_STRUCTURE_NAME =
* I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = sy-repid
i_bypassing_buffer = 'X'
* I_BUFFER_ACTIVE =
CHANGING
ct_fieldcat = t_fil
EXCEPTIONS
inconsistent_interface = 1
program_error = 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.
SELECT * FROM t001 INTO CORRESPONDING FIELDS OF TABLE tb_tb001.
lt_layout-zebra = 'X'.
lt_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = lt_layout
it_fieldcat = t_fil
TABLES
t_outtab = tb_tb001
EXCEPTIONS
program_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.
Listare contenuto di una directory
EPS_GET_DIRECTORY_LISTING
La function accetta come parametri una directory di partenza e restituisce una tabella contenente la lista dei file presenti.
mercoledì 11 novembre 2009
Customizzare formato data e numero
La scelta avviene per paese.
Ecco un esempio delle possibili scelte per la rappresentazione dei numeri:
Per poter usufruire della customizzazione appena fatta è necessario impostare il paese nel programma generato utilizzando l'istruzione
SET COUNTRY 'IT'.
martedì 20 ottobre 2009
Aggiornare statistiche tabella
giovedì 8 ottobre 2009
SE16N
Dalla prima schermata, inserendo il codice &SAP_EDIT nel box dei comandi, il sistema abilità numerose funzionalità, tra cui quella di cancellare massivamente i record.
mercoledì 16 settembre 2009
Selezionare layout alv come parameter
Per far ciò è possibile utilizzare il seguente codice:
Definire il parameter per il layout:
PARAMETERS: pa_vari TYPE slis_vari.
Implementare una function che verrà chiamata come help di ricerca del parametro in selezione:
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_vari.
PERFORM alv_variant_f4 CHANGING pa_vari.
La funzione alv_variant_f4 avrà il seguente codice:
FORM alv_variant_f4 CHANGING pa_vari.
DATA: rs_variant LIKE disvariant.
DATA nof4 TYPE c.
CLEAR nof4.
LOOP AT SCREEN.
IF screen-name = 'PA_VARI'.
IF screen-input = 0.
nof4 = 'X'.
ENDIF.
ENDIF.
ENDLOOP.
rs_variant-report = sy-repid.
rs_variant-username = sy-uname.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = rs_variant
i_save = 'A'
IMPORTING
es_variant = rs_variant
EXCEPTIONS
OTHERS = 1.
IF sy-subrc = 0 AND nof4 EQ space.
pa_vari = rs_variant-variant.
ENDIF.
ENDFORM.
Successivamente muovere il layout selezionato nel layout da utilizzare nell'alv:
MOVE pa_vari TO gs_variant-variant.
e passare il parametro alla function 'REUSE_ALV_GRID_DISPLAY' :
is_variant = gs_variant
Il risultato è una popup simile a quella mostrata in figura:
Modificare font e colori dell'abap editor
puoi scegliere la combinazione di colori che più ti piace cliccando sul pulsante in fondo a destra della sapgui quando viene visualizzato il codice di un qualsiasi programma:
A questo punto comparirà una schermata come questa:
Dopo aver scelto la combinazione migliore basta salvare le modifiche.
Disattivare suoni SAPGUI
martedì 15 settembre 2009
Cancellare WorkItem
RSWWWIDE
Il programma nella sua schermata iniziale permette di filtrare i workitem da cancellare con vari criteri.
Una volta ottenuto il risultato sotto forma di ALV è sufficiente selezionare quelli da cancellare e cliccare sul bidone.
lunedì 14 settembre 2009
CALL FUNCTION 'FIEB_REPLACE_AMPERSAND_MESSAGE'
EXPORTING
im_text = lines-tdline
im_msgv1 = data
IMPORTING
ex_text = lines-tdline.
In particolare la funzione sostituisce la stringa "data" all'interno del testo "tdline".
mercoledì 5 agosto 2009
Leggere intestazione tabella
DATA: va_desc(4096) TYPE c.
PERFORM read_table_fields USING 'BKPF' va_desc.
FORM read_table_fields USING i_table va_record.
CLEAR va_record.
DATA: subrc LIKE sy-subrc,
help_fields LIKE dfies,
fieldname LIKE dfies-fieldname,
fieldsandtext_line TYPE gd13_fields_text.
CALL FUNCTION 'G_FIELD_SET'
EXPORTING
ftype = ' '
langu = sy-langu
table = i_table
text_flag = 'X'
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
RAISING not_found.
ENDIF.
CALL FUNCTION 'G_FIELD_GET'
IMPORTING
field_attr = help_fields
subrc = subrc
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
RAISING not_found.
ENDIF.
fieldname = help_fields-fieldname.
fieldsandtext_line-fieldname = help_fields-fieldname.
fieldsandtext_line-scrtext_m = help_fields-scrtext_m.
WHILE subrc = 0.
READ TABLE e_t_fields INTO fieldname WITH KEY fieldname.
CONCATENATE va_record fieldsandtext_line-scrtext_m ';'
INTO va_record.
CONDENSE va_record.
CALL FUNCTION 'G_FIELD_GET'
IMPORTING
field_attr = help_fields
subrc = subrc
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
RAISING not_found.
ENDIF.
fieldname = help_fields-fieldname.
fieldsandtext_line-fieldname = help_fields-fieldname.
fieldsandtext_line-scrtext_m = help_fields-scrtext_m.
ENDWHILE.
ENDFORM. " read_table_fields
martedì 4 agosto 2009
Selezionare file locale
wa_path TYPE file_table.
DATA: in_str TYPE string.
CLEAR tb_path_in.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
* EXPORTING
* WINDOW_TITLE =
* DEFAULT_EXTENSION =
* DEFAULT_FILENAME =
* FILE_FILTER =
* INITIAL_DIRECTORY =
* MULTISELECTION =
* WITH_ENCODING =
CHANGING
file_table = tb_path_in
rc = rc.
READ TABLE tb_path_in INDEX 1 INTO wa_path.
MOVE wa_path-filename TO p_in.
MOVE wa_path-filename TO in_str.
lunedì 3 agosto 2009
Ottenere tutti i valori di un set
FUNCTION ZGET_SET.
*"--------------------------------------------------------------------
*"*"Interfaccia locale:
*" IMPORTING
*" REFERENCE(NOME) TYPE RGSBM-SHORTNAME
*" TABLES
*" TAB STRUCTURE HRRANGES
*" EXCEPTIONS
*" SET_NOT_FOUND
*" SET_IS_EMPTY
*"--------------------------------------------------------------------
DATA: va_new_set_id LIKE sethier-setid.
DATA: tb_option LIKE rgsb4 OCCURS 0 WITH HEADER LINE.
IF nome IS INITIAL.
MESSAGE i208(00) WITH 'Il nome del set non può essere vuoto'
RAISING set_is_empty.
ENDIF.
CALL FUNCTION 'G_SET_GET_ID_FROM_NAME'
EXPORTING
shortname = nome
IMPORTING
new_setid = va_new_set_id.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'G_SET_GET_ALL_VALUES'
EXPORTING
setnr = va_new_set_id
TABLES
set_values = tb_option.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CLEAR tb_option.
LOOP AT tb_option.
CLEAR tab.
IF tb_option-to = tb_option-from.
tab-sign = 'I'.
tab-opti = 'EQ'.
tab-low = tb_option-from.
ELSE.
tab-sign = 'I'.
tab-opti = 'BT'.
tab-low = tb_option-from.
tab-high = tb_option-to.
ENDIF.
APPEND tab.
ENDLOOP.
ENDFUNCTION.
venerdì 24 luglio 2009
Ottenere n° spool
CALL FUNCTION 'RSPO_FIND_SPOOL_REQUESTS'
EXPORTING
* ALLCLIENTS = ' '
* AUTHORITY = ' '
* DATATYPE = '*'
* HAS_OUTPUT_REQUESTS = '*'
* RQ0NAME = '*'
* RQ1NAME = '*'
rq2name = rq2name
* RQDEST = '*'
* RQIDENT = 0
* RQOWNER = SY-UNAME
TABLES
spoolrequests = t_spool
* EXCEPTIONS
* NO_PERMISSION = 1
* OTHERS = 2 .
In particolare io avevo assegnato alla variabile rq2name il numero dell'oridne di acquisto
MOVE tb_ekko-ebeln TO rq2name.
Creare messaggio sulla NAST
DATA: XNAST LIKE VNAST OCCURS 20 WITH HEADER LINE.
Per prima cosa devono essere selezionate dalla tabella t685b le caratteristiche del messaggio che vogliamo creare; nel mio caso era un messaggio custom (v_kschl = 'ZPDF').
SELECT SINGLE * FROM t685b
WHERE kappl = 'EF' AND kschl = v_kschl.
Successivamente è necessario valorizzare la tabella interna che conterrà tutte le info del messaggio che stiamo creando:
xnast-kappl = 'EF'.
xnast-mandt = sy-mandt.
xnast-objky = tb_ekko-ebeln.
xnast-kschl = 'ZPDF'.
xnast-spras = sy-langu.
xnast-erdat = '20080202'.
xnast-nacha = t685b-nacha .
xnast-anzal = 0 .
xnast-vsztp = t685b-vsztp .
xnast-usnam = sy-uname .
xnast-ldest = 'LOCL'.
xnast-objtype = 'BUS2012'.
xnast-nauto = 'X'.
xnast-vstat = '0'.
xnast-dsuf2 = tb_ekko-ebeln.
xnast-tdid ='BEWG'.
xnast-tdspras = 'IT'.
xnast-tdreceiver = sy-uname .
xnast-tdcovtitle = 'NEW PURCHASE ORDER PRINTOUT'.
APPEND xnast.
Una volta valorizzata la tabella dovranno essere chiamate le seguenti funzioni:
CALL FUNCTION 'RV_MESSAGES_INSERT'
TABLES
tab_xnast = xnast
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'RV_MESSAGES_UPDATE'
EXPORTING
msg_kappl = xnast-kappl
msg_no_update_task = 'X'
EXCEPTIONS
OTHERS = 1.
giovedì 23 luglio 2009
Importare un file xls in una tabella interna
DATA: tb_excel TYPE alsmex_tabline OCCURS 0.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 2
i_begin_row = 3
i_end_col = 6
i_end_row = 10000
TABLES
intern = tb_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
E' necessario dichiarare l'area in cui si trovano i dati.
Una volta eseguita la funzone verrà valorizzata la tabella tb_excel . Questa tabella ha una riga per ogni cella letta nel file xls.
La riga della tabella è strutturata con 3 valori: riga, colonna e valore.
Per porter splittare i dati nel modo corretto è possibile usare questo semplice loop:
LOOP AT tb_excel INTO wa_excel.
ASSIGN COMPONENT wa_excel-col OF STRUCTURE wa_xls TO (c)
MOVE wa_excel-value TO (c)
ENDIF.
AT END OF row.
APPEND wa_xls TO tb_xls.
CLEAR wa_xls.
ENDAT.
ENDLOOP.
L'oggetto tb_xls è la tabella che identifica correttamente una riga del nostro xls. Nel mio caso particolare la struttura era formata da :
DATA: BEGIN OF tb_xls OCCURS 0.
DATA: kunnr TYPE kunnr,
zkprot TYPE zkprot,
zkddef(10),
barcode TYPE bds_bar_in-barcode,
tipo .
DATA: END OF tb_xls.
martedì 21 luglio 2009
export e import da memory
nel programma principale usare:
export wa_ktokk to MEMORY ID 'ZZKTOKK'.
Nel secondo programma sarà possibile chiamare l'istruzione:
import wa_ktokk from MEMORY ID 'ZZKTOKK'.
NB: non è un caso che i nomi delle variabili siano gli stessi; è necessario che siano uguali!!!
giovedì 16 luglio 2009
Evidenziare CR
Ecco il risultato:
Un elenco di codici di icone:
ICON_GREEN_LIGHT Semaf.verde;procedere;corretto @08@
ICON_YELLOW_LIGHT Semaforo giallo; attenzione @09@
ICON_RED_LIGHT Semaforo rosso; stop; errato @0A@
Per visualizzare l'eleco completo dei codici icona, dall'help selezionare "list of icons" e successivamente leggere nella colonna "interno" la coppia di lettere.
venerdì 19 giugno 2009
Ricercare valori in un set
Per poter verificare se un determinato valore è presente nel set creato è possibile utilizzare la seguente function:
DATA va_trovato LIKE aasel1-option.
DATA setid LIKE sethier-setid.
CLEAR: aktyp,
setid,
wa_tcode,
va_trovato.
MOVE 'Z_TRANS_FATT_MOD' TO setid.
MOVE sy-tcode TO wa_tcode.
CALL FUNCTION 'Z_CTRL_SET'
EXPORTING
setid = setid
val_da_trovare = wa_tcode
IMPORTING
val_trovato = va_trovato
EXCEPTIONS
set_not_found = 1
illegal_field_replacement = 2
illegal_table_replacement = 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.
La funtion può restituisce nel valore va_trovato solo 2 valori: SI o NO.
Il test da eseguire è :
if va_trovato EQ 'SI'.
giovedì 18 giugno 2009
Testi per documenti contabili
CALL FUNCTION 'FI_TEXTS_DOCUMENT'
EXPORTING
i_aktyp = 'H'
i_belnr = bkpf-belnr
i_blart = bkpf-blart
i_bukrs = bkpf-bukrs
* I_CHECK = ' '
i_dyncl = 'B'
i_gjahr = bkpf-bldat(4)
i_object = 'BELEG'
i_give_back_ids = 'X'
* I_CLEAR_XUPD = ' '
* IMPORTING
* E_UPDATE =
TABLES
t_tdid = gt_tdid
* T_ACCDN =
* EXCEPTIONS
* NO_TEXTS_FOUND = 1
* INCORRECT_OBJECT = 2
* OTHERS = 3
Questa function farà comparire una popup come quella sottostante:
In questa popup è possibile inserire i testi necessari da allegare al documento contabile.
Per poter rendere effettive le modifiche è necessario chiamare la seguente funzione:
CALL FUNCTION 'FI_TEXTS_DOCUMENT_UPDATE'
EXPORTING
i_bukrs = g_bkpf-bukrs
i_gjahr = g_bkpf-gjahr
i_belnr = g_bkpf-belnr
i_intern = 'X'
i_update_deferred = ' '
EXCEPTIONS
error_message = 9.
Infine per poter leggere i testi appena creati basta chiamare la funzione indicando come name la concatenazione di bukrs + belnr + gjhar. ATTENZIONE: la società deve contenere eventualmente i caratteri blank.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = '0001'
language = sy-langu
name = dat_call_bseg
object = 'BELEG'
* ARCHIVE_HANDLE = 0
* IMPORTING
* HEADER =
TABLES
lines = tb_testi
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
Selezionare numero da range di numerazione
Nel mio caso particolare è utilizzata per ottenere il numero del documento contabile da creare.
La function prende in import la società, l'anno e il nome del range da selezionare.
Come output restituisce il numero selezionato dal range.
CALL FUNCTION 'RF_GET_DOCUMENT_NUMBER'
EXPORTING
company = documentheader-comp_code
range = w_numkr
year = documentheader-fisc_year
IMPORTING
document_number = num_doc
EXCEPTIONS
duplicate_number = 1
range_missing = 2
error_in_open_fi = 3
OTHERS = 4.
lunedì 15 giugno 2009
Selezionare directory locale
In particolare io l'ho utilizzata per far selezionare una directory nella quale salvare i pdf creati dal programma.
data: str_path type string.
CALL METHOD cl_gui_frontend_services=>directory_browse
* EXPORTING
* WINDOW_TITLE =
* INITIAL_FOLDER =
CHANGING
selected_folder = str_path
* EXCEPTIONS
* CNTL_ERROR = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3
* others = 4.
Il risultato è la seguente popup:
Cerca stringa
In particolare il report prende in input tra i vari parametri una o più stringe e mostra l'elenco dei sorgenti che rispondono ai criteri di ricerca.
Davvero molto utile per ricercare un messaggio custom o un particolare tipo di errore.
REPORT zcercastringa LINE-COUNT 65
LINE-SIZE 220
NO STANDARD PAGE HEADING.
************************************************************************
* Utilità per la ricerca di una stringa di caratteri definita a *
* parametro nel sorgente di programmi ABAP/4 *
* I programmi possono essere fltrati per: *
* NOME PROGRAMMA e CLASSE DI SVILUPPO *
************************************************************************
TABLES: tadir, trdir.
*
SELECTION-SCREEN: SKIP 1,
BEGIN OF BLOCK blocco_a WITH FRAME TITLE text-100.
SELECT-OPTIONS : program FOR trdir-name,
unam FOR trdir-unam,
cnam FOR trdir-cnam.
PARAMETERS : p_string(50) TYPE c OBLIGATORY,
p_strin2(50) TYPE c,
p_strin3(50) TYPE c.
* P_CLASS(4) TYPE C.
SELECT-OPTIONS : s_class FOR tadir-devclass.
SKIP 1.
PARAMETERS : p_incl AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK blocco_a.
*
DATA: x TYPE i.
DATA: vn_stampa TYPE i.
DATA: title(40) TYPE c.
DATA: y TYPE i.
DATA:ca-10(10) TYPE c.
DATA: BEGIN OF itab OCCURS 10.
INCLUDE STRUCTURE trdir.
INCLUDE STRUCTURE tadir.
DATA: title(40) TYPE c.
DATA: END OF itab.
DATA: va_prog(40).
DATA: va_riga(4) TYPE c.
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: wa_trdir LIKE trdir.
DATA: wa_tadir LIKE tadir.
DATA: BEGIN OF tb-prog OCCURS 100000,
line(250) TYPE c,
END OF tb-prog.
DATA: BEGIN OF btab OCCURS 50, "Hilfstabelle fuer Textpoolein-
code(72), "traege
END OF btab.
DATA: BEGIN OF no_textnumber OCCURS 50,
prog(8),
linenb(6) TYPE n,
numb(3),
line(72).
DATA: END OF no_textnumber.
DATA: BEGIN OF no_text_in_pool OCCURS 50,
prog(8),
linenb(6) TYPE n,
numb(3),
line(72).
DATA: END OF no_text_in_pool.
DATA: BEGIN OF wrong_text OCCURS 50,
prog(8),
linenb(6) TYPE n,
numb(3),
line(72).
DATA: END OF wrong_text.
DATA: BEGIN OF tb_tadir OCCURS 100.
INCLUDE STRUCTURE tadir.
DATA: END OF tb_tadir.
DATA: vn_progr(6) TYPE n,
fl_primo(1) TYPE c.
DATA: BEGIN OF stampa,
progr(6) TYPE c ,
filler1 TYPE c ,
name LIKE trdir-name , " release < 4.xx
** name(8) TYPE c , " release => 4.xx
filler2 TYPE c ,
devclass LIKE tadir-devclass,
filler3 TYPE c ,
author LIKE tadir-author ,
filler4 TYPE c ,
korrnum LIKE tadir-korrnum ,
filler5 TYPE c ,
unam LIKE trdir-unam ,
filler6 TYPE c ,
udat(10) TYPE c ,
riga(10) TYPE c,
filler7 TYPE c ,
prog-line LIKE tb-prog-line .
DATA: END OF stampa.
DATA flag.
*
DATA: BEGIN OF ttab OCCURS 50.
INCLUDE STRUCTURE textpool.
DATA: END OF ttab.
TOP-OF-PAGE.
FORMAT COLOR COL_HEADING .
* /001 (500) ,
WRITE: /8 'Nome '(501) ,
49 'Clas.'(502) ,
* 52 (503) ,
* 65 'Numero'(504) ,
104 'Autore'(505) ,
117 'Data'(506) ,
190 'Pagina',
/001 'Progr.'(510) ,
8 'programma'(511) ,
49 'svil. '(512) ,
80 'Creato da'(513) ,
* 85 'correzione'(514) ,
104 'modifica'(515),
117 'modifica'(516) ,
133 'riga',
140 'Contenuto riga'(517) ,
190 sy-pagno NO-ZERO .
*
SKIP 1.
START-OF-SELECTION.
CLEAR: fl_primo,
vn_progr.
*
SELECT * FROM tadir INTO TABLE tb_tadir
WHERE pgmid = 'R3TR'
AND object = 'PROG'
AND obj_name IN program
* and UNAM in UNAM
* and cNAM in cNAM
AND ( devclass IN s_class )
ORDER BY obj_name.
FORMAT COLOR COL_NORMAL.
LOOP AT tb_tadir.
MOVE-CORRESPONDING tb_tadir TO wa_tadir.
CLEAR trdir.
SELECT SINGLE * FROM trdir INTO wa_trdir
WHERE name = wa_tadir-obj_name.
CLEAR fl_primo.
READ REPORT wa_trdir-name INTO tb-prog.
LOOP AT tb-prog.
IF tb-prog-line CS p_string OR
tb-prog-line CS p_strin2 OR
tb-prog-line CS p_strin3.
CHECK sy-fdpos NE 0.
IF NOT p_incl IS INITIAL.
CHECK tb-prog-line+0(1) <> '*'.
ENDIF.
CLEAR stampa.
IF fl_primo IS INITIAL.
vn_stampa = 1.
MOVE 'X' TO fl_primo.
ADD 1 TO vn_progr.
WRITE vn_progr TO stampa-progr.
ENDIF.
IF flag = 'X'.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
CLEAR flag.
ELSE.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
flag = 'X'.
ENDIF.
MOVE: wa_trdir-name TO stampa-name ,
wa_tadir-devclass TO stampa-devclass ,
wa_tadir-author TO stampa-author ,
wa_tadir-korrnum TO stampa-korrnum ,
sy-tabix TO stampa-riga,
wa_trdir-unam TO stampa-unam .
WRITE wa_trdir-udat TO stampa-udat DD/MM/YYYY.
MOVE tb-prog-line TO stampa-prog-line.
WRITE: /001 stampa.
IF vn_stampa = 1.
READ TEXTPOOL wa_trdir-name INTO ttab LANGUAGE wa_trdir-rload.
READ TABLE ttab WITH KEY id = 'R'.
** WRITE: 147 ttab-entry(70).
CLEAR vn_stampa.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.
AT LINE-SELECTION.
MOVE sy-lisel+7(40) TO va_prog.
MOVE sy-lisel+132(4) TO va_riga.
PERFORM view_dettaglio USING va_prog
va_riga.
*&-----------------------
*& Form view_dettaglio
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM view_dettaglio USING prog LIKE va_prog
riga LIKE va_riga.
PERFORM bdc_dynpro USING 'SAPLWBABAP' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'SHOP'.
PERFORM bdc_field USING 'RS38M-PROGRAMM'
prog.
PERFORM bdc_dynpro USING 'SAPLS38E' '0400'.
PERFORM bdc_field USING 'BDC_OKCODE'
'DCAN'.
PERFORM bdc_field USING 'RSTXP-TDFIRST'
riga.
CALL TRANSACTION 'SE38' USING bdcdata
MODE 'E' AND SKIP FIRST SCREEN.
REFRESH bdcdata.
clear bdcdata.
ENDFORM. " view_dettaglio
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "BDC_FIELD