You are on page 1of 13

Tạo truy vấn NOFILE

(Nofile Enquiry)

© 2006, FIBI Software

Nội dung

Š Tìm hiểu nhu cầu cần có truy vấn NOFILE


Š Các bước tạo truy vấn NOFILE
Š Truy vấn NOFILE – Ví dụ
Š Phân tích ví dụ
Š Giải thuật của chương trình (routine)
Š Viết chương trình
Š Thiết lập bản ghi STANDARD SELECTION
Š Tạo truy vấn bằng ứng dụng ENQUIRY
Š Thực hiện truy vấn

Giáo trình T24 - Tạo truy vấn NOFILE 2 03/08/2007 Banking Solutions

1
Yêu cầu bắt buộc (Prerequisites)

Š Có hiểu biết về hoạt động của ứng dụng ENQUIRY


Š Kỹ năng lập trình bằng Info BASIC

Giáo trình T24 - Tạo truy vấn NOFILE 3 03/08/2007 Banking Solutions

Vì sao dùng truy vấn NOFILE?

Š Khi thông tin đòi hỏi từ nhiều ứng dụng T24 (không thể được liên
kết qua ứng dụng ENQUIRY)
Š Khi có những tính toán và điều phức tạp, liên quan đến nhiều ứng
dụng trong T24

Không có mối liên hệ giữa các bảng - không thể được liên kết trong ENQUIRY
Việc tính toán phức tạp không được hỗ trợ bởi ứng dụng ENQUIRY

File 1 File 2 File 3 File 4

Routine

Giáo trình T24 - Tạo truy vấn NOFILE 4 03/08/2007 Banking Solutions

2
Cách thiết lập trong ứng dụng ENQUIRY

ENQUIRY: trường FILE.NAME - Bắt buộc

Trường hợp này – Đòi hỏi nhiều hơn một ứng dụng

Sử dụng tên tập tin luận lí

Định nghĩa trong STANDARD.SELECTION

Không FILE.CONTROL – Bị lỗi khi kiểm định trong SS


Bắt đầu STANDARD.SELECTION ID với NOFILE
(Hệ thống không kiểm tra bản ghi FILE.CONTROL)

Sử dụng trong trường FILE.NAME của ENQUIRY

Giáo trình T24 - Tạo truy vấn NOFILE 5 03/08/2007 Banking Solutions

Cách thiết lập trong ứng dụng ENQUIRY (tt.)

Bản ghi STANDARD.SELECTION đòi hỏi định nghĩa trường

Tạo trường ảo (luận lý)

Làm thế nào để lấy dữ liệu?

Viết chương trình con và gắn vào trường ảo

Người dùng cần các trường để lựa chọn điều kiện?

Định nghĩa trường loại “S” (Selection)

Giáo trình T24 - Tạo truy vấn NOFILE 6 03/08/2007 Banking Solutions

3
Thiết lập một truy vấn NOFILE

Các thành phần của một truy vấn NOFILE


Š Chương trình con (routine ) Info BASIC
Š Bản ghi STANDARD.SELECTION
Š Bản ghi ENQUIRY

Giáo trình T24 - Tạo truy vấn NOFILE 7 03/08/2007 Banking Solutions

Ví dụ truy vấn NOFILE

Ngân hàng yêu cầu một báo cáo có như dạng sau:
Báo cáo Khách hàng
Ngày : <Ngày hiện tại> Người tạo : <Mã số của người tao báo cáo>
Số Khách hàng: <Mã Khách hàng>
Số tài khoản Doanh số Có Doanh số Nợ Lãi Có Lãi
Nợ
XXXXXX XXXXXX XXXXXX XXXXXX
XXXXXX
XXXXXX XXXXXX XXXXXX XXXXXX
XXXXXX
XXXXXX XXXXXX XXXXXX XXXXXX
XXXXXX

Một khách hàng, tại một thời điểm bất kì, muốn biết số tổng của:
Š Doanh số Có ghi trước (Tiền trả cho khách hàng vào một ngày trong
tương lai)
Š Doanh số Nợ ghi trước (Tiền khách hàng phải trả vào một ngày trong
tương lai)
Š Số lãi cộng dồn trả cho khách hàng
Š Số lãi cộng dồn khách hàng phải trả

Giáo trình T24 - Tạo truy vấn NOFILE 8 03/08/2007 Banking Solutions

4
Các bảng liên quan

Š CUSTOMER.ACCOUNT – Chứa danh sách tài khoản của một


khách hàng cụ thể
Š ACCT.ENT.FWD – Chứa các bút toán ghi trước (forward
STMT.ENTRY) của tài khoản khách hàng
Š STMT.ENTRY – Chi tiết bút toán
Š ACCR.ACCT.CR – Lãi cộng dồn phải trả
Š ACCR.ACCT.DR - Lãi cộng dồn phải thu

Giáo trình T24 - Tạo truy vấn NOFILE 9 03/08/2007 Banking Solutions

Giải pháp 1 – Thuật toán

Với mã KH được nhập vào, đọc thông tin từ CUSTOMER.ACCOUNT

AC1FMAC2FMAC3FMAC4

Đọc ACCT.ENT.FWD theo mã tài khoản (Account ID)

Xử lí ID kế tiếp FST1FMFST2FMFST3

Đọc STMT.ENTRY theo số bút toán (STMT.ENTRY ID)

AcIdFMCoCodeFMLCYAmtFMTranCodeFMCusIDFM……………….

Lấy số tiền bản tệ và kiểm tra nếu > 0


Nếu > 0 thì Doanh số Cr += Doanh số Cr không thì
Doanh số Dr += Doanh số Dr Tất cả bút toán
F STMT đã
được xử lí

Giáo trình T24 - Tạo truy vấn NOFILE 10 03/08/2007 Banking Solutions

5
Giải pháp 1 – Thuật toán

Đọc bảng ACCR.ACCT.CR với Account ID

CrIntDateFMCrNoOfDaysFMCrIntRateFMCrIntAmtFMCrIntCategFM…..TotalInterest

Tổng lãi Cr += Tổng lãi

Đọc bảng ACCR.ACCT.DR với Account ID

PrFstDateFMPrLstDtFMDrIntDateFMDrNoOfDaysFM..TotalInterest

Tổng lãi Dr += Tổng lãi


Tiếp tục với
tài khoản kế
Quan tâm đến các giá trị trong tham số trả về: Account tiếp
ID,Tot Fwd Dr,Tot Fwd Cr,Total Dr Int,Tot Cr Int

Giáo trình T24 - Tạo truy vấn NOFILE 11 03/08/2007 Banking Solutions

Routine cho truy vấn NOFILE

SUBROUTINE E.NOF.CUS.AC.DET(AC.DET.ARR)

$INCLUDE GLOBUS.BP I_COMMON


$INCLUDE GLOBUS.BP I_EQUATE
$INCLUDE GLOBUS.BP I_F.ACCOUNT
$INCLUDE GLOBUS.BP I_F.CUSTOMER
$INCLUDE GLOBUS.BP I_F.CUSTOMER.ACCOUNT
$INCLUDE GLOBUS.BP I_F.STMT.ENTRY
$INCLUDE GLOBUS.BP I_F.ACCR.ACCT.CR
$INCLUDE GLOBUS.BP I_F.ACCR.ACCT.DR
$INCLUDE GLOBUS.BP I_ENQUIRY.COMMON

GOSUB INITIALISATION
GOSUB OPEN.FILES
GOSUB PROCESS

RETURN

Giáo trình T24 - Tạo truy vấn NOFILE 12 03/08/2007 Banking Solutions

6
Routine cho truy vấn NOFILE (tt.)

*--------------*
INITIALISATION:
*--------------*

FN.CUSTOMER.ACCOUNT = 'F.CUSTOMER.ACCOUNT'
F.CUSTOMER.ACCOUNT = ''

FN.ACCT.ENT.FWD = 'F.ACCT.ENT.FWD'
F.ACCT.ENT.FWD = ''

FN.STMT.ENTRY = 'F.STMT.ENTRY'
F.STMT.ENTRY = ''

FN.ACCR.ACCT.CR = 'F.ACCR.ACCT.CR'
F.ACCR.ACCT.CR = ''

FN.ACCR.ACCT.DR = 'F.ACCR.ACCT.DR'
F.ACCR.ACCT.DR = ''

RETURN

Giáo trình T24 - Tạo truy vấn NOFILE 13 03/08/2007 Banking Solutions

Routine cho truy vấn NOFILE (tt.)

*----------*
OPEN.FILES:
*----------*

CALL OPF(FN.CUSTOMER.ACCOUNT,F.CUSTOMER.ACCOUNT)
CALL OPF(FN.ACCT.ENT.FWD,F.ACCT.ENT.FWD)
CALL OPF(FN.ACCR.ACCT.CR,F.ACCR.ACCT.CR)
CALL OPF(FN.STMT.ENTRY,F.STMT.ENTRY)
CALL OPF(FN.ACCR.ACCT.DR,F.ACCR.ACCT.DR)

RETURN

*-------*
PROCESS:
*-------*

LOCATE "CUSTOMER.ID" IN D.FIELDS<1> SETTING CUS.POS THEN


CUSTOMER.ID = D.RANGE.AND.VALUE<CUS.POS>
END

CALL F.READ(FN.CUSTOMER.ACCOUNT,CUSTOMER.ID,CUS.ACC.REC,F.CUSTOMER.ACCOUNT,CUS.ACC.R.ERR)

Giáo trình T24 - Tạo truy vấn NOFILE 14 03/08/2007 Banking Solutions

7
Routine cho truy vấn NOFILE (tt.)

LOOP

REMOVE AC.ID FROM CUS.ACC.REC SETTING AC.POS

WHILE AC.ID:AC.POS

GOSUB CALC.ENT.FWD

GOSUB CALC.ACCR.INT

AC.DET.ARR<-1> = AC.ID:"*":CR.AMT:"*":DR.AMT:"*":CR.TOT.INT:"*":DR.TOT.INT

REPEAT

RETURN

Giáo trình T24 - Tạo truy vấn NOFILE 15 03/08/2007 Banking Solutions

Routine cho truy vấn NOFILE (tt.)

*------------*
CALC.ENT.FWD:
*------------*

DR.AMT = '' ; CR.AMT = ''


CALL F.READ(FN.ACCT.ENT.FWD,AC.ID,ACCT.ENT.REC,F.ACCT.ENT.FWD,ACCT.ENT.R.ERR)

LOOP
REMOVE ACCT.ENT.ID FROM ACCT.ENT.REC SETTING ACCT.ENT.POS
WHILE ACCT.ENT.ID:ACCT.ENT.POS

CALL F.READ(FN.STMT.ENTRY,ACCT.ENT.ID,STMT.ENTRY.REC,F.STMT.ENTRY,STMT.ENTRY.R.ERR)

ACCT.ENT.AMT = STMT.ENTRY.REC<AC.STE.AMOUNT.LCY>

IF ACCT.ENT.AMT LT 0 THEN
DR.AMT += ABS(ACCT.ENT.AMT)
END ELSE
CR.AMT += ACCT.ENT.AMT

END

Giáo trình T24 - Tạo truy vấn NOFILE 16 03/08/2007 Banking Solutions

8
Routine cho truy vấn NOFILE (tt.)

REPEAT

RETURN

*-------------*
CALC.ACCR.INT:
*-------------*

CR.TOT.INT = '' ; DR.TOT.INT = ''


CALL F.READ(FN.ACCR.ACCT.CR,AC.ID,AC.CR.REC,F.ACCR.ACCT.CR,ACCT.CR.R.ERR)

CR.TOT.INT = AC.CR.REC<IC.ACRCR.TOTAL.INTEREST>

CALL F.READ(FN.ACCR.ACCT.DR,AC.ID,AC.DR.REC,F.ACCR.ACCT.DR,ACCT.DR.R.ERR)

DR.TOT.INT = AC.DR.REC<IC.ACRDR.TOTAL.INTEREST>

RETURN

END

Giáo trình T24 - Tạo truy vấn NOFILE 17 03/08/2007 Banking Solutions

Bản ghi STANDARD SELECTION

Š ID phải có dạng NOFILE.xxxxx để ngăn lỗi kiểm tra


FILE.CONTROL
Š Phải có trường được định nghĩa loại ROUTINE
Š Trường loại SELECTION được dùng khi người dùng muốn tìm
kiếm các thông tin theo điều kiện nhập vào trong lúc chạy truy vấn

Giáo trình T24 - Tạo truy vấn NOFILE 18 03/08/2007 Banking Solutions

9
Bản ghi STANDARD SELECTION (tt.)

Routine Type

Selection Type

Giáo trình T24 - Tạo truy vấn NOFILE 19 03/08/2007 Banking Solutions

Cài đặt truy vấn với ENQUIRY

Must be a valid record from


STANDARD.SELECTION
Application. In this case, must
start with NOFILE.

Giáo trình T24 - Tạo truy vấn NOFILE 20 03/08/2007 Banking Solutions

10
Bản ghi ENQUIRY

Using this we can access each


line of information stored in the
return variable. The values
are separated by “*” and each
set is separated by an FM

This is the method used to extract


the values returned from the routine
The format is
F <delim>,<start pos>,<num of pos>

Giáo trình T24 - Tạo truy vấn NOFILE 21 03/08/2007 Banking Solutions

Thực hiện truy vấn

Trước khi kết quả truy vấn được hiển thị, do ta có định nghĩa trường lựa
chọn nên nó sẽ được hiển thị để nhập vào giá trị CUSTOMER ID

Giáo trình T24 - Tạo truy vấn NOFILE 22 03/08/2007 Banking Solutions

11
Kết quả

Giáo trình T24 - Tạo truy vấn NOFILE 23 03/08/2007 Banking Solutions

Tóm lại (1)

Š Truy vấn NOFILE dùng một chương trình để truy cập nhiều ứng
dụng và hiển thị các thông tin theo yêu cầu người dùng
Š Một bản ghi STANDARD.SELECTION phải được tạo với ID có
dạng NOFILE.xxxxxxx để hệ thống bỏ qua việc kiểm tra lỗi
FILE.CONTROL
Š Bản ghi STANDARD.SELECTION được tạo sẽ được sử dụng bởi
truy vấn NOFILE gồm có các trường ảo
– Loại Routine – Những trường này sẽ có dạng tự định nghĩa ‘R’
– Loại Selection – Những trường này sẽ có dạng tự định nghĩa ‘S’

Giáo trình T24 - Tạo truy vấn NOFILE 24 03/08/2007 Banking Solutions

12
Tóm lại (2)

Š Trường Selection sau khi được định nghĩa, có thể được truy cập
trong chương trình qua các biến COMMON như D.FIELDS và
D.RANGE.AND.VALUES đã được khai báo trong
I_ENQUIRY.COMMON

Š Một chương trình được viết cho truy vấn NOFILE phải trả về một
tham số

Š Ứng dụng ENQUIRY dùng ID của bản ghi STANDARD.


SELECTION vào trong trường FILE.NAME

Š F <kí hiệu ngắt>,<vị trí đầu>,<số phần tử> - được dùng để lấy số
liệu trả về từ chương trình cho ENQUIRY

Giáo trình T24 - Tạo truy vấn NOFILE 25 03/08/2007 Banking Solutions

Cám ơn và Câu hỏi?

Giáo trình T24 - Tạo truy vấn NOFILE 26 03/08/2007 Banking Solutions

13

You might also like