Hướng dẫn thực hành Foxpro
1. Lệnh Create
• Cú pháp: Create [đườngdẫn]<tên_tệp_dl>
• Tác dụng: dùng để tạo ra một tệp dữ liệu (.dbf) với một cấu trúc xác định.
• Giải thích các thành phần của lệnh
o [Đườngdẫn]: đường dẫn tới vị trí tệp dữ liệu sẽ lưu trữ trong ổ đĩa cứng.
Ví dụ D:\thuchanh\ tệp sẽ lưu ở thư mục thuchanh trong ổ đĩa D. Trong
trường hợp bỏ qua thành phần này tệp dữ liệu sẽ được lưu ở thư mục
hiện tại Foxpro đang làm việc (Có thể bấm vào menu File\Open để tìm thư
mục này
o <tên_tệp_dl>: tên của tệp dữ liệu mong muốn (phần mở rộng ngầm định
là .dbf)
• Chú ý:
o Nên để đường dẫn và tên tệp ngắn gọn, gợi nhớ, không nên chứa khoảng
cách (nếu có khoảng cách thì phải để trong hai dấu ngoặc kép) và kí tự đặc
biệt.
• Ví dụ:
Ta cần tạo một tệp QLHH.dbf (dùng để quản lý hàng hóa) với cấu trúc như sau:
Tên trường
Kiểu trường
Độ rộng
soct
mahh
makho
ngaylap
soluong
dongia
dvt
thue
thanhtien
C
C
C
D
N
N
C
N
N
10
10
10
8
10
8
10
8
10
Phần
phân
2
1
1
1
thập (Chú thích)
Số chứng từ
Mã hàng hóa
Mã kho nhập/xuất
Ngày lập ct
Số lượng
Đơn giá
Đơn vị tính
thue
Thành tiền
Tạo một thư mục thuchanhFoxpro trong ổ đĩa D: \ Sau đó thực hiện lệnh
CREATE d:\thuchanhFoxpro\QLHH
Khai báo cấu trúc cho tệp QLHH như hình sau đó chọn OK.
Hình : Khai báo cấu trúc cho tệp QLHH
Khi đấy Foxpro sẽ tạo ra một tệp QLHH.dbf nằm trong d:\thuchanhFoxpro. Bạn có thể
vào My Computer để kiểm tra lại
Hình : tệp QLHH.DBF đã được tạo
2. Lệnh USE
• Cú pháp: Use [đườngdẫn] [tên_tệp_dl]
• Tác dụng: Dùng để mở (bắt đầu sử dụng) hoặc đóng một tệp dữ liệu
• Giải thích các thành phần của lệnh
o [đườngdẫn] [tên_tệp_dl]: đường dẫn (nếu có) và tên tệp dữ liệu cần mở.
Nếu không có đường dẫn Foxpro sẽ tìm kiếm tên_tệp_dl ở thư mục hiện
thời. Nếu không có cả hai thành phần này, lệnh Uselà lệnh đóng tệp dữ
liệu đang mở
• Chú ý:
o Khi một tệp dữ liệu mới được mở bằng lệnh Use, tệp dữ liệu hiện thời
đang được mở sẽ bị đóng lại
o Tệp cuối cùng được mở bằng lệnh Use là tệp đang mở. Các lệnh làm việc
trên tệp dữ liệu như LIST, DISPLAY, REPLACE, SUM, TOTAL… sẽ đều được
thi hành trên tệp này.
• Ví dụ:
USE qlsv.dbf --Mở tệp qlsv.dbf ở thư mục hiện thời sẵn sàng làm
việc
……..
USE d:\thuchanhfoxpro\qlhh – Mở tệp qlhh.dbf tại
D:\thuchanhfoxpro .Tệp qlsv.dbf bên trên bị đóng. Tệp đang mở hiện
tại là qlhh.dbf
……
USE –Đóng tệp dữ liệu đang mở (qlhh.dbf)
3. Lệnh Append
• Cú pháp: Append
• Tác dụng: Dùng để thêm bản ghi, nhập dữ liệu vào tệp
• Chú ý:
o Khi mới khởi động Foxpro, việc nhập liệu, hiển thị thông tin về một giá trị
ngày được mặc định theo format của người Anh – Mỹ (mm/dd/yy). Để
tiện lợi với cách đọc các giá trị ngày theo format người Việt Nam bạn thực
hiện các lệnh sau (các lệnh này sẽ đưa định dạng khi nhập liệu với ngày là
dd/mm/yyyy )
SET DATE FRENCH
SET CENTURY ON
• Yêu cầu
o Nhập dữ liệu vào tệp QLBH.dbf với nội dung như sau: (Gỉa thiết 2 kí tự đầu
của trường soct chỉ loại phiếu. “PN” là phiếu nhập còn “PX” là phiếu xuất.
Kí tự thứ 3,4 của mahh chỉ loại hàng hóa, trường thue và thanhtien chưa
nhập hoặc để giá trị = 0)
soct
mahh
makho
PN001
HH010
1
HH020
2
HH020
1
HH010
1
HH010
1
HH020
2
HH010
2
HH020
2
HH020
1
HH010
2
HH020
2
HH020
1
HH020
2
HH020
3
KH01
soluong dongi dvt
a
12-12-2015
10
1000 KG
KH01
12-12-2016
10
1100 KG
0
0
KH01
13-12-2015
10
1100 KG
0
0
KH02
13-12-2015
20
1000 KG
0
0
KH01
01-01-2016
5
1100 KG
0
0
KH01
01-01-2016
4
110 KG
0
0
KH02
02-03-2016
1
10000 TAN
0
0
KH02
02-03-2016
1
10000 TAN
0
0
KH01
30-05-2016
1000
100 KG
0
0
KH01
01-06-2015
100
100 KG
0
0
KH02
02-08-2016
10
0
0
KH01
03-08-2016
10
0
0
KH02
01-07-2015
10
0
0
KH02
01-08-2016
10
0
0
PN001
PN002
PN003
PX001
PX001
PN004
PN005
PN006
PX002
PX003
PX003
PN007
PN008
ngaylap
1100
110 KG
1 TAN
100
thue
thanh
tien
0
0
4. Lệnh LIST/DISPLAY
• Cú pháp: LIST/DISPLAY [phạm vi] [Fields dstrường] [FOR btlogic] [TO PRINTER]
• Tác dụng: Dùng để hiển thị nội dung của các bản ghi trong tệp đang mở
• Giải thích các thành phần của lệnh
o [phạm vi]: miền liên tiếp bản ghi bị ảnh hưởng bởi lệnh có thể là
All: tất cả các bản ghi
Next <n> n bản ghi kế tiếp từ bản ghi hiện tại (n phải là số nguyên
dương, xem lại khái niệm bản ghi hiện tại tại lệnh GOTO/SKIP)
Record <n>: bản ghi số hiệu (thứ tự) n (n là số nguyên dương >0)
Rest: các bản ghi từ bản ghi hiện tại đến hết
Nếu không có thành phần này mặc định là Allvới List và Display có
For, bản ghi hiện thời với Display không có mệnh đề For
o [Fields ds trường]:
Bao gồm từ khóa Fields và một danh sách các trường ngăn cách bởi
dấu phẩy (,). Dùng để chỉ ra tập hợp các trường bị tác động bởi
lệnh
Nếu không có thành phần này thì tất cả các trường của tệp đều
chịu sự tác động của lệnh
o [FOR btlogic]:
Bao gồm từ khóa FOR + một biểu thức logic. Chỉ ra các bản ghi bị
tác động bởi lệnh. Cụ thể chỉ có các bản ghi làm cho btlogic nhận
giá trị .T. mới chịu sự tác động của lệnh
Biểu thức logic là biểu thức kết quả trả về giá trị .T. hoặc .F.
Nếu không có mệnh đề FOR ngầm định tất cả các bản ghi (trong
miền [phạm vi] được quy định ở trước) đều bị tác động bởi lệnh
o [TO PRINTER]
Dùng để chỉ thị lệnh in ra máy in
Nếu không có kết quả in ra màn hình
• Chú ý:
o Cần quan tâm đến các yêu cầu về kiểu dữ liệu khi viết biểu thức logic (các
kiểu dữ liệu phải tương đồng khi thực hiện các phép toán so sánh <=, =,
>=, <>, <,>) , kiểu dữ liệu của các đối số khi sử dụng hàm …
o Sử dụng các cặp dấu mở đóng ngoặc () để nhóm các phép toán cần thực
hiện trước nếu cần thiết
o Cần đổi font chữ hiển thị của màn hình Foxpro để tránh bị nhảy dòng khi
hiển thị bằng lệnh DISPLAY/LIST. Cách làm như sau: Vào menu Window
-> Properties Windows ->double click vào Foncharset . Hộp thoại Font
xuất hiện. Chọn fontname là .vntime , cỡ chữ 10
Hình : Đổi Font cho màn hình hiển thị Foxpro
• Ví dụ
o Hiển thị ra các phiếu lập trong tháng năm 2016
USE d:\thuchanhfoxpro\qlhh
LIST FIELDS soct, ngaylap FOR YEAR(ngaylap)=2016
o Hiển thị ra các phiếu xuất của loại hàng hóa 01
DISPLAY FOR SUBSTR(MAHH,3,2)="01" AND LEFT(SOCT,2)="PX"
o Hiển thị ra các phiếu xuất trong quý I năm 2016
LIST FOR MONTH(ngaylap)>=1 AND MONTH(ngaylap)<=3 AND
YEAR(ngaylap)=2016 AND LEFT(soct,2)="PX"
• Yêu cầu
o 4.1: Hiển thị các phiếu nhập trong quý I và quý III năm 2016?
o 4.2: Hiển thị ra màn hình các phiếu nhập loại hàng 01 và 02?
o 4.3: Hiển thị các phiếu nhập trong nửa đầu tháng 1 năm 2016?
o
o
o
o
4.4: Hiển thị ra màn hình các phiếu nhập nhiều hơn 10KG hoặc 00.1 TAN?
4.5: Hiển thị 3 bản ghi đầu tiên?
4.6: Hiển thị 3 bản ghi cuối cùng?
4.7: Hiển thị các bản ghi quên chưa nhập dvt
5. Lệnh REPLACE
• Cú pháp: Replace [phạm vi] <tên_trường_1 with biểu_thức_1>[,tên_trường_2
with biểu_thức_2,…] [FOR btlogic]
• Tác dụng: Dùng thay thế nội dung các bản ghi tại một hoặc nhiều trường trong
tệp đang mở
• Giải thích các thành phần của lệnh
o [phạm vi]: cách sử dụng giống lệnhDISPLAY
o <tên_trường_1 with biểu_thức_1>: tên trường cần thay thế với biểu thức
tính giá trị để thay thế. Biểu thức này cũng có thể là một hằng
o [,tên_trường_2 with biểu_thức_2,…]: nếu cần thay thế nội dung trên
nhiều trường có thể sử dụng dấu “,” sau biểu thức đằng trước và tiếp tục
viết tên trường và biểu thức tính giá trị để thay thế
• Chú ý:
o Kiểu của giá trị biểu thức cần phù hợp với kiểu của trường.
o Cần quan tâm về mặt logic nếu thay thế nội dung trên một trường có ảnh
hưởng tới nội dung trên trường khác không?
• Ví dụ:
o Tính thuế theo công thức thuế = 5%*Số lượng * DG với loại hàng 01 ; thuế
= 10% * số lượng * DG với các loại còn lại
REPLACE thue WITH soluong*dongia*0.05 FOR SUBSTR(mahh,3,2)="01"
REPLACE thue WITH soluong*dongia*0.1 FOR SUBSTR(mahh,3,2)<>"01"
Hoặc
REPLACE ALL thue WITH
soluong*dongia*IIF(SUBSTR(mahh,3,2)="01",0.05,0.1)
• Yêu cầu
o 5.1 Tính thành tiền theo công thức: thanhtien=soluong*dongia + thue
o 5.2 Chuyển nội dung các bản ghi chưa nhập trường dvt thành KG
o 5.3 Chuyển toàn bộ DVT từ TAN thành KG
Hướng dẫn thực hành Foxpro
6. Lệnh Delete
• Cú pháp: Delete [phạm vi] [For <btlogic>]
• Tác dụng: Đánh dấu xóa một hoặc một số bản ghi trong tệp đang mở hiện tại
(bản ghi chưa bị xóa hoàn toàn khỏi tệp dữ liệu).
• Giải thích các thành phần của lệnh
o [phạm vi]: Ý nghĩa, cách sử dụng và giá trị ngầm định giống lệnh DISPLAY
VÀ REPLACE
o [For <btlogic>]: xem lại các lệnh khác
• Chú ý:
o Lệnh Delete mới chỉ “đánh dấu” xóa các bản ghi. Các bản ghi bị đánh dấu
xóa chỉ bị xóa hẳn ra khỏi tệp dữ liệu khi người dùng dùng lệnh Pack
o Có thể khôi phục lại các bản ghi bị đánh dấu xóa trước đó bằng lệnh Recall
[phạm vi] [For <btlogic>]
• Ví dụ:
o Lệnh sau sẽ đánh dấu xóa các bản ghi chưa nhập dvt
Delete Forlen(alltrim(dvt))=0
o Tiếp đó lệnh Pack sẽ xóa hẳn các bản ghi được đánh dấu xóa bên trên và
các bản ghi được ghi lại vào tệp dữ liệu
Pack
• Yêu cầu
o 6.1 Xóacác phiếu có đơn giá bằng 0 ra khỏi tệp dữ liệu
...................................................................................................................................
...................................................................................................................................
7. Lệnh Sort
• Cú pháp: SORT TO <tên_tệp> on <trường 1 >[/A/D/C], [trường 2 [/A/D/C], …. ,]
[FIELDS DS_trường] [FOR bt_logic]
• Tác dụng: Dùng để sắp xếp các bản ghi của tệp đang mở rồi ghi dữ liệu sau khi
sắp xếp ra một tệp dữ liệu mới
• Giải thích các thành phần của lệnh
o <tên_tệp>tên của tệp dữ liệu mới (kết quả của lệnh Sort). Ngầm định
phần mở rộng của tệp này là .dbf
o <trường 1 >[/A/D/C] [, [trường 2 [/A/D/C], …. ,]]
<trường 1>, [trường 2] …: đây là tên của các trường chọn để làm
tiêu chí sắp xếp. Tối thiểu cần một trường để làm tiêu chí sắp xếp
này. Trong trường hợp cần sắp xếp theo nhiều tiêu chí khác nhau
thì các trường được viết ngăn cách nhau bởi dấu phẩy (,) tiêu chí
nào cần được ưu tiên cao hơn thì viết trước (Sort sẽ sắp xếp các
bản ghi theo giá trị tại trường 1, nếu hai bản ghi trùng giá trị tại
trường 1 sẽ xét tới trường 2,3 …)
>[/A/D/C] : Một số các tham số đi kèm đằng sau với các tên trường.
Mang ý nghĩa /A: tăng dần (mặc định); /D: giảm dần ; /C: không
phân biệt chữ hoa thường với các trường kiểu kí tự
• Chú ý:
o Vì lệnh Sort tạo ra một tệp dữ liệu mới nên muốn hiển thị kết quả sắp xếp
trước hết ta cần mở tệp đó bằng lệnh USE
o Lệnh Sort không được khuyến khích sử dụng (nên dùng lệnh Index)
• Ví dụ:
o Hiển thị các phiếu nhập theo trình tự thời gian lập, cùng thời gian lập theo
số phiếu
USE d:\thuchanhfoxpro\qlhh.dbf–Tệp gốc
SORT TO sx1 ON ngaylap /A, soct /A FOR LEFT(soct,2)="PN"
USE sx1– Mở tệp kết quả sau khi sắp xếp
LIST FIELDS ngaylap,soct
USE d:\thuchanhfoxpro\qlhh.dbf – Mở lại tệp gốc
• Yêu cầu
o 7.1 Dùng lệnh Sort hiển thị các chứng từ theo trình tự số chứng từ, cùng
số chứng từ theo khối lượng giảm dần
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
8. Lệnh Index
• Cú pháp: INDEX ON <biểu thức>TO<Tên tệp> [FOR<biểu thức logic>]
• Tác dụng: Tạo ra một tệp chỉ dẫn (phần mở rộng là .idx) để hiển thị hoặc truy cập
các bản ghi của tệp dữ liệu đang mở theo một thứ tự nào đó
• Giải thích các thành phần của lệnh
o <biểu thức> : biểu thức dùng để làm căn cứ tạo tệp chỉ dẫn. Foxpro căn cứ
vào giá trị của biểu thức này trên từng bản ghi để tạo tệp chỉ dẫn các bản
ghi theo thứ tự tăng dầncủa giá trị biểu thức. Giá trị biểu thức này có thể
thuộc về một kiểu giá trị bất kỳ (nhưng phổ biến nhất là kiểu C hoặc N).
Biểu thức có thể đơn giản chỉ là một tên trường hoặc có thể bao phức tạp
bao gồm nhiều phép toán và hàm.
o <Tên tệp> : tên của tệp chỉ dẫn (phần mở rộng là .IDX). Có thể bao gồm cả
đường dẫn dẫn tới tên tệp
o [FOR<biểu thức logic>] : xem lại các lệnh khác
• Chú ý:
o Kết quả của lệnh Index là một tệp chỉ dẫn (phần mở rộng là .idx). Khi thực
hiện thành công lệnh Index thì sẽ có một tệp chỉ dẫn được tạo thành và
mở cùng tệp dữ liệu gốc. Mọi lệnh để hiển thị các bản ghi (như List,
Display) hoặc truy cập tới bản ghi (GOTO, SKIP) sẽ được thực hiện theo
trình tự được quy định bởi tệp chỉ dẫn chứ không phải thứ tự gốc (phân
biệt với lệnh Sort).
o Lệnh Index luôn tạo tệp chỉ dẫn để sắp xếp các bản ghi theo thư tự tăng
dầncủa biểu thức
• Ví dụ:
o Hiển thị nội dung các bản ghi theo thứ tự tăng dần của soluong
INDEX on soluongTO c:\foxpro\cd001
LIST FIELDS soct,ngaylap,mahh,soluong
Giải thích: lệnh Index bên trên ta chọn biểu thức đơn giản chỉ là một tên
trường (soluong), trường này kiểu số. Lệnh Index tạo ra một tệp chỉ dẫn có
tên là cd001.idx để chỉ dẫn việc hiển thị và truy cập các bản ghi theo thứ tự
tăng dần của giá trị soluong. Điều này dẫn tới lệnh LIST tiếp theo các bản ghi
đã được hiển thị theo thứ tự tăng dần của soluong
Các bản ghi được hiển thị theo thứ tự tăng dần của trường soluong
o Hiển thị các phiếu bản ghi theo thứ tự giảm dần của trường soluong
INDEX on -soluongTO cd002for LEFT(soct,2)="PN"
LIST FIELDS soct,ngaylap,mahh,soluong,-soluong
Giải thích: ở đây ta chọn biểu thức là –soluong (đây là biểu thức kiểu N trả về
giá trị là số đối của soluong). Lệnh Index on tạo ra tệp chỉ dẫn cho các bản ghi
theo thứ tự tăng dần của –soluong. Theo tính chất toán học thì điều này
tương đương với việc tạo ra một thứ tự giảm dần của soluong
Các bản ghi được hiển thị theo thứ tự tăng dần của –soluong. Điều này dẫn tới soluong giảm dần
o Hiển thị các phiếu nhập theo trật tự số chứng từ, cùng số chứng từ theo
mã hàng hóa
INDEX on soct+mahhTO cd003 FOR LEFT(soct,2)="PN"
LIST FIELDS soct,ngaylap,mahh,soluong, soct+mahh
Giải thích: Ta chọn biểu thức sau Index on là biểu thức ghép hai xâu kí tự
soct+mahh . Nguyên tắc so sánh của hai xâu kí tự là so sánh lần lượt các kí tự
từ trái qua phải của hai xâu kí tự chừng nào các kí tự còn bằng nhau thì còn
so sánh tiếp cho đến khi tìm được hai kí tự khác nhau đầu tiên giữa hai xâu
thì ta so sánh hai kí tự đấy, chuỗi nào có giá trị kí tự so sánh bé hơn thì bé
hơn. Chính vì vậy ở đây ta ưu tiên viết soct trước mahh trong biểu thức ghép
xâu.
Các bản ghi được hiển thị theo thứ tự tăng dần của phép toán ghép xâu kí tự soct+mahh
• Yêu cầu
o 8.1 In các chứng từ lập trong năm 2016 theo thứ tự số chứng từ, cùng số
chứng từ theo loại hàng
...................................................................................................................................
...................................................................................................................................
o 8.2 In các chứng từ nhập hàng trong năm 2016 theo thứ tự số chứng từ
cùng số chứng từ theo số lượng tăng dần
...................................................................................................................................
...................................................................................................................................
o 8.3 In các chứng từ nhập hàng trong năm 2016 theo thứ tự số chứng từ
cùng số chứng từ theo số lượng giảm dần
...................................................................................................................................
...................................................................................................................................
o 8.4 Để hiển thị các chứng từ theo trình tự ngày lập cùng ngày lập theo mã
hàng hóa có người đã thực hiện các lệnh sau
INDEX on DTOC(ngaylap)+mahh TO cd
LIST FIELDS soct,ngaylap,mahh,soluong
Hãy kiểm tra lại kết quả của các lệnh trên.Cho biết lệnh có thực hiện đúng
yêu cầu không?Giải thích vì sao? Nếu sai viết lại cho đúng
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
o 8.5In các chứng từ lập trong quý II năm 2016 theo thứ tự ngày tháng lập,
cùng ngày lập theo số lượng tăng dần
...................................................................................................................................
...................................................................................................................................
o 8.6In các chứng từ theo thứ tự loại phiếu (xuất/ hoặc nhập)
...................................................................................................................................
...................................................................................................................................
o 8.7In các chứng từ theo loại hàng hóa, cùng loại hàng hóa theo số chứng
từ giảm dần
...................................................................................................................................
...................................................................................................................................
9. Lệnh SUM/AVERAGE
• Cú pháp: SUM (AVERAGE) [phạm vi] [ Ds trường số] [ TO ds_biến_nhớ] [ FOR
logic>]
• Tác dụng: Dùng để tính tổng, trung bình cộng các trường kiểu số trong tệp đang
mở
• Giải thích các thành phần của lệnh
o [phạm vi]: xem lại các lệnh khác, ngầm định là All
o [Danh sách các trường số]:
Bao gồm tập các tên trường kiểu số (thậm chí có thể là các biểu
thức kiểu số ngăn cách nhau bởi dấu phẩy (,) ) dùng để chỉ ra các
tên trường yêu cầu tính tổng hoặc trung bình cộng
Nếu không có thành phần này thì tất cả các trường số của tệp đều
được mang ra tính
o [TO ds_biến_nhớ]:
Bao gồm từ khóa TO và theo sau là một danh sách tên các biến nhớ
do người dùng tự đặt để lần lượt lưu lại các kết quả tính toán ứng
với các tên trường đã chỉ ra tại [danh sách các trường số ở trên)
Nếu không có thành phần này các kết quả tính toán không được
lưu lại và do vậy không thể hiển thị lại khi cần
o [FOR btlogic]: Xem lại các lệnh khác
• Chú ý:
o Ta sử dụng lệnh ?<tên biến>để hiển thị ra màn hình giá trị của <tên biến>.
Ta cũng có thể đưa vào lệnh ?một biểu thức bất kỳ chứ không nhất thiết
phải chỉ là tên biến
o Có thể thực hiện các phép toán số học (+,-,*,/ ..) bình thường với các biến
số này.
o Lệnh Average tính trung bình bằng cách tính tổng các giá trị trên trường
số của các bản ghi mà lệnh tác động chia cho số lượng bản ghi mà lệnh tác
động tới
• Ví dụ
o Tính tổng khối lượng, thành tiền nhập mã hàng HH0101 trong quý I năm
2016
SUM soluong,thanhtienTO tsoluong,tthanhtien FOR
LEFT(soct,2)="PN" AND MONTH(ngaylap)<=3 AND
YEAR(ngaylap)=2016
?"So luong nhap la:",tsoluong
?"thanh tien nhap la:",tthanhtien
Giải thích: Lệnh SUM trên tính tổng các giá trị trên trường soluong và
thanhtien của các bản ghi thỏa mãn biểu thức logic viết sau FOR. Kết quả tính
toán được lưu trong hai biến tsoluong và tthanhtien. Các lệnh ?tiếp theo hiển
thị các giá trị của biến này ra màn hình
• Yêu cầu
o 9.1 Tính đơn giá nhập bình quân mã hàng HH0101 trong quý I năm 2016
...................................................................................................................................
...................................................................................................................................
o 9.2 Tính khối lượng tồn của mã hàng HH0101 tại kho KH01 biết rằng giả sử
ban đầu số dư là 0.
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
o 9.3 Tính tổng thành tiền xuất trong tháng 1 năm 2016
...................................................................................................................................
...................................................................................................................................
10. Lệnh TOTAL *
• Tác dụng: Dùng tính tổng các trường số trong tệp dữ liệu đang mở hiện tại theo
từng nhóm bản ghi, sau đó đưa các kết quả tính toán được ra một tệp dữ liệu
(.dbf) mới.
o Một nhóm bản ghi là một dãy liên tiếp các bản ghi có chung giá trị tiêu
thức phân nhóm do người dùng lựa chọn. Do vậy để tiến hành phân nhóm
các bản ghi được chính xác ta cần phải sắp xếp các bản ghi đấy sao cho các
bản ghi ta mong muốn thuộc về một nhóm thì nằm liên tiếp nhau.
• Cú pháp: TOTAL TO <tên tệp> ON < Biểu thức > [ FIELDS <ds trường>] [FOR
<Bt logic>]
• Giải thích các thành phần của lệnh
o <tên tệp>: Tên của tệp dữ liệu (.dbf) chứa kết quả của lệnh TOTAL
o <biểu thức>: một biểu thức bất kỳ có thể đơn giản là tên một trường hoặc
một biểu thức phức tạp với các phép toán và hàm bên trong; Dùng để
phân nhóm các bản ghi khi tính tổng, hai bản ghi liên tiếp có cùng giá trị
của <biểu thức> sẽ thuộc về một nhóm, hai bản ghi liên tiếp có giá trị của
<biểu thức> khác nhau sẽ thuộc về các nhóm khác nhau.
o [ FIELDS<ds trường>] : danh sách các trường số được tính tổng theo
nhóm, nếu không có mặc định tất cả các trường số trong tệp
o [FOR <Bt logic>] : xem lại các lệnh khác
• Chú ý:
o Luôn luôn phải sắp xếp lại các bản ghi trước khi thực hiện lệnh TOTAL (nên
dùng INDEX để sắp xếp), mục đích của việc này để lệnh TOTALcó thể phân
nhóm các bản ghi một cách chính xác theo nhu cầu người dùng.
o Khi dùng lệnh Index để sắp xếp các bản ghi trước khi TOTAL thì
thức> viết sau lệnh TOTAL trùng với <biểu thức> viết sau lệnh INDEX
o Kết quả của lệnh TOTAL là một tệp dữ liệu do đó muốn hiển thị kết quả
cần dùng lệnh USE để mở tệp dữ liệu đó.
o Tệp kết quả của TOTAL có cấu trúc và nội dung như sau
Về cấu trúc: giống tệp gốc (số lượng trường, tên, kiểu các trường,
độ rộng trường cũng được giữ nguyên trừ khi cần thiết phải mở
rộng để chứa kết quả của lệnh)
Về nội dung các bản ghi:
• Số lượng bản ghi trong tệp kết quả bằng với số nhóm trong
tệp gốc. Mỗi bản ghi ở tệp kết quả phản ánh kết quả tính
toán cho một nhóm.
• Với mỗi bản ghi ở tệp kết quả, giá trị ở các trường sốcủa
chúng bằng tổng giá trị của các bản ghi ở nhóm tương ứng
(nếu trường số đấy trong danh sách các trường được yêu
cầu tính)
• Ví dụ:
o Lập báo cáo về tổng khối lượng nhập, thành tiền nhập của từng mã hàng
USE D:\thuchanhfoxpro\qlhh –Mở tệp gốc
--Bước 1: phân nhóm các bản ghi ở tệp gốc bằng lệnh Index
INDEX on mahh TO cdmahh FOR LEFT(soct,2)="PN"
--Bước 2: tính tổng theo nhóm bằng lệnh TOTAL. Gửi kết quả tính
được ra tệp mới
TOTAL ON mahh TO KQTH
--Bước 3: Mở bảng kết quả và hiển thị kết quả
USE KQTH
LIST FIELDS mahh, soluong,thanhtien
• Giải thích:
o Bước 1: Lệnh Index on mahh… tạo tệp chỉ dẫn giúp sắp xếp các bản ghi
theo thứ tự tăng dần của mahh. Qua đó cũng phân nhóm các bản ghi
thành các nhóm khác nhau theo tiêu chí là mahh. Theo hình minh họa bên
dưới
ta
có
5
nhóm
mahh
khác
nhau
là
“HH0101”,”HH0102”,”HH0201”,”HH0202”, ”HH0203”
o Bước 2: Lệnh Total on mahh kế tiếp tính tổng theo nhóm với tiêu thức để
gộp nhóm là mahh (cứ các bản ghi liên tiếp giống nhau ở mahh sẽ được
cộng lại ở các trường số soluong và thanhtien) . Kết quả được đưa vào
một tệp dữ liệu có tên là KQTH
o Bước 3: Ta dùng lệnh USE để mở bảng KQTH ở trên và hiển thj kết quả ra
màn hình bằng lệnh LIST. Do ở tệp gốc qlhh ta có 5 nhóm nên nhận thấy ở
tệp kết quả ta có 5 bản ghi ứng với 5 nhóm trên.
Quá trình tính toán lệnh TOTAL sau khi đã Index có thể được minh họa như
hình sau:
Tệp gốc qlhh sau khi phân nhóm
Tệp kết quả KQTH
o Lập báo khối lượng nhập của trong từng tháng của năm 2016
--Bước 1: phân nhóm các bản ghi bằng lệnh Index. Ở đây ta sắp
xếp theo month(ngaylap) do vậy hai bản ghi có chung giá trị
month(ngaylap) sẽ nằm liên tiếp và được coi là một nhóm
INDEX on MONTH(ngaylap) TO cdngay FOR YEAR(ngaylap)=2016
AND LEFT(soct,2)="PN"
--Bước 2: dùng lệnh TOTAL tính tổng theo nhóm. (Tiêu thức phân
nhóm là month(ngaylap))
TOTAL ON MONTH(ngaylap) TO KQTHANG
--Bước 3: mở tệp kết quả và hiển thị nội dung
USE KQTHANG
LIST FIELDS MONTH(ngaylap),soluong
• Yêu cầu
o 10.1 Lập báo cáo khối lượng, thành tiền xuất ở từng kho đến thời điểm
hiện tại
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
o 10.2 Lập báo cáo khối lượng, thành tiền nhập của từng loại hàng.
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
o 10.3 Lập báo cáo khối lượng, thành tiền nhập của từng mã hàng tại từng
kho
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
o 10.4 Lập báo cáo khối lượng, thành tiền nhập của từng mã hàng trong
từng tháng của năm 2016
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
o 10.5 Hãy cho biết ba tháng có tổng thành tiền nhập cao nhất trong năm
2016?
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
o 10.6 Lập báo cáo về khối lượng, thành tiền tồn của từng mã hàng?, từng
loại hàng?giả sử số dư ban đầu của tất cả các mã hàng đều là 0?
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
...................................................................................................................................
11. (Sử dụng mã tài khoản kế toán để phân biệt loại nghiệp vụ)
Giả sử cho tệp dữ liệu qlhh2.dbf có cấu trúc như sau
Tên trường
Kiểu trường
Độ rộng
soct
mahh
makho
C
C
C
10
10
10
ngaylap
soluong
dongia
dvt
tkno
tkco
thue
thanhtien
D
N
N
C
C
C
N
N
8
10
8
10
10
10
8
10
Phần
phân
2
1
1
1
thập (Chú thích)
Số chứng từ
Mã hàng hóa
Mã
kho
nhập/xuất
Ngày lập ct
Số lượng
Đơn giá
Đơn vị tính
tài khoản nợ
tài khoản có
thue
Thành tiền
Giả thiết:
- Ta quản lý đối tượng kế toán hàng hóa qua tài khoản 156. Tài khoản 156 được
chia chi tiết theo dạng 156xx (với xx là mã loại hàng hóa)
- Việc phân biệt phiếu nhập xuất thông qua tài khoản 156
Yêu cầu: thử làm lại các yêu cầu đã làm với cấu trúc và nội dung tệp dữ liệu mới này.
Ví dụ:
- Liệt kê các phiếu nhập loại hàng A0 trong năm 2016
LIST for LEFT(tkno,3)="156" AND SUBSTR(tkno,4,2)="A0" AND
YEAR(ngaylap)=2016
- Tính tổng thành tiền xuất trong năm 2016
SUM thanhtien TO tthanhtien FOR LEFT(tkco,3)="156" AND
YEAR(ngaylap)=2016
?"Tong thanh tien xuat trong nam 2016 la:",tthanhtien