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
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.