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.

giovedì 26 novembre 2009

Caricare una immagine in una dynpro

Per poter caricare una immagine è necessario caricarla sul server sap seguendo le seguenti istruzioni:
-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.
DATA: v_jobname LIKE tbtcjob-jobname.
DATA: v_jobcount LIKE tbtcjob-jobcount.
DATA: v_status TYPE tbtco-status.
DATA: v_spool TYPE tbtcp-listident.
RANGES: r_kappl FOR nast-kappl,
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

Ecco un esempio di report che genera un ALV dinamicamente in base ai campi di una tabella interna. L'unica attenzione è che il report non deve avere righe più lunghe di 72 caratteri.


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.