Basic GuiXT comes native with every installation of SAP. You can see this when you logon to sap.
Customize Local Layout (Button - Alt F12) -> Activate GuiXT
This version of GuiXT however only makes it possible to hide screen elements (and things like that. Condensing multiple screens into one screen, requires advanced functionality not supported in this version. You have to buy (somewhat pricey) licenses for that from Synactive Inc.
http://www.synactive.com/www_e/produkte.html
Here is an example of a script that we are currently using:
// Created on 11/17/2009
// Created by MS
Parameter l_scrn
set V[z_vbo2_scr] "&U[l_scrn]" // storing the value of the local parameter into a global variable
if not V[z_vbo2_dcn_amt] // making Deduction Amount required set V[z_vbo2_dcn_tmp] "1" set V[z_vbo2_scr] "" return "E:Please enter the deduction amount" "-statusline"
endif
if not V[z_vbo2_doc_txt] // making Document Text required set V[z_vbo2_doc_tmp] "1" set V[z_vbo2_scr] "" return "E:Please enter a document text" "-statusline"
endif
if not V[z_vbo2_chckno] // making check number required set V[z_vbo2_doc_tmp] "1" set V[z_vbo2_scr] "" return "E:Please enter a check number" "-statusline"
endif
if V[z_vbo2_transpayr_chck=X] and not V[z_vbo2_tranpayr]
set V[z_vbo2_doc_tmp] "1" set V[z_vbo2_scr] "" return "E: Transfer Payer is checked. Please enter an Alternate Payer" "-statusline"
endif
// Change Rebate Agreement
Screen SAPMV13A.0401
set V[z_vbo2_agmtn] "&F[Agreement]" // read the Agreement number Enter
// Information
Screen SAPMSDYP.0010
Enter
// Change Cust/ Group Rebate : Overview Agreement
Screen SAPMV13A.0410 title "Processing VBO2 - Please Wait ..." set V[z_vbo2_rebrecpt] "&F[Rebate recipient]" // Rebate recipient for this agreement set V[z_vbo2_tranpayr] "&V[z_vbo2_tranpayr]" // Read the actual value of the variable set V[z_vbo2_transpayr_chck] "&V[z_vbo2_transpayr_chck]" // Read the value of the checkbox set V[z_vbo2_tranpayr_hold] "&V[z_vbo2_tranpayr]"
// set V[z_vbo2_invoice] "&V[z_vbo2_invoice]" set V[z_vbo2_invoice] "" if V[z_vbo2_tranpayr] and V[z_vbo2_transpayr_chck=X] set V[z_rebate_recpt] "&V[z_vbo2_rebrecpt]" set V[z_alt_payer] "" else if V[z_vbo2_tranpayr] and not V[z_vbo2_transpayr_chck=X] set V[z_alt_payer] "&V[z_vbo2_tranpayr]" set V[z_rebate_recpt] "" endif endif if not V[z_vbo2_tranpayr] set V[z_vb02_tmp_cust] "&V[z_vbo2_rebrecpt]" // base case else set V[z_vb02_tmp_cust] "&V[z_vbo2_tranpayr]" // transfer case and alt payer case endif
// Setting up for RFC calls
// RFC to return document number and document count for non invoice related deducts
set V[zeros] "0000000000" // 10 zeros for padding set V[cust_len] "&V[z_vb02_tmp_cust]" "-stringlength" // how many digits set V[cust_len] "10" - "&V[cust_len]" // Zeros required set V[z_vb02_tmp_cust] "&V[zeros](1-&[cust_len])&V[z_vb02_tmp_cust]" // Padded material number call "Z_ZGXT_rfC_REF2DOC" in.CUSTNR="&V[z_vb02_tmp_cust]" in.REFNR="&V[z_vbo2_chckno]" out.DOCNO="z_docu_num" Out.CNTNR="z_docu_count" set V[z_vbo2_docu_count] "&V[z_docu_count]" set V[z_vbo2_docu_count] "&V[z_vbo2_docu_count]" * "1" set V[z_vbo2_docu_num] "&V[z_docu_num]"
// if V[z_vbo2_docu_count>1] // checks if the document number is greater than 1
// set V[z_vbo2_scr] ""
// message "E: Must Process Manually" "-statusline"
// enter "/nVBO2"
// goto SCRIPT_END
// endif if not V[z_vbo2_docu_num] // based on what comes back from function module set V[z_vbo2_scr] "" message "E: Invalid Check Number for Agreement &F[Agreement]" "-statusline" enter "/nVBO2" goto SCRIPT_END endif
label VBO2_PAY
Enter "/24" // Pay pushbutton vbo2
// Change Cust/ Group Rebate 1524 : Overview Conditions Cust Reb (ZO02)
Screen SAPMV13A.3007
Enter "=SUCH" // Find
// Selection screen
Screen SAPLSSEL.1104
if F[Volume rebate group] // if this field is displayed on this screen set F[Volume rebate group] "99" Enter "/8" goto next_stmt2 endif Enter "/12" goto srch_mat2
label next_stmt2
// Information
Screen SAPMSDYP.0010 // Popup window - Volume rebate group "99" not found set V[z_temp] "X" Enter if V[z_temp] set V[z_temp] "" goto MAT_SEL endif
// Change Cust/ Group Rebate 1524 : Overview Conditions Cust Reb (ZO02)
Screen SAPMV13A.3007
set V[i] "1"
Label LOOP_START If not F[Amt.to be paid(&V[i])] goto LOOP_END endif set V[z_vbo2_field_label] "&F[HEADERLINE(&V[i])]" set V[z_vbo_str] "&V[z_vbo2_field_label]" set V[x] "&V[z_vbo2_field_label]" pattern="%POSTING_GROUP" if Q[OK] set F[Amt.to be paid(&V[i])] "&V[z_vbo2_dcn_amt]" goto LOOP_END endif set V[i] "&V[i]" + "1" goto LOOP_START
Label LOOP_END
Enter "/80" // clicking first page button
// Change Cust/ Group Rebate 1524 : Overview Conditions Cust Reb (ZO02)
Screen SAPMV13A.3007
Enter "=SUCH" // Find
// Selection screen
Screen SAPLSSEL.1104
set F[Volume rebate group] "99" Enter "/8"
Screen SAPMV13A.3007
set V[z_vbo2_dcn_amt2] "&F[Amt.to be paid(&V[i])]" Enter "/11" OnError="Continue" // Save if V[_lasterror] set V[z_vbo2_scr] "" set V[z_vbo2_message] "&V[_lasterror]" goto SCRIPT_END endif goto skip_mat2
label srch_mat2
Label MAT_SEL
set V[i] "1" // Change Cust/ Group Rebate 88 : Overview Conditions Cust Reb (ZO02)
Screen SAPMV13A.3007 Enter "=SUCH" // Find // Selection screen
Screen SAPLSSEL.1104 if not F[Material] set V[z_vbo2_scr] "" message "E: Posting Group / Material not found" "-statusline" enter "/nVBO2" goto SCRIPT_END endif set F[Volume rebate group] "" set F[Material] "99999" Enter "/8"
label VBO2_CONT_PG // Continuing searching for Posting Group / Material
Screen SAPMV13A.3007
set V[z_vbo2_field_label] "&F[HEADERLINE(&V[i])]" set V[z_vbo_str] "&V[z_vbo2_field_label]" set V[x] "&V[z_vbo2_field_label]" pattern="%CREDIT / DEBIT" if Q[OK] goto CONTINUE_PROCESS endif set F[Amt.to be paid(&V[i])] "&V[z_vbo2_dcn_amt]" goto LOOP_END2
label CONTINUE_PROCESS
set V[z_vbo2_scr] "" message "E: Posting Group / Material not found" "-statusline" enter "/nVBO2" goto SCRIPT_END
Label LOOP_END2
Enter "/80"
// Change Cust/ Group Rebate 88 : Overview Conditions Cust Reb (ZO02)
Screen SAPMV13A.3007
Enter "=SUCH" // Find
// Selection screen
Screen SAPLSSEL.1104
set F[Material] "99999" Enter "/8"
Screen SAPMV13A.3007
set V[z_vbo2_dcn_amt2] "&F[Amt.to be paid(&V[i])]" Enter "/11" OnError="Continue" // Save VBO2 if V[_lasterror] set V[z_vbo2_scr] "" set V[z_vbo2_message] "&V[_lasterror]" goto SCRIPT_END endif
// At this point, a "6.." document has been created
label skip_mat2
// Partner selection
Screen SAPLV09C.0120
call "Z_ZGXT_rfC_errcust" in.CUSTOMER="&V[z_vb02_invoice]" Enter
// Information
Screen SAPMSDYP.0010
set V[z_vbo2_dcn_pmt_tmp] "&F[MESSTXT1]" set V[z_message_type] "&V[z_vbo2_dcn_pmt_tmp](1-10)" if V[z_message_type=PartRebSet] // True = Found "99" set V[z_vbo2_dcn_pmt] "&V[z_vbo2_dcn_pmt_tmp](21-29)" else set V[z_vbo2_scr] "" message "E: Posting Group / Material not found" "-statusline" enter "/nVBO2" goto SCRIPT_END endif Enter
// Goto Transaction VF01 to get VF Number
Screen SAPMV13A.0401
Enter "/n"
Screen SAPLSMTR_NAVIGATION.0100
set V[z_cntr] "1"
label TRY_VF01_AGAIN
if V[z_cntr>20] goto EXIT_TRY_VF01_AGAIN else set V[z_vbo2_fldmsge] "" endif if V[z_vbo2_tranpayr] and V[z_vbo2_transpayr_chck=X] // if it has a value goto START_VA02 else goto SKIP_VA02 endif
label SKIP_VA02
Enter "/nvf01"
label START_VA02
if V[z_vbo2_tranpayr] and V[z_vbo2_transpayr_chck=X] enter "/nva02" include "va02_transfer_cust.txt" // ************* z_vbo2_dcn_pmt endif
Screen SAPMV60A.0102
title "Processing Document - Please Wait ..." retry on error set cell[Docs to be processed,Document,1] "&V[z_vbo2_dcn_pmt]" Enter "/11" // Save
Screen SAPMV60A.0102
if V[_message] set V[z_vbo2_vf01_num_tmp] "&V[_message]" set V[z_vbo2_vf01_num] "&V[z_vbo2_vf01_num_tmp](10-18)" endif if V[z_vbo2_vf01_num=g documen] set V[z_vbo2_vf01_num] "" set V[z_cntr] "&V[z_cntr]" + "1" set V[z_vbo2_fldmsge] "yes" goto TRY_VF01_AGAIN endif
label EXIT_TRY_VF01_AGAIN if V[z_vbo2_fldmsge=yes] set V[z_vbo2_fldmsge] "" set V[z_vbo2_scr] "" message "E: Process &V[z_vbo2_dcn_pmt] With Transaction VF01" "-statusline" enter "/nVBO2" goto SCRIPT_END endif set V[z_vbo2_chg_fi_count] "0"
label retry_CHG_FI
call "Z_ZGXT_RFC_CHG_FI_CUST_TXT" in.DOCNO="&V[z_vbo2_vf01_num]" in.DOCTXT="&V[z_vbo2_doc_txt]" out.RET="z_rfc_good" set V[z_vbo2_ret] "&V[z_rfc_good]" if not V[z_vbo2_ret=X] and V[z_vbo2_chg_fi_count<20] set V[z_vbo2_chg_fi_count] "&V[z_vbo2_chg_fi_count]" + "1" goto retry_CHG_FI endif if V[z_vbo2_ret=X] enter "/nF-32" wait="1000" else enter "/nvbo2" goto SCRIPT_END endif
// Clear Customer: Header Data
Screen SAPMF05A.0131
retry on error set V[z_rebate_recpt] "&V[z_vbo2_rebrecpt]" // 2nd entry set V[z_alt_payer] "&V[z_vb02_tmp_cust]" // 1st entry if V[z_vbo2_tranpayr_hold] and V[z_vbo2_transpayr_chck=X] set F[Account] "&V[z_vbo2_tranpayr_hold]" set V[z_vb02_tmp_cust] "&V[z_vbo2_tranpayr_hold]" set V[z_vbo2_tranpayr_hold] "" else if V[z_vbo2_tranpayr_hold] and not V[z_vbo2_transpayr_chck=X] set F[Account] "&V[z_vbo2_rebrecpt]" set V[z_vb02_tmp_cust] "&V[z_vbo2_tranpayr_hold]" set V[z_vbo2_tranpayr_hold_tmp] "&V[z_vbo2_tranpayr_hold]" set V[z_vbo2_tranpayr_hold] "" else set F[Account] "&V[z_vbo2_rebrecpt]" set V[z_vb02_tmp_cust] "&V[z_vbo2_rebrecpt]" endif endif set R[Document Number] "X" Enter "/16" // Open items
// Clear Customer Enter selection criteria
Screen SAPMF05A.0731
set F[From(1)] "&V[z_vbo2_vf01_num]" // 9 number if V[z_vbo2_tranpayr_hold_tmp] and not V[z_vbo2_transpayr_chck=X] goto ALT_PAYER else set F[From(2)] "&V[z_docu_num]" // (From Initial RFC call) "&V[z_vbo2_vf01_num]" Enter "/16" // Open items goto SKIP_ALT_PAYER endif
label ALT_PAYER
Enter "/7" // Other account
// Clear Customer Select open items
Screen SAPMF05A.0710
set F[Account] "&V[z_alt_payer]" //"&V[z_rebate_recpt]" //"&V[z_vbo2_tranpayr]" set R[Document Number] "X" Enter "/16" // Open items
// Clear Customer Enter selection criteria
Screen SAPMF05A.0731
set F[From(1)] "&V[z_docu_num]" //"&V[z_vbo2_dcn_amt]" Enter "/16"
label SKIP_ALT_PAYER
// Clear Customer Process open items
Screen SAPDF05X.3100
Enter "=OMX" // Select All
// Clear Customer Process open items
Screen SAPDF05X.3100
Enter "=Z-" // Deactivate Items.2
// Clear Customer Process open items
Screen SAPDF05X.3100
Enter "=REST" // Res.items
// Clear Customer Create residual items
Screen SAPDF05X.3100
set V[z_vb02_pos] "" set V[z_vb02_neg] "" set V[absrow] "1" // Absolute row number set V[relrow] "1" // Relative row number set V[idx] "1" GetTableAttribute T[SAPDF05X_TC_6106] FirstVisibleRow=FVisRow LastVisibleRow=LVisRow LastRow=LastRow if V[FVisRow=1] // First row on screen? goto new_row_f32 endif Enter "/ScrollToLine=1" Table="T[SAPDF05X_TC_6106]" // scroll to first line
label new_screen_f32
Screen SAPDF05X.3100
GetTableAttribute T[SAPDF05X_TC_6106] FirstVisibleRow=FVisRow LastVisibleRow=LVisRow LastRow=LastRow set V[relrow] 1
label new_row_f32
if V[absrow>&V[LastRow]] // end of table? goto end_of_table_f32 endif if V[absrow>&V[LVisRow]] // end of screen? Enter "/ScrollToLine=&V[absrow]" Table="T[SAPDF05X_TC_6106]" goto new_screen_f32 endif
label NEXT_SELECTION set V[z_f32_usdgross_&V[idx]] "&cell[SAPDF05X_TC_6106,Net amount,&V[relrow]]"
// Check negative value if (V[z_f32_usdgross_&V[idx]=&V[z_vbo2_dcn_amt2]] or V[z_f32_usdgross_&V[idx]=&V[z_vbo2_rfc_pymtamt]] or V[z_f32_usdgross_&V[idx]=&V[z_vbo2_rfc_invamt]]) and not V[z_vb02_neg=yes] SetCursor cell[SAPDF05X_TC_6106,Net amount,&V[relrow]] enter "/2" set V[z_vb02_neg] "yes" goto VALUE_FOUND endif set V[z_tmp] "&V[z_vbo2_dcn_amt2]" * "-1" set V[z_tmp2] "&V[z_vbo2_rfc_pymtamt]" * "-1" set V[z_tmp3] "&V[z_vbo2_rfc_invamt]" * "-1" set V[tmp] "&cell[SAPDF05X_TC_6106,Net amount,&V[relrow]]" set V[tmp] "&V[tmp]" * "1"
// Check positive value
if (V[tmp=&V[z_tmp]] or V[tmp=&V[z_tmp2]] or V[tmp=&V[z_tmp3]]) and not V[z_vb02_pos=yes] // postive value setCursor cell[SAPDF05X_TC_6106,Net amount,&V[relrow]] enter "/2" set V[z_vb02_pos] "yes" goto VALUE_FOUND endif set V[z_f32_tmp] "&cell[SAPDF05X_TC_6106,Document Number,&V[relrow]]" if not V[z_f32_tmp] goto end_of_table_f32 endif set V[absrow] "&V[absrow]" + "1" set V[relrow] "&V[relrow]" + "1" set V[idx] "&V[idx]" + "1" goto new_row_f32
label end_of_table_f32
label VALUE_FOUND
Screen SAPDF05X.3100
if V[z_vb02_neg=yes] and V[z_vb02_pos=yes] set cell[SAPDF05X_TC_6106,RCd,&V[relrow]] "C20" goto SELECTION_COMPLETE else set cell[SAPDF05X_TC_6106,RCd,&V[relrow]] "C20" set V[absrow] "1" set V[relrow] "1" set V[idx] "1" goto NEXT_SELECTION endif
label SELECTION_COMPLETE Enter "/11" // Post
// Clear Customer: Header Data
Screen SAPMF05A.0131
set V[z_vbo2_msg] "&V[_message]" set V[z_vbo2_msg2] "&V[_message](10-19)" set V[z_vbo2_scr] "X" set V[z_vbo2_f32_docnum] "&V[z_vbo2_msg2]" // set V[z_vbo2_amt] "&V[z_vbo2_dcn_amt]" set V[z_vbo2_doc_txt_disp] "&V[z_vbo2_doc_txt]" set V[z_vbo2_agmtn] "&F[Agreement]" set V[z_vbo2_tranpayr_disp] "&V[z_vbo2_tranpayr_hold_tmp]" set V[z_vbo2_successful] "X" return // "S: &V[z_vbo2_msg]" "-statusline" // go back to VBO2
label SCRIPT_END
Hope this helps,
Neal