martedì 30 marzo 2010

Hotspot su alvgrid

Per creare l'evento hotspot su un campo di una alvgrid è necessario implementare la form user_command nel seguente modo:


FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.


CASE r_ucomm.
WHEN '&IC1'.

IF rs_selfield-fieldname = 'ZDOC_CONT'.
*
IF rs_selfield-value IS NOT INITIAL.
*
IF rs_selfield-value IS NOT INITIAL.
READ TABLE tb_ricavi INDEX rs_selfield-tabindex
INTO wa_ricavi.
IF sy-subrc = 0.
SET PARAMETER ID 'BLN' FIELD rs_selfield-value.
SET PARAMETER ID 'BUK' FIELD wa_ricavi-bukrs.
SET PARAMETER ID 'GJR' FIELD wa_ricavi-gjahr.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN .
ENDIF.
ENDIF.
*
ENDIF.
ENDIF.
ENDCASE.
ENDFORM. " USER_COMMAND

giovedì 25 marzo 2010

Bloccare la modifica di un programma

Volete che nessuno modifichi il vostro programma?
Beh basta selezionare il flag blocco editor nelle proprietà del programma:


Quando qualcuno cercherà di modificare il programma il sistema restituirà il seguente messaggio:



Leggere messaggi di ritorno call transaction

Per poter leggere il testo dei messaggi di ritorno di una call transaction è possibile utilizzare la seguente funzione:

DATA: va_msgid LIKE sy-msgid,
va_msgno LIKE sy-msgno,
va_msgty LIKE sy-msgty,
messaggio LIKE message.

LOOP AT tb_messtab.
CLEAR:va_msgid,va_msgno,va_msgty.
va_msgid = tb_messtab-msgid.
va_msgno = tb_messtab-msgnr.
va_msgty = tb_messtab-msgtyp.
CALL FUNCTION 'WRITE_MESSAGE_NEW'
EXPORTING
msgid = va_msgid
msgno = va_msgno
msgty = va_msgty
msgv1 = tb_messtab-msgv1
msgv2 = tb_messtab-msgv2
msgv3 = tb_messtab-msgv3
msgv4 = tb_messtab-msgv4
msgv5 = ' '
IMPORTING
* ERROR =
messg = messaggio.
CLEAR wa_out.
MOVE messaggio-msgtx TO wa_out-line.
APPEND wa_out TO tb_out.
ENDLOOP.

Il risultato può essere il seguente:





giovedì 18 marzo 2010

Inviare popup ad un utente

Utilizzando la funzione TH_POPUP è possibile inviare messaggi in popup ad un utente specifico:









martedì 16 marzo 2010

Sommare dinamicamente colonne tabella

Per poter sommare dinamicamente determinate colonne di una tabella è possibile utilizzare la seguente query:
In particolare viene calcolata la somma delle colonne da hsl01 a hsl16.

SELECT * FROM glt0
WHERE rldnr = '00'
AND rrcty = '0'
AND rvers = '001'
AND bukrs = p_bukrs
AND ryear = p_gjahr
AND racct IN so_hkont
AND rbusa IN so_gsber
AND rtcur = wa_waers
AND rpmax = '016'.

CLEAR bal_accx.
ADD glt0-hsl01 THEN glt0-hsl02
UNTIL glt0-hsl16 GIVING bal_accx
ACCORDING TO so_monat.
bal_acc = bal_acc + bal_accx.

ENDSELECT.