Professional Documents
Culture Documents
Enquiry PDF
Enquiry PDF
Enquiry PDF
I. Enquiry desktop
1
· Ý nghĩa một số trường chính :
+ ID : Tên Enquiry
+ File Name: Tên bảng cần lấy dữ liệu ra
+Predfined Selection: Điều kiện tìm kiếm cố định
+ Predefined Sort: Sắp xếp theo trường
+ Selection field : Danh sách các trường dung cho điều kiện lọc
+ Name: tên cột do bạn tự định nghĩa, có thể trùng với tên
trường
+ Headding: tiêu đề cho cột, Nếu trường này để trống thì hệ
thống lấy trường Name làm tiêu đề
+ operation: Tên trường hoặc các lệnh tính toán
+ Col: Dòng và cột thể hiện dữ liệu.
+ Attributes:Gồm các giá trị
· để trống: Dữ liệu hiển thị dạng lưới và theo từng trang ( có
thể xuất ra file excel )
· ALL DATA: Dữ liệu hiển thị theo dạng lưới và load luôn
toàn bộ dữ liệu( có thể xuất ra file excel )
· PAGE : dũ liệu hiển thị theo dạng trang ( không thể xuất
ra file excel )
+ Header: Dùng cho tiêu đề của vấn tin hoạc tiêu đề của cột.
Định dạng: @(cot,hang) text.
Ví dụ 1: Viết một vấn tin hiển thị các thông tin sau: Mã khách hàng, tên
khách hàng, địa chỉ, Thông tin hiển thị dưới dạng lưới.
2
LG:
LG:
3
Ví dụ 3: Tương tự ví dụ 1 nhưng hiển thị dữ liệu dưới dạng sau:
LG:
4
5
6
Kết quả hiển thị :
7
4. Liên kết (DrillDown)
Dữ liệu của một vấn tin có thể được sử dụng như đièu kiện lọc
cho vấn tin khác. Bằng cách click đúp vào trường được chọn, bạn có
thể gọi được vấn tin con liên kết với vấn tin đó thông qua trường liên
kết.
Cài đặt:
Ví dụ 5: Tạo một vấn tin hiển thị các thông tin sau: số tài khoản,mã khách
hàng,số dư working.balance sao cho khi click đúp vào mã khách hàng thì hệ
thống gọi vấn tin ở ví dụ 1.
8
LG:
9
10
5. Ngắt trang, nhóm và Tính toán
- Ngắt trang: Vấn tin có thể ngắt trang với mỗi lần giá trị của trường
thay đổi ( ví dụ mỗi khi đồng ngoại tệ thay đổi )
Để có thể ngắt trang thì ta cần định nghĩa các trường sau:
+ Trường dữ liệu sẽ ngắt tại đó ( cần phải được sắp xếp ). Ví dụ
CURRENCY
+ Trường ngắt trang liên kết với trường dữ liệu B C
CURRENCY
+ Trường hiển thị giá trị ngắt
- Tính toán : Enquiry cho phép sử dụng hàm sau trong trường
operation
· CALC X + ( -,*,/,: ) Y : trả về kết quả cộng ( trừ, nhân, chia,
nối ) X với
Y. Với X và Y là tên trường do người dùng định nghĩa.
· IF X EQ ( NE,LE,GT,…) Y A B: Nếu thỏa mãn điều kiện X
bằng Y (hoặc khác hoặc lớn hơn…) thì trả về A, ngược lại thì trả
về B.
- Nhóm: Để nhóm một trường ta dùng cấu trúc B C XXX (với XXX
là tên trường ) trong trường operation . Ví dụ nhóm tất cảc các
trường có cùng currency trong bảng Account : B C CURRENCY
- Tính tổng: Để tính tổng trước hết ta cần nhóm các trường cần tính
tổng vào một nhóm sau đó dùng cấu trúc TOTAL XXX ( với XXX
là trường cần tính tổng )
11
Ví dụ 6: Viết một vấn tin thể hiện các thông tin sau: số tài khoản,
working.balance,loại ngoại tệ. Sau đó tính tổng của từng loại ngoại tệ một.
LG:
12
II. Enquiry Routine
LG: Các thông tin yêu cầu nằm trong bảng ACCOUNT.
Viết Routine gắn vào cột Type vói nội dung như sau:
SUBROUTINE AC.RTN.TYPE
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_ENQUIRY.COMMON
$INSERT I_F.ACCOUNT
Y.CATE=R.RECORD<AC.CATEGORY>
BEGIN CASE
CASE Y.CATE EQ 1001
O.DATA='TAI KHOAN THANH TOAN'
CASE Y.CATE EQ 6001
O.DATA='TAI KHOAN TIET KIEM'
14
CASE 1
O.DATA='TAI KHOAN KHAC'
END CASE
RETURN
END
Ví dụ 8: Viết một vấn tin lấy ra các thông tin sau: Số tài khoản, tên khách
hàng, loaij tiền tệ, số tiền Working Balance,số tiền chuyên đổi nếu là ngoại tệ
15
( với nhứng tài khoản ngoại tệ thì chuyển đổi về số tiền nội tệ sau đó hiển thị
ra, với đồng nội tệ thì giữ nguyên )
LG:
Phân tích: Bảng ACCOUNT có trường CURRENCY thể hiện loại tiền tệ. Từ
đó có thể xác đinh được đó là nội tệ hay ngoại tệ. Nếu là ngoại tệ thì link đến
bảng CURRENCY để lấy ra tỉ giá.
SUBROUTINE AC.RTN.BALANCE
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_ENQUIRY.COMMON
$INSERT I_F.ACCOUNT
$INSERT I_F.CURRENCY
FN.CCY='F.CURRENCY'
F.CCY=''
CALL OPF(FN.CCY,F.CCY)
Y.CCY=R.RECORD<AC.CURRENCY>
IF Y.CCY NE 'VND' THEN
CALL F.READ(FN.CCY,Y.CCY,R.CCY,F.CCY,ERR.CCY)
Y.MID.RATE=R.CCY<EB.CUR.MID.REVAL.RATE,1>
O.DATA=R.RECORD<AC.WORKING.BALANCE>*Y.MID.RATE
END
RETURN
END
Thiết kế ENQ
16
2. BUILD ROUTINE
17
( Bảng điều kiện tìm kiếm)
- ROUTINE phải có một tham số truyền vào là ENQ.DATA, đây là
một mảng động được khai báo trong I_ENQUIRY.COMMON. Các
giá trị của biến này có ý nghĩa như sau:
ENQ.DATA<1,i> : Tên của Enq
ENQ.DATA<2,i> : Trường được lựa chọn để tìm kiếm
ENQ.DATA<3,i> : Toán tử tìm kiếm
ENQ.DATA<4,i> : giá trị tìm kiếm
(i=1,2,3… tương ứng với thứ tự hàng trong bảng điều kiện )
- Như vậy, khi điều kiện tìm kiếm được người dùng nhập vào và phát
lênh thực hiện thì các giá trị nhập vào đó sẽ được truyền vào mảng
ENQ.DATA. Trong ROUTINE ta sẽ thực hiện lệnh gán điều kiện
động vào tiếp sau hàng các điều kiện tĩnh.
- ROUTINE được gắn vào trường 12.1
Ví dụ 9: Tạo một vấn tin hiển thị thông tin số tài khoản, category và số dư
thực tương ứng , sau khi người sử dụng nhập category vào
Với category 1001- Lọc các tài khoản có số dư lớn hơn 0 và nhỏ hơn 100
triệu
Với category 6001 – Lọc các tài khoản có số dư lớn hơn 200 triệu
18
Với các category khác- Lọc lấy các tài khoản có số dư nhỏ hơn 0
LG:
Viết và biên dịch ROUTINE sau:
SUBROUTINE AC.RTN.BUILD.1(ENQ.DATA)
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_ENQUIRY.COMMON
Y.FIELDS.COUNT = DCOUNT(ENQ.DATA<2>,VM) +1
ENQ.DATA<2,Y.FIELDS.COUNT> = "WORKING.BALANCE"
BEGIN CASE
CASE Y.CATEGORY = 1001
ENQ.DATA<3,Y.FIELDS.COUNT> = "RG"
ENQ.DATA<4,Y.FIELDS.COUNT> = "0 100000000"
CASE 1
ENQ.DATA<3,Y.FIELDS.COUNT> = "LE"
ENQ.DATA<4,Y.FIELDS.COUNT> = "0"
END CASE
RETURN
END
Thiết kế ENQ:
19
20
III. Enquiry nofile
- Sử dụng NOFILE để tạo vấn tin phức tạp yêu cầu phải lấy dữ liệu từ
nhiều bảng mà có thể không có các trường liên kết với nhau.
- Tất cả dữ liệu cần hiển thị đều lấy ra từ ROUTINES
21
ID của bản ghi phải có dạng NOFILE.XXXXX
Sử dụng các trường sau:
15 - Usr Field Name :Tên trường ROUTINE hoặc trường lựa
chọn.
16- Usr Type: R – nếu là ROUTINE, S – nếu là trường chọn
trong hộp điều kiện
17- Usr Field No: Tên của ROUTINE nếu là trường loại R, để
trống nếu là trường loại S.
20- Usr Display Fmt: Định dạng dữ liệu hiển thị
24- Usr Single Mult: S- trường single value, M- trường Multi
value
Ví dụ:
- Thiết kế ENQUIRY
+ Trường File Name: Tên đăng ký trong
STANDAR.SELECTION
+ Predfined Selection: Tên trường ROUTINE trong
STANDAR.SELECTION ( trường 15.1 )
+ Selection field: Các trường cần lọc dữ liệu ( các trương
15.1,15.2,… trong STANDAR.SELECTION)
+ Operation: 0
+ Conversion: có dạng F limitStr,colNum,numCol
limitStr: ký tự phân cách giữa các trường (thường là #,*,…)
colNum:phần tử thứ colNum
22
numCol: lấy numCol phần tử tính từ phần tử colNum( thường
là 1)
Ví dụ 10: Viết một vấn tin lấy ra tất cả giao dịch của một tài khoản trong
ngày hôm nay và ngày hôm qua, Các thông tin đưa ra bao gồm: Số tài khoản,
số giao dịch, số tiền, ngày hạch toán. Biết các thông tin sau:
Các giao dịch của ngày hôm nay được lưu trong bảng ACCT.ENT.TODAY,
còn các giao dịch của ngày hôm qua được lưu trong bảng
ACCT.ENT.LWORK.DAY
LG:
Viết ROUTINE:
SUBROUTINE AC.RTN.NOFILE.1(Y.DATA)
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_ENQUIRY.COMMON
$INSERT I_F.STMT.ENTRY
FN.ACCT.TODAY='F.ACCT.ENT.TODAY'
F.ACCT.TODAY=''
CALL OPF(FN.ACCT.TODAY,F.ACCT.TODAY)
FN.ACCT.LAST='F.ACCT.ENT.LWORK.DAY'
F.ACCT.LAST=''
CALL OPF(FN.ACCT.LAST,F.ACCT.LAST)
FN.STMT='F.STMT.ENTRY'
F.STMT=''
CALL OPF(FN.STMT,F.STMT)
Y.ACCT.ID=''
LOCATE "ACCOUNT" IN D.FIELDS SETTING CUS.POS THEN
Y.ACCT.ID = D.RANGE.AND.VALUE<CUS.POS>
END
23
CALL
F.READ(FN.ACCT.TODAY,Y.ACCT.ID,R.ACCT.TODAY,F.ACCT.TOD
AY,ERR.TODAY)
LOOP
REMOVE Y.STMT.ID FROM R.ACCT.TODAY SETTING POS1
WHILE Y.STMT.ID:POS1
GOSUB LOAD.DATA
REPEAT
CALL
F.READ(FN.ACCT.LAST,Y.ACCT.ID,R.ACCT.LAST,F.ACCT.LAST,ER
R.LAST)
LOOP
REMOVE Y.STMT.ID FROM R.ACCT.LAST SETTING POS2
WHILE Y.STMT.ID:POS2
GOSUB LOAD.DATA
REPEAT
RETURN
LOAD.DATA:
CALL F.READ(FN.STMT,Y.STMT.ID,R.STMT,F.STMT,ERR.STMT)
Y.AC=R.STMT<AC.STE.ACCOUNT.NUMBER>
Y.TRAN.REF=R.STMT<AC.STE.OUR.REFERENCE>
Y.AMT=R.STMT<AC.STE.AMOUNT.LCY>
Y.DATE=R.STMT<AC.STE.BOOKING.DATE>
Y.DATA<-1>=Y.AC:'#':Y.TRAN.REF:'#':Y.AMT:'#':Y.DATE
RETURN
END
24
Thiết kế trong ENQUIRY:
25
26