giovedì 11 novembre 2010

Valorizzazione dinamica campi X di bapi

data: w_field1(50) TYPE c,
w_field2(50) TYPE c,
cnt TYPE i,
lunghezza TYPE i,
cnt_field TYPE i, " field corrente nel buffer start
it_curr TYPE i,
fieldname TYPE dd03l-fieldname,
cnt_chare TYPE i,

FIELD-SYMBOLS: TYPE ANY.
FIELD-SYMBOLS: TYPE ANY.

MOVE 'BAPIMEPOITEM' TO wa_tabname.
SELECT COUNT( * ) FROM dd03l INTO lunghezza WHERE tabname = wa_tabname .

LOOP AT po_items.

MOVE-CORRESPONDING po_items TO poitem.
APPEND poitem.

cnt_field = 0 .
cnt_chare = 0 .
it_curr = 1.

ASSIGN (w_field1) TO .
ASSIGN (w_field2) TO .

WHILE cnt_chare <= lunghezza .

SELECT SINGLE * FROM dd03l WHERE tabname = wa_tabname
AND position = it_curr.

fieldname = dd03l-fieldname.
cnt_chare = cnt_chare + 1.
it_curr = it_curr + 1 .
CLEAR w_field2.
CONCATENATE 'POITEM-' fieldname INTO w_field2 IN CHARACTER MODE.
CONDENSE w_field2 NO-GAPS.
ASSIGN (w_field2) TO .
IF sy-subrc = 0 AND IS NOT INITIAL.
CLEAR w_field1.
CONCATENATE 'POITEMX-' fieldname INTO w_field1 IN CHARACTER MODE.
CONDENSE w_field1 NO-GAPS.
IF cnt_chare = 1.
ASSIGN (w_field1) TO .
= po_items-po_item.
CONTINUE.
ENDIF.

ASSIGN (w_field1) TO .
= 'X'.
ENDIF.
ENDWHILE.

APPEND poitemx.
CLEAR poitemx.
ENDLOOP.

mercoledì 4 agosto 2010

Creare function di ricerca x help custom

FUNCTION ZZSEL_SAKNR.
*"----------------------------------------------------------------------
*"*"Interfaccia locale:
*" EXPORTING
*" REFERENCE(SAKNR) TYPE SAKNR
*" REFERENCE(TXT50) TYPE TXT50
*" TABLES
*" SHLP_TAB TYPE SHLP_DESCT
*" RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*" REFERENCE(SHLP) TYPE SHLP_DESCR
*" REFERENCE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL
*"----------------------------------------------------------------------

data wa_opt TYPE LINE OF DDSHSELOPS.


IF CALLCONTROL-STEP = 'SELECT'.
IF SHLP-SELOPT[] is INITIAL.
clear wa_opt.
wa_opt-SHLPNAME = 'ZSAKNR'.
wa_opt-SHLPFIELD = 'SAKNR'.
wa_opt-SIGN = 'I'.
wa_opt-OPTION = 'BT'.
wa_opt-LOW = '2205150001'.
wa_opt-HIGH = '2210100003'.

append wa_opt to SHLP-SELOPT .

EXIT. "Don't process STEP DISP additionally in this call.
ENDIF.
ENDIF.

ENDFUNCTION.

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.

lunedì 11 gennaio 2010

Valorizzare dinamicamente range di numerazione

Per valorizzare dinamicamente una select option contenente i numeri documenti di un range di numerazione è possibile utilizzare il seguente codice;
una volta inserito in range di numerazione vengono selezionati i relativi estremi di numerazione:





SELECT-OPTIONS: s_vbeln FOR vbrk-vbeln,
s_range FOR nriv-nrrangenr.



AT SELECTION-SCREEN.
CLEAR s_vbeln.
REFRESH s_vbeln.
SELECT * FROM nriv WHERE object = 'RV_BELEG' AND
subobject = ' ' AND
nrrangenr IN s_range AND
toyear = ' '.
IF sy-subrc EQ 0.
MOVE 'I' TO s_vbeln-sign.
MOVE 'BT' TO s_vbeln-option.
MOVE nriv-fromnumber TO s_vbeln-low.
MOVE nriv-tonumber TO s_vbeln-high.
APPEND s_vbeln.
CLEAR s_vbeln.
ENDIF.
ENDSELECT.