SE71, bir isim yazıp Create
butonuna basılırsa aşağıdaki gibi bir ekran ile sapscript yaratma işine
başlanmış olur:
"Pages" sekmesinden aşağıdaki gibi Edit-> "Create Element" diyerek yeni bir page yaratılır.
Ok den sonra aşağıdaki gibi ilk Page oluşturulmuş olur. İstenirse bu şekilde Page sayıları artırılabilir.Sayfaların sırasını belirlerken "Next Page" kısmı kullanılır.
"Page Windows" tıklandığında otomatik olarak MAIN penceresinin yaratılmış olduğu görülebilir.
Şimdi istenen şekilde windows değişiklik yapmak için (F9) "Text Elements" e basılır.
Aşağıdaki
gibi çok user-friend olmayan bir editor
açılır. Bu editor anlaşılır şekle çevirmek için, GOTO-> Change Editor.
Aşağıdaki gibi format kısımlarının olduğu,
satırların ayrı ayrı gösterildiği üzerinda rahat değişiklik yapacağınız bir
editor açılır.
Şimdi daha herşeye hakim olabilirsiniz. Sadece satırların başına satırın ne olduğunu gösteren ifadeleri yazmanız yeterli olacaktır. Aşağıda satırları ne şekilde kullanacağını gösterecek belirteçlerin bir listesi var. Örneğin, sap kod satırı yazmak için "/:" kullanıyoruz: /: SET TIME MASK = 'HH:MM'
Veya Comment yazmak için "/*" kullanılır. /* This line is for header.
*
|
Default Paragraph
|
Continuous Text
|
|
=
|
Extended Line
|
(
|
Raw Line
|
/
|
Line Feed
|
/=
|
Line Feed and Extended Line
|
/(
|
Line Feed and Raw Line
|
/:
|
Command Line
|
/*
|
Comment Line
|
/E
|
Text Element
|
Ayrıca aşağıdaki gibi tanımladığınız,
fontları, veya paragrafları burada kullanabilirsiniz.
AS
|
Default paragraph
|
C
|
Centered
|
IL
|
Item line
|
IT
|
Item title
|
TI
|
LayoutSet title in INFO window
|
UL
|
Paragraph for separator
|
Örnek : UL &uline(67)&
IT Ges,,Linie,,Flugdatum,,Abflug,,Preis,,Währung
Paragraf Değerlerinin
değiştirilmesi için aşağıdaki butonlar yardımıyla istenen kısımlarda istenen
değişiklikler yapılır. Sonra Sapscritp içinde row başına yazınca verilen alanların
tanımlanan şekillerdeki gibi değiştiği görülür.
Sapscript in tanımlamaları bu kadar. Bir örnek
incelemek istenirse S_EXAMPLE_1 scripti kullanılabilir.
Şimdi bu sapscripti kontrol edecek programı
yazmaya geldi.
Yazılacak programda, Sapscripti kullanmak
için aşağıdaki functionlar kullanılır.
Open_form => İlk olarak kullanılır. Form
ve yazıcının atanması için kullanılır.
Start_form => Yazma kısmından önce
kullanılır. Sapscript başlatılır.
Write_form => Loop içinde veya ekrana tek
tek yazılacak alanlar için kullanılır.
End_form => Geçerli sayfanın yazılmasını
sonlandırır. Tekrar çalıştırmak için Start_form kulanmak gerekir.
Close_form => Bundan sonra form bitirilmiş
olur ve tekar başlatılamaz.
Örnek
program :
REPORT zexample_sapscript.
TABLES: scustom, sbook, spfli.
SELECT-OPTIONS: s_id FOR scustom-id DEFAULT 1 TO 1,
s_fli FOR sbook-carrid DEFAULT 'LH' TO 'LH'.
DATA customers LIKE scustom OCCURS 100
WITH HEADER LINE.
DATA bookings LIKE sbook OCCURS 1000
WITH HEADER LINE.
DATA connections LIKE spfli OCCURS 1000
WITH HEADER LINE.
DATA: BEGIN OF sums OCCURS 10,
forcuram LIKE sbook-forcuram,
forcurkey LIKE sbook-forcurkey,
END OF sums.
* Get data
SELECT * FROM scustom INTO TABLE customers
WHERE id IN s_id
ORDER BY PRIMARY KEY.
SELECT * FROM sbook INTO TABLE bookings
WHERE customid IN s_id AND carrid IN s_fli
ORDER BY PRIMARY KEY.
SELECT * FROM spfli INTO TABLE connections
FOR ALL ENTRIES IN bookings
WHERE carrid = bookings-carrid
AND connid = bookings-connid
ORDER BY PRIMARY KEY.
* Open print job
CALL FUNCTION 'OPEN_FORM'
EXPORTING
device = 'PRINTER'
form = 'S_EXAMPLE_1'
dialog = 'X'
EXCEPTIONS
canceled = 1
device = 2
form = 3
options = 4
unclosed = 5
OTHERS = 6.
IF sy-subrc <> 0.
WRITE 'Error in open_form'(001).
EXIT.
ENDIF.
* Print form for all customers
LOOP AT customers.
* Set customer address
scustom = customers.
* Open form of respective customer
CALL FUNCTION 'START_FORM'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
WRITE 'Error in start_form'(002).
EXIT.
ENDIF.
* Display column headings of main window
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'HEADING'
function = 'SET'
type = 'TOP'
window = 'MAIN'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
WRITE 'Error in write_form printing top element of main'(003).
EXIT.
ENDIF.
* Customer bookings
CLEAR sums. REFRESH sums.
LOOP AT bookings
WHERE customid = customers-id.
sbook = bookings.
* Get departure time
READ TABLE connections WITH KEY carrid = bookings-carrid
connid = bookings-connid.
IF sy-subrc = 0.
spfli = connections.
ELSE.
CLEAR spfli.
ENDIF.
* Print position
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'BOOKING'
function = 'SET'
type = 'BODY'
window = 'MAIN'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
WRITE 'Error in write_form printing body of main'(004).
EXIT.
ENDIF.
* Add current position to corresponding entry in table sums
MOVE-CORRESPONDING sbook TO sums.
COLLECT sums.
ENDLOOP. " at bookings
* Print sum
LOOP AT sums.
MOVE-CORRESPONDING sums TO sbook.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'SUM'
function = 'SET'
type = 'BODY'
window = 'MAIN'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
WRITE 'Error in write_form printing sum of invoice'(005).
EXIT.
ENDIF.
ENDLOOP. " at sums
* Close customer form
CALL FUNCTION 'END_FORM'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
WRITE 'Error in end_form'(006).
EXIT.
ENDIF.
ENDLOOP. " at customers
* close print job
CALL FUNCTION 'CLOSE_FORM'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
WRITE 'Error in close_form'(007).
EXIT.
ENDIF.
TABLES: scustom, sbook, spfli.
SELECT-OPTIONS: s_id FOR scustom-id DEFAULT 1 TO 1,
s_fli FOR sbook-carrid DEFAULT 'LH' TO 'LH'.
DATA customers LIKE scustom OCCURS 100
WITH HEADER LINE.
DATA bookings LIKE sbook OCCURS 1000
WITH HEADER LINE.
DATA connections LIKE spfli OCCURS 1000
WITH HEADER LINE.
DATA: BEGIN OF sums OCCURS 10,
forcuram LIKE sbook-forcuram,
forcurkey LIKE sbook-forcurkey,
END OF sums.
* Get data
SELECT * FROM scustom INTO TABLE customers
WHERE id IN s_id
ORDER BY PRIMARY KEY.
SELECT * FROM sbook INTO TABLE bookings
WHERE customid IN s_id AND carrid IN s_fli
ORDER BY PRIMARY KEY.
SELECT * FROM spfli INTO TABLE connections
FOR ALL ENTRIES IN bookings
WHERE carrid = bookings-carrid
AND connid = bookings-connid
ORDER BY PRIMARY KEY.
* Open print job
CALL FUNCTION 'OPEN_FORM'
EXPORTING
device = 'PRINTER'
form = 'S_EXAMPLE_1'
dialog = 'X'
EXCEPTIONS
canceled = 1
device = 2
form = 3
options = 4
unclosed = 5
OTHERS = 6.
IF sy-subrc <> 0.
WRITE 'Error in open_form'(001).
EXIT.
ENDIF.
* Print form for all customers
LOOP AT customers.
* Set customer address
scustom = customers.
* Open form of respective customer
CALL FUNCTION 'START_FORM'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
WRITE 'Error in start_form'(002).
EXIT.
ENDIF.
* Display column headings of main window
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'HEADING'
function = 'SET'
type = 'TOP'
window = 'MAIN'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
WRITE 'Error in write_form printing top element of main'(003).
EXIT.
ENDIF.
* Customer bookings
CLEAR sums. REFRESH sums.
LOOP AT bookings
WHERE customid = customers-id.
sbook = bookings.
* Get departure time
READ TABLE connections WITH KEY carrid = bookings-carrid
connid = bookings-connid.
IF sy-subrc = 0.
spfli = connections.
ELSE.
CLEAR spfli.
ENDIF.
* Print position
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'BOOKING'
function = 'SET'
type = 'BODY'
window = 'MAIN'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
WRITE 'Error in write_form printing body of main'(004).
EXIT.
ENDIF.
* Add current position to corresponding entry in table sums
MOVE-CORRESPONDING sbook TO sums.
COLLECT sums.
ENDLOOP. " at bookings
* Print sum
LOOP AT sums.
MOVE-CORRESPONDING sums TO sbook.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'SUM'
function = 'SET'
type = 'BODY'
window = 'MAIN'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
WRITE 'Error in write_form printing sum of invoice'(005).
EXIT.
ENDIF.
ENDLOOP. " at sums
* Close customer form
CALL FUNCTION 'END_FORM'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
WRITE 'Error in end_form'(006).
EXIT.
ENDIF.
ENDLOOP. " at customers
* close print job
CALL FUNCTION 'CLOSE_FORM'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
WRITE 'Error in close_form'(007).
EXIT.
ENDIF.
Bu yorum yazar tarafından silindi.
YanıtlaSilPaylaşım için teşekkürler,
YanıtlaSil