Tải bản đầy đủ (.doc) (114 trang)

Giao trinh ngon ngu ABAPC

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.64 MB, 114 trang )

ABAP Programming I

I. Tạo chương trình ABAP cơ bản:
1. Định nghĩa dữ liệu với trình soạn thảo ABAP (ABAP Editor):
a. Tạo chương trình ABAP
ABAP (Advanced Business Application Programming) là ngôn ngữ lập trình được sử
dụng để phát triển các ứng dụng SAP.
ABAP Editor là công cụ phát triển mà SAP R/3 cung cấp. Công cụ này cho phép bạn
tạo, hiệu chỉnh và thực thi chương trình ABAP. Bạn có thể sử dụng cửa sổ ‘SAP Easy
Access’ để truy cập ABAP Editor.
Để mở ABAP Editor, gõ transaction code ‘SE38’ vào trường Command và nhấn Enter.
Để tạo chương trình ABAP, cần xác định trên chương trình trong trường Program, tên
bắt đầu là Y hoặc Z → nhấn Create.
Sử dụng cửa sổ ‘Program Attributes’ để xác định tiêu đề và các thuộc tính bao gồm loại
chương trình và application area mà chương trình phụ thuộc.
Khi bạn hiệu chỉnh và lưu chương trình ABAP, đó là phiên bản chưa kích hoạt
(inactive). Không thể thực thi chương trình này, để thực thi được cần kích hoạt
(activate) nó.
b. Cấu trúc ABAP:


Chương trình ABAP chứa nhiều dòng mã gọi là câu lệnh (statement), được sử dụng để
định nghĩa và thao tác dữ liệu.
Khi viết câu lệnh, bạn cần theo nguyên tắc nhất định để đảm bảo trình xử lý ABAP có
thể biên dịch đúng và thực thi câu lệnh đưa ra kết quả mong muốn.
Câu lệnh bắt đầu bằng từ khóa và kết thúc bằng dấu chấm. Nên có ít nhất một khoảng
trắng để phân chia các từ trong câu lệnh.
Ví dụ:
write / 20(5) 'Hello'.
Chương trình ABAP cũng chứa chú thích để cải tiến tính dễ đọc cho chương trình và nó
được bỏ qua khi thực thi. Dòng ghi chú bắt đầu bằng dấu * hoặc dấu ". Ví dụ:


*&------------------------------------------*
*& Creating Sales Report
*
*&------------------------------------------*
c. Xác định kiểu dữ liệu:
Khi chương trình được thực thi, nó thực hiện các thao tác logical trên dữ liệu cục bộ
trong chương trình. Dữ liệu là các trường trong bộ nhớ (working memory). Một trường
là một chuỗi các byte.

Trường trong bộ nhớ lưu dữ liệu của chương trình trong quá trình thực thi gọi là đối
tượng dữ liệu (data object). Các trường trong bộ nhớ này được gán cho chương trình khi
nó thực thi và được giải phóng khi thực thi xong. Trường trong bộ nhớ đã giải phóng có
thể được gán cho chương trình khác.


Hai loại đối tượng dữ liệu:
+ có thể thay đổi (modifiable)
+ không thể thay đổi (nonmodifiable)
Bạn có thể thay đổi giá trị được lưu trong đối tượng dữ liệu modifiable trong quá trình
thực thi. Đối tượng modifiable bao gồm biến (variable), field string, internal table.
Giá trị của đối tượng dữ liệu nonmodifiable duy trì hông đổi trong quá trình thực thi.
Bạn có thể xác định giá trị của nó khi định nghĩa. Đối tượng nonmodifiable bao gồm
chữ (literal) và hằng (constant).
Loại dữ liệu mà ABAP hỗ trợ:
+ character
+ date
+ hexadecimal
+ numeric
+ time
Kích cỡ của đối tượng như character, numeric hoặc hexadecimal là giữa 1 và 65,535 ký

tự. Tuy nhiên kích cỡ loại dữ liệu date là 8 ký tự hoặc time là 6 ký tự => kích cở của các
kiểu dữ liệu này là cố định.
1. charater: các giá trị alphanumeric
2. hexadecimal: A-F và 0-9
3. numeric: 0-9
d. Định nghĩa biến và literal:
Có nhiều vùng và nhiều khối trong chương trình. Bạn có thể chỉ định các câu lệnh trong
vùng xác định dựa vào loại công việc mà câu lệnh thực hiện.
Có 4 vùng:
+ data declaration
+ initialization
+ start-of-seclection
+ end-of-selection


Ba câu lệnh được sử dụng để định nghĩa biến:
+ data
+ parameters
+ select-options
Định nghĩa biến sử dụng câu lệnh data, chỉ định tên, kích cỡ và kiểu dữ liệu của biến.
Ví dụ:
data username(15) type c. <= character
data reports(5) type n. <= numeric
Định nghĩa biến sử dụng câu lệnh parameters.
parameters variable name(size) type data type
parameters age(3) type n.
Ví dụ:
Sau khi định nghĩa biến user, cần khởi tạo giá trị trong quá trình thực thi.
parameters user(12) type c.
Để định nghĩa biến bằng câu lệnh select-options, bạn phải chỉ định tên và tiêu đề của

selection screen nơi người dùng khởi tạo dãy giá trị cho biến.
select-options title for variable name.
Ví dụ:
select-options Number for serial. <= định nghĩa biến serial với tên selection screen là
Number.
Khi muốn giá trị của đối tượng dữ liệiu không thay đổi, hãy định nghĩa literal => sử
dụng để hiển thị kết xuất.
Để định nghĩa literal, sử dụng '. Ví dụ: bạn đã định nghĩa chuỗi literal "Samantha" khi
gõ 'Samantha".
Sử dụng câu lệnh write để hiển thị kết xuất. Ví dụ:
write / 'literal'.
Giả sử bạn muốn hiển thị thông điệp "This is a literal". Bạn có thể sử dụng câu lệnh
write để định nghĩa thông điệp như một literal và hiển thị nó.


Bạn có thể sử dụng đối tượng dữ liệu loại I như biến, field string và internal table để lưu
các giá trị trong chương trình.
2. Thực hiện các thao tác:
a. Phép gán:
Cây lệnh gán cho phép bạn thao tác giá trị của biến, field string và internal table:
+ clear
+ move
Sử dụng câu lệnh clear để thiết lập lại giá trị cho một biến.
clear variable name.
Ví dụ:
clear counter.
=> dùng câu lệnh clear để thiết lập lại giá trị mặc định của biến counter chứa giá trị 102,
sau khi code được thực thi, giá trị của counter sẽ thay đổi là 0.
Sử dụng câu lệnh move để gán giá trị của một biến cho một biến khác.
move a to b.

Ví dụ: giá trị của biến a là 10, giá trị biến b là 33. Bạn có thể sử dụng statement move để
gán giá trị a cho b.
move a to b. => giá trị của b thay đổi từ 33 thành 10.
b. Phép tính:
Statement được sử dụng để thực hiện phép tính chứa hai thành phần:
+ operands
+ operators


Các statement được sử dụng để thực hiện phép tính:
+ add
+ divide
+ multiply
+ subtract
+ compute
Phép cộng:
add variable1 to variable2.
Ví dụ:
Giả sử giá trị của biến product là 20, giá trị của biến stock là 46. Bạn muốn cộng giá
trị của cả hai biến và lưu tổng vào biến stock. Sử dụng:
add product to stock. <= stock = stock + product
divide effort by hours. <= effort = effort / hours
multiply variable1 by variable2. <= variable1 = variable1 * variable2
subtract variable1 from variable2. <= variable2 = variable1 - variable2
Bạn có thể sử dụng câu lệnh compute để thực hiện các phép tính toán học. Không giống
add, substract, divide và multiply, compute là câu lệnh đa năng cho phép bạn thực thi
nhiều câu câu lệnh tính toán. Hơn nữa nó cho phép bạn lưu kết quả của biểu thức trong
một biến khác.
Ví dụ:
Tính tổng của b và c và lưu kết quả vào biến a

compute a = b + c.
3. Các câu lệnh điều kiện, vòng lặp, điều khiển:
a. Sử dụng các câu lệnh điều kiện
Khi tạo chương trình ABAP, bạn cần điều khiển luồng chương trình để được kết xuất
như mong muốn.
Ví dụ: bạn muốn kiểm tra kết quả của biểu thức logical, và hiển thị kết xuất ra màn hình
dựa vào kết quả.
Các loại câu lệnh được sử dụng phổ biến để điều khiển luồng chương trình là:
+ conditional
+ control


+ looping
Câu lệnh if được sử dụng phổ biến nhất. Câu lệnh bắt đầu với từ khóa if và kết thúc với
từ khóa endif. Mệnh đề elseif và else được sử dụng để kiểm tra giá trị của expression1
và expression2. Nếu biểu thức là đúng, câu lệnh ABAP tương ứng được thực thi.
if expression1.
statements.
[elseif expression2.
statements.]
[else.
statements.]
endif.
Ví dụ:
if a = 0.
write / 'The value of a is equal to zero!'.
elseif a = 1.
write / 'The value of a is equal to one!'.
else.
write / 'The value of a is equal to one!'.

endif.
Ngoài câu lệnh if, bạn có thể sử dụng câu lệnh case để thực thi các câu lệnh dựa vào giá
trị của một biến. Sử dụng khi muốn thực hiện hơn 3 hành động.
case variable.
when value1.
statements.
when value2.
statements.
endcase.
Ví dụ:
data counter type n value 2.
case counter.
when 1.
write / 'The value of counter is one.'.
when 2.
write / 'The value of counter is two.'.


when 3.
write / 'The value of counter is three.'.
endcase.
b. Vòng lặp:
Vòng lặp cho phép bạn thực thi nhiều câu lệnh nhiều lần mà hông cần viết lại câu lệnh
mỗi lần bạn muốn thực thi chúng. Câu lệnh lặp phổ biến là do và while. Câu lệnh do là
câu lệnh lặp không điều kiện. Nó thực thi một khối chương trình một số lần mà bạn chỉ
định.
Câu lệnh while là câu lệnh lặp có điều kiện. Nó thực thi khối chương trình nếu biểu thức
logical đúng.
do n times.
statements.

enddo.
Ví dụ:
data num type n value 1.
do 15 times.
write / n.
n = n + 1.
enddo.
while logical expression.
statements.
endwhile.
Ví dụ:
while counter < 20.
counter = counter + 1.
endwhile.
Câu lệnh rẽ nhánh:
+ continue
+ exit
+ stop
data counter type n value 0.


do 3 times.
counter = counter + 1.
if counter = 2.
continue.
else.
write / 'The value of counter is: '.
write counter.
endif.
enddo.

=> câu lệnh write sẽ không được thực thi khi giá trị của counter là 2.
Sử dụng câu lệnh exit để thoát khỏi vòng lặp. Câu lệnh stop để thoát khỏi khối chương
trình và chuyển đến khối kế tiếp. Ví dụ: bạn chỉ định câu lệnh stop trong vùng "start of
selection". Khi đến stop, sự thực thi sẽ chuyển đến vùng "end of selection".
Tạo chương trình hiển thị danh sách các số từ 1 đến 20.
data counter type n value 0.
data out type n value 0.
data final type c value 'The final value of counter is 0'.
write / 'Here is the list of numbers:'.
do 20 times.
"begining of the loop
counter = counter + 1.
"incrementing the value
move counter to out.
"assign the updated value
write / out.
"display the updated value
enddo.
"end of the loop
Thay đổi code để đảm bảo giá trị 11 không được hiển thị trong danh sách. Bạn cần sử
dụng câu lệnh điều kiện để kiểm tra giá trị và sử dụng câu lệnh điều khiển để điều khiển
vòng lặp.
data counter type n value 0.
data out type n value 0.
data final type c value 'The final value of counter is 0'.
write / 'Here is the list of numbers:'.
do 20 times.
"begining of the loop
counter = counter + 1.
"incrementing the value



move counter to out.
if out = 11.
continue.
write / out.
enddo.

"assign the updated value

"display the updated value
"end of the loop

Thêm giá trị 13 không được hiển thị.
data counter type n value 0.
data out type n value 0.
data final type c value 'The final value of counter is 0'.
write / 'Here is the list of numbers:'.
do 20 times.
"begining of the loop
counter = counter + 1.
"incrementing the value
move counter to out.
"assign the updated value
if out = 11.
continue.
elseif out = 13.
continue.
write / out.
"display the updated value

enddo.
"end of the loop
II. Tạo chương trình report:
1. Internal table:
a. Định nghĩa internal table:
Chương trình report là chương trình để rút trích các dữ liệu mong muốn từ CSDL và
hiển thị dữ liệu theo định dạng cần thiết.
Khi bạn chạy một chương trình report, nó hiển thị hai loại màn hình: selection và
output.


Selection screen là màn hình đầu tiên để bạn cung cấp các tiêu chí chọn (selection
criteria). Dựa vào nó một danh sách được hiển thị trên màn hình thứ hai gọi là output
screen. List là report mà bạn tạo.

Chương trình report hông hiển thị trực tiếp dữ liệu được lưu trong table ra màn hình.
Đầu tiên nó lấy dữ liệu từ table đưa vào đối tượng có kiểu dữ liệu tạm gọi là internal
table.


Cấu trúc của internal table gồm hai phần:
+ body
+ header line

Định nghĩa internal table bằng câu lệnh data. Định nghĩa body bằng
internal_table_name occurs n, trong đó n là số record mặc định trong internal table.
data : begin of internal_table_name occurs n,
field1 (data type) (like database_table_name_dbfield1),
field2 (data type) (like database_table_name_dbfield2),
end of internal_table_name.

Hoặc định nghĩa internal table bằng cách sao chép các trường của cấu trúc trong ABAP
Data Dictionary (DDIC).
data : internal_table_name like copied_internal_table_name occurs n.
b. Lấy dữ liệu đưa vào internal table:
Để lấy dữ liệu từ table vào internal table, bạn có thể sử dụng:
+ câu lệnh select
+ câu lệnh select...endselect và append.


Khi sử dụng câu lệnh select bạn cần xác định tên các trường mà dữ liệu bạn muốn lấy từ
table. Hơn nữa bạn có thể sử dụng mệnh đề into để xác định tên internal table và mệnh
đề from để chỉ định tên table.
select database_table_name-field1
database_table_name-field2
into table internal_table_name
form database_table_name.
Ví dụ:
selection materials-material_number
materials-procurement_date
materials_type
into table itab_materials from materials.
Khi sử dụng câu lệnh select...endselect và append, bạn đặt câu lệnh append bên trong
select...endselect.
select database_table_name-field1
database_table_name-field2
from database_table_name into header_line_name
*code modify the header line data comes here
append internal_table_name.
endselect.
c. Đọc dữ liệu trong internal table:

Sau khi lấy dữ liệu từ table đưa vào internal table, bạn có thể đọc dữ liệu từ internal
table để hiển thị ra màn hình kết xuất.
Đọc dữ liệu từ internal table bằng hai câu lệnh:
+ loop at
+ read
Hiển thị chi tiết các record nằm giữa 49 và 76.
loop at itab_customers from 50 to 75.
"code to display the data on the screen comes here
endloop.


Đọc chi tiết vendor có thuế lớn nhất:
read table itab_vendors index 1.
d. Sửa dữ liệu trong internal table:
Sau khi bạn lấy dữ liệu từ table đưa vào internal table, bạn có thể sửa dữ liệu đang tồn
tại trong internal table. Bạn có thể sửa header line và sử dụng câu lệnh modify để cập
nhật dòng chỉ định trong internal table.
modify internal_table_name index i.
Thêm tiền thưởng cho nhân viên:
loop at itab_workers.
"code to add 10% to the salary come here
modify itab_workers.
endloop.
Ngoài lệnh modify, bạn có thể sử dụng lệnh insert để thêm nội dung internal table. Tuy
nhiên, hông giống câu lệnh modify, câu lệnh insert sẽ chèn một dòng mới vào internal
table.
insert internal_table_name index i.
Giả sử một nhân viên mới vừa vào công ty bạn. Bạn cần thêm dòng vào internal table
"itab_employees".
"variable to store total records in the internal table

data : records(20) type n value 0.
loop at itab_employees.
"Calculating the total number of records in the table
records = records + 1.
endloop.
"Code to update the header line comes here
insert itab_workers index records.
e. Chương trình mẫu sử dụng internal table:
Định nghĩa internal table để chứa dữ liệu bảng PO và tính khối lượng tổng cộng của một
PO.
Report PO Journal


data : begin of itab_PO_header occurs 0,
PO_Number like PO-Number, "PO number
PO_Group like PO-Group, "Purchasing Group
PO_Amount like PO_Items-Amount, "Total PO amount
end of itab_PO_header.
Tạo internal table để lưu bảng PO_Items và tính khối lượng tổng cộng của một PO.
data : begin of itab_PO_items occurs 0,
PO_Number like PO_Items-Number,
PO_Amount like PO_Items-Amount,
end of itab_PO_items.
Sau khi định nghĩa internal table, bạn cần lấy dữ liệu từ table thích hợp và chèn vào
internal table tương ứng.
select PO-Number PO-Group
into table itab_PO_header from PO.
select PO_Items-Numer PO_Items-Amount
into table itab_PO_Items from PO_Items.
Tính khối lượng tổng cộng của một PO:

"variable to store total amount of a PO
data : total_amount(20) type n value 0.
loop at itab_PO_header.
total_amount = 0.
loop at itab_PO_items.
"if the PO numbers of both the tables don't match
if itab_PO_Items-PO_Number NE itab_PO_header-PO_Number.
continue. "continue with the internal loop
else.
total_amount = total_amount + itab_PO_items-PO_Amount.
endif.
endloop. "loop for the itab_PO_items table ends
Sau khi tính toán, cần lưu giá trị đã tính vào internal table ‘itab_POJounal_header’:
"assigning the total PO amount to the header line of itab_PO_header
itab_PO_header-PO_Amount = total_amount.


modify itab_PO_header.
endloop. "loop for the itab_PO_header table ends
Mã hoàn chỉnh:
Report PO Journal
data: begin of itab_PO_header occurs 0,
PO_Number like PO-Number, " PO number
PO_Group like PO-Group,
" Purchasing Group
PO_Amount like PO_Items-Amount , "Total PO amount
end of itab_PO_header .
data: begin of itab_PO_items occurs 0,
PO_Number like PO_Items-Number,
PO_Amount like PO_Items-Amount,

end of itab_PO_items .
select PO~Number PO~Group.
into itab_PO_header from PO.
select PO_Items~Number PO_Items~Amount.
into itab_PO_items from PO_Items.
" variable to store total amount of a PO
data : total_amount(20) type n value 0.
loop at itab_PO_header.
total_amount = 0.
loop at itab_PO_items.
"if the PO numbers of both the tables don't match
if itab_PO_items-PO_Number NE itab_PO_header-PO_Number.
continue. "continue with the internal loop
else.
total_amount = total_amount + itab_PO_items-PO_Amount.
endif.
endloop. "loop for the itab_PO_items table ends
"assigning the total PO amount to the header line of itab_PO_header


itab_PO_header-PO_Amount = total_amount .
"modifying itab_PO_header with the value of its header line
modify itab_PO_header .
endloop. "loop for the itab_PO_header table ends
Câu lệnh append và select...endselect để rút trích tất cả các dòng từ table, cập nhật dữ
liệu trong mỗi dòng được rút trích và sau đó insert vào internal table.
Lấy dữ liệu từ table vào internal table, sử dụng select hoặc select...endselect và append;
đọc dữ liệu từ internal table, sử dụng loop at...endloop và read table; cập nhật nội dung
internal table, sử dụng modify và insert.
2. Classical report:

a. Classical report:
Chương trình report cho phép bạn lấy dữ liệu từ table vào internal table, đọc dữ liệu từ
internal table, thay đổi dữ liệu trong internal table và hiển thị theo định dạng mong
muốn.
Có hai loại report:
+ classical report
+ interactive report
Cả classical và interactive report đều có cấu trúc modular. Để tạo modular, bạn có thể sử
dụng các thành phần khác gọi là khối xử lý (processing block). Mỗi thành phần chứa
một nhóm câu lệnh ABAP và được thực thi ở một thời điểm nhất định.
Có hai thành phần quan trọng của classical report là event block và subroutine. Trong
quá trình thực thi của classical report, event block được chạy bởi môi trường thực thi
trong khi subroutine được gọi từ chương trình report.
Môi trường thực thi tải và chạy một event block phụ thuộc vào sự kiện xảy ra. Sau khi
thực thi event block, điều khiển quay trở lại môi trường thực thi. Phụ thuộc vào sự kiện
kế tiếp xảy ra, môi trường thực thi sẽ thực thi event block tương ứng. Trong quá trình
thực thi event block, khi câu lệnh thực thi subroutine được thấy, điều khiển được chuyển
từ event block cho subroutine. Sau khi thực thi các câu lệnh trong subroutine, điều khiển
quay trở lại cho người gọi event block.


b. Các sự kiện trong classical report:
Sáu sự kiện trong classical report:

Không bắt buộc viết câu lệnh trong event block. Nếu bạn không sử dụng event block,
môi trường thực thi ABAP sẽ đặt tất cả câu lệnh ABAP trong event block mặc định:
start-of-selection. Trong trường hợp này, câu lệnh sẽ được thực thi tuần tự.
Nếu bạn sử dụng một vài hoặc tất cả event block trong chương trình report và đặt một
vài câu lệnh ABAP bên ngoài event block thì câu lệnh ABAP sẽ được thực thi như một
phần của event block ‘start-of-selection’.

Tuy nhiên, nếu các câu lệnh như định nghĩa biến không nằm trong event block thì các
câu lệnh này sẽ được thực thi khi chương trình được tải và không thuộc phạm vi startof-selection.
Giả sử bạn tạo một chương trình phát sinh ra danh sách hóa đơn. Để làm điều này bạn
cần viết câu lệnh lấy các record từ bảng "billings" bên trong event block thích hợp.
report BillingInfo.
tables: billing.
parameters : charge type N.


data : begin of itab_billing occurs 0,
document_number like billing-document_number,
party like billing-party.
top-of-page.
"report footer
write: / 'PAGE-NO', SY-PAGNO.
start-of-selection.
select document_number party from billing.
write: / itab_billing-document_number.
write: / itab_billing-party.
endselect.
end-of-page.
"report header
write: / 'Billling Information'.
=> câu lệnh select được thực thi khi event block ‘start-of-selection’ xảy ra.
Bạn sử dụng event block ‘end-of-page’ cho các câu lệnh tạo report footer, sau đó sử
dụng event block ‘end-of-selection’ cho câu lệnh cập nhật nội dung internal table. Sử
dụng event block ‘start-of-selection’ cho câu lệnh lấy dữ liệu từ table và sau đó sử dụng
event block ‘top-of-page’ cho câu lệnh tạo report header.
report Customer_Late_Payment_Charge.
data : begin of itab_customers occurs 0,

customer_name like customers-customer_name,
amount_due like customers-amount_due.
end-of-page.
"report footer
write: / 'PAGE-NO', SY-PAGNO.
end-of-selection.
loop at itab_customers.
itab_customers-amount_due = itab_customers-amount_due + (itab_customersamount_due*charge)/100.
modify itab_customers.
endloop.
start-of-selection.
select customer_code customer_name customer_amount_due


from customers.
top-of-page.
"report header
write: / 'CUSTOMER LATE PAYMENT CHARGE REPORT'.
c. Message trong classical report:
Trong quá trình thực thi chương trình, bạn có thể cần giao tiếp với người dùng cuối. Bạn
có thể sử dụng câu lệnh message trong chương trình report để làm điều này. Sử dụng
câu lệnh này cũng có thể điều khiển lỗi xảy ra.
message 'message_string' Type 'message_type'. => message_string là thông tin bạn
muốn giao tiếp với người dùng, message_type là loại thông tin.
Có sáu loại message:

Giả sử bạn cần hiển thị tài liệu mua bán dựa vào phạm vi ngày. Lấy dữ liệu từ table vào
internal table tốn nhiều thời gian vì phụ thuộc vào phạm vi ngày và số record được lấy
rất lớn. Do đó, bạn cần hiển thị message status trong khi tiến trình fetching đang thực
hiện.

selection document_number sale_person date amount
from into itab_sales from sales.
message 'Fetching data...' Type 'S'.
endselect.
Trong câu lệnh message, thay vì gõ message string mỗi lần, bạn có thể lưu message


string thường xuyên sử dụng trong message class với message ID duy nhất. Sau đó sử
dụng message ID trong câu lệnh message để hiển thị message string được yêu cầu.
message ID 'message_id' Type 'message_type'.
Bạn có thể tạo message class trên màn hình ‘Message maintenance: Inital Screen’. Để
mở màn hình này, bạn sử dụng transaction code ‘SE91’.
Giả sử bạn tạo message class với ID là "ZProcessing" và lưu nó trong package "Z001".
Để tạo nó gõ Zprocessing trong trường message class => Create => Save trên thanh
công cụ chuẩn => gõ Z001 trong text box ‘package’ => Save và sau đó Continue.
Giả sử bạn cần tạo message "Processing. Please wait..." để hiển thị mỗi khi xử lý dữ liệu
lâu. Bạn muốn thêm message này vào message class "ZProcessing". Để làm điều này,
nhấn Change, gõ "ZProgressing. Pease wait..." trong trường Message short text của
dòng đầu tiên với message ID 000 trên tab Messages và nhấn Save.

Để hiển thị message trước khi thoát chương trình, bạn sử dụng kiểu message là "A".
message 'Wrong Password.' Type 'A'.
Classical report là loại report đơn giản nhất để lấy dữ liệu từ table, xử lý và sau đó hiển
thị. Bạn có thể điều khiển luồng bằng cách sử dụng processing block như event block
hoặc subroutine.
Các sự kiện quan trọng trong classical report là initlization, at selection-screen, top-ofpage, start-of-selection, end-of-page và end-of-page. Bạn có thể làm cho classical report
trả lời các sự kiện này bằng cách viết các câu lệnh bên trong event block thích hợp.


Ngoài processing block, bạn cũng có thể sử dụng message để điều khiển luồng thực thi

của chương trình. Sử dụng câu lệnh message bạn có thể giao tiếp với người dùng trong
quá trình thực thi chương trình. Phụ thuộc vào tình huống, bạn có thể sử dụng các loại
message khác nhau như: A, E, I, S, W và X. Bạn có thể định nghĩa message riêng của
bạn để sử dụng thường xuyên, và nhóm chúng vào message class.
3. Interactive report:
a. Interactive report:
Kết xuất của interactive report chứa hai loại list: basic list và secondary list.

Interactive report cho phép bạn giao tiếp nhiều cách:
+ chọn dòng trong basic list
+ sử dụng menu
+ sử dụng nút nhấn


Bạn có thể gọi giao dịch và report khác dựa vào giao tiếp của người dùng.
Dựa vào loại giao tiếp với basic list, sự kiện tương ứng được rút trích. Có 3 loại sự kiện:
+ at line-selection
+ at pf<nn>
+ at user-command
Giả sử bạn tạo danh sách các dụng cụ IT của công ty bạn sử dụng internal table
"itab_ITAsset" và bảng "IT_Asset". Nhấp đối một dòng trong danh sách cơ bản, một
danh sách thứ hai sẽ hiển thị thông tin chỉ định của dụng cụ IT tương ứng. Bạn cần viết
một câu lệnh để tạo danh sách thứ hai trong event block thích hợp.
start-of-selection.
"Basic List
select asset_number acquired_date asset_value
into itab_ITAsset from IT_Asset.
write: / itab_ITAsset-asset_number.
write: / itab_ITAsset-acquired_date.
write: / itab_ITAsset-asset_value.

endselect.
at line-selection.
"code to create the secondary list comes here.
Giả sử bạn có danh sách cơ bản hiển thị danh sách khách hàng của công ty bạn và các
sản phẩm họ mua. Khi người dùng chọn một dòng trong danh sách cơ bản và nhấn F1,
danh sách thứ hai thể hiện chi tiết khách hành tương ứng với dòng được chọn. Khi
người dùng nhấn Shift+F12, danh sách thứ hai hiển thị chi tiết sản phẩm.
start-of-selection.
"create the basic list here.
at pf1.
"create the secondary list displaying customer details here.
at pf24.
"create the secondary list displaying product details here.
Khi người dùng chọn 1 dòng và nhấn Enter, danh sách chi tiết vendor sẽ xuất hiện. Giả


sử bạn gán function code "20" cho phím Enter.
start-of-selection.
"Basic list
select vendor_code name amount_outstanding
into itab_vendors from vendors.
write: / itab_vendors-vendor_code.
write: / itab_vendors-name.
write: / itab_vendors-amount_outstanding.
endselect.
at user_command.
if sy-ucomm=20.
"system variable sy-ucomm stores function code of the key pressed
"code to create the secondary list comes here
endif.

Giả sử bạn tạo một danh sách hiển thị tài khoản từ internal table "itab_billing" và table
"billing". Khi bạn nhấp đôi một dòng trong danh sách cơ bản, bạn cần hiển thị một danh
sách thứ hai hiển thị thông tin chi tiết của khách hàng. Khi người dùng chọn một dòng
và nhấn F2, một danh sách thứ hai hiển thị thông tin chi tiết của billing sẽ xuất hiện.
start-of-selection.
"Basic list
select * into itab_billing from billing.
"code to create the basic list comes here
endselect.
at line-selection.
"create a secondary list displaying customer information here
at pf2.
"create the secondary list displaying billing document here.
b. Trao đổi dữ liệu trong interactive report:
Bạn tạo danh sách thứ hai dựa vào dòng hoặc trường của danh sách cơ bản mà người
dùng giao tiếp. Để cung cấp tên và giá trị của trường cho danh sách thứ hai, bạn cần


chuyển tên và giá trị từ danh sách cơ bản đến danh sách thứ hai trong suốt quá trình
thực thi report.

Bạn có thể chuyển dữ liệu từ danh sách cơ bản sang danh sách thứ hai bằng hai câu lệnh
phổ biến:
+ hide
+ get cursor
Câu lệnh hide lưu giá trị của biến h vào vùng Hide cho dòng kết xuất hiện hành trên
màn hình.
hide h.
Giả sử bạn tạo danh sách cơ bản chứa các dụng cụ IT trong công ty sử dụng internal
table "itab_ITAsset". Trong quá trình thực thi report, bạn muốn tất cả các giá trị của

trường asset_number được lưu trong vùng Hide. Khi người dùng nhấp đôi một dòng
trong danh sách cơ bản, bạn muốn sử dụng giá trị của trường asset_number và internal
table "itab_ITAllocation" để tạo danh sách thứ hai hiển thị thông tin chỉ định của dụng
cụ IT tương ứng.
"basic list
select assert_number acquired_date asset_value
into itab_ITAsset from IT_Asset.
write: / itab_ITAsset-asset_number.
hide itab_ITAsset-asset_number.
write: / itab_ITAsset-acquired_date.
write: / itab_ITAsset-asset_value.


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×