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