vucongpda > 11-03-17, 11:05 PM
vucongpda > 12-03-17, 11:58 PM
(11-03-17, 11:05 PM)vucongpda Đã viết: Dear các Bác!Không Bác nào giúp em được vụ này ạ . Trong khi chờ các Bác hướng dẫn thì em vẫn đang tự mày mò, nghiên cứu nhưng vẫn chưa có kết quả. Mong các Bác bớt chút thời gian cho em vài ý kiến ạ.
Hiện em đang muốn viết một phần mềm nho nhỏ để phục vụ công việc theo dõi dịch vụ chuyển phát nhanh. Em đang bắt tay vào để làm thì thấy có một vấn đề vướng nhất là đang không biết làm thế nào để tính giá được cho mỗi khách hàng khác nhau, dịch vụ khác nhau ( vì nó quá phức tạp, theo kiểu dạng ma trận). Để cho các Bác dễ hình dung em đã gửi file Excel đính kèm tính chi phí (phần bôi vàng là em đã đặt công thức).
Em có những vướng mắc sau:
1.Chọn đúng bảng giá đúng theo hai tiêu chí:
->Chọn Trường [nhóm dịch vụ] =”Thư”
->Chọn trường[Loại dịch vụ]=”Hỏa tốc”
Thì nó sẽ áp dụng bảng giá “tb_banggia_thu_hoatoc” hoặc chọn [Loại dịch vụ]=”Thường” thì nó sẽ áp dụng bảng giá” tb_banggia_thu_thuong”. Cũng tương tự như vậy với Dịch vụ là “Hàng Hóa” nó sẽ chọn đúng bảng giá là Hàng hóa theo từng loại dịch vụ.
2. Số Km và Khoảng cách km từ TỈNH ĐI tới TỈNH ĐẾN hết bao nhiêu km ? em tự làm được rồi:
VD1: Hà Nội- Sơn Tây: thì sẽ tra bảng “tb_phu_km” . kết quả trường [km]= 42km
VD2: Hà Nội- Sơn Tây: Em đã đặt hàm IIF để ra kết qủa [khoảng cách km] = Đến 100 km Trong bảng giá có phân ra. Dưới 100 km thì để khoảng cách là Đến 100km (Trường hợp này là 42km). Dưới 300km thì khoảng cách là Đến 300km. Trên 300km thì khoảng cách là Trên 300km..(xem chi tiết các tb_banggia_)
3. Số kg quy đổi (em tự làm được rồi): Em thống nhất làm tròn để áp dụng theo đúng trong bảng giá .Quy định <=0.05 kg thì sẽ làm tròn là 0.05 kg.
VD1: [số kg thực tế] là 0.01 kg thì ở trường [Số kg quy đổi]= 0.05kg
VD2: [số kg thực tế] là 0.05 kg thì ở trường [Số kg quy đổi]= 0.05kg
4. Chi phí: Cái này hiện tại em chưa biết dùng code như nào để nó chọn được Bảng giá theo sự lựa chọn ở hai trường [nhóm dịch vụ] & [Loại dịch vụ] tương ứng như ở trên và tìm Đơn giá theo đúng giá trị của dòng và cột.
Em ví dụ cụ thể cách tích ở trong Excel: Về cơ bản là nó đi tìm giá trị của dòng & cột tương ứng để tìm ra ô có kết quả đúng.
Theo quy định trong bảng giá nếu số kg <=2 thì áp đúng giá theo dòng và cột. Còn nếu số Kg >2 thì sẽ tính làm hai trường hợp:
+ Lấy đơn giá của 2kg
+ Lấy đơn giá của mỗi 500 gr tiếp theo , nhân với số Kg còn lại sau khi đã trừ đi 2 kg.
VD1: Tính trọng lượng <= 2 kg
Ta xem trong sheet “Bảng tính giá”
- [Tỉnh đi]= Hà Nội
- [Tỉnh đến]= Sơn tây
-[KM]= 42km
-[Khoảng cách km]= Đến 100 km (Tương ứng với dòng E3 (trong sheet “GIÁ”)
-[số kg quy đổi] = 0.05 (tương ứng với Dòng B4 (trong sheet “GIÁ”)
-[Chi phí]= 7.200 đ (Tìm giá trị Dòng B4 và Cột E3 ->Kết quả là Ô E4 (7.200 đ). Như hình bên dưới:
undefined
VD2: Tính trọng lượng >2 kg:
Nếu trong lượng <=2 thì tìm dòng và cột tương ứng. Còn nếu > 2 kg thì sẽ lấy số thực tế trừ đi 2kg x Mỗi 500 gr tiếp theo.
Cụ thể như sau:
Ta xem trong sheet “Bảng tính giá”
- [Tỉnh đi]= Hà Nội
- [Tỉnh đến]= HCM
-[KM]= HN-HCM
-[Khoảng cách km]= HN-HCM (Tương ứng với dòng I3 (trong sheet “GIÁ”)
-[số kg quy đổi] = 3 KG (tương ứng với Dòng B11 (trong sheet “GIÁ”)
-[Chi phí]= 73.530 đ
# Diễn giải cách tính phí:
3 Kg (số thực tế) - 2Kg (quy định trong bảng giá) = 1 Kg (đây là số kg tính cho mỗi 500 gr phát sinh tiếp theo kể từ khi số kg thực tế >2)
+ Đơn giá 58.950 đ (áp dụng cho 2kg đầu) . Tại Ô I10 trong trong sheet “GIÁ”)
+ Đơn giá 7.290 đ (áp dụng cho 500 gr tiếp theo). Đơn giá quy đổi ra Kg = 7.290 đ/0.5 kg = 14.580 đ/1 kg. Tại Ô I11 trong trong sheet “GIÁ”)
èGiá cuối cùng: 58.950 đ + 14.580 đ X 1 Kg = 73.530 đ
Trân đây là những vướng mắc kính mong các Bác hỗ trợ giúp ạ.
Em cảm ơn,
http://www.mediafire.com/file/ni1213w21e...hgia.accdb
http://www.mediafire.com/file/4eb6kwpdbd...1-CPN.xlsx
http://www.mediafire.com/view/7vveliczv7qd6q0/vd1.png
http://www.mediafire.com/view/ohcpshsdh1oyoa7/vd2.png
maidinhdan > 13-03-17, 12:28 AM
(12-03-17, 11:58 PM)vucongpda Đã viết:(11-03-17, 11:05 PM)vucongpda Đã viết: Dear các Bác!Không Bác nào giúp em được vụ này ạ . Trong khi chờ các Bác hướng dẫn thì em vẫn đang tự mày mò, nghiên cứu nhưng vẫn chưa có kết quả. Mong các Bác bớt chút thời gian cho em vài ý kiến ạ.
Hiện em đang muốn viết một phần mềm nho nhỏ để phục vụ công việc theo dõi dịch vụ chuyển phát nhanh. Em đang bắt tay vào để làm thì thấy có một vấn đề vướng nhất là đang không biết làm thế nào để tính giá được cho mỗi khách hàng khác nhau, dịch vụ khác nhau ( vì nó quá phức tạp, theo kiểu dạng ma trận). Để cho các Bác dễ hình dung em đã gửi file Excel đính kèm tính chi phí (phần bôi vàng là em đã đặt công thức).
Em có những vướng mắc sau:
1.Chọn đúng bảng giá đúng theo hai tiêu chí:
->Chọn Trường [nhóm dịch vụ] =”Thư”
->Chọn trường[Loại dịch vụ]=”Hỏa tốc”
Thì nó sẽ áp dụng bảng giá “tb_banggia_thu_hoatoc” hoặc chọn [Loại dịch vụ]=”Thường” thì nó sẽ áp dụng bảng giá” tb_banggia_thu_thuong”. Cũng tương tự như vậy với Dịch vụ là “Hàng Hóa” nó sẽ chọn đúng bảng giá là Hàng hóa theo từng loại dịch vụ.
2. Số Km và Khoảng cách km từ TỈNH ĐI tới TỈNH ĐẾN hết bao nhiêu km ? em tự làm được rồi:
VD1: Hà Nội- Sơn Tây: thì sẽ tra bảng “tb_phu_km” . kết quả trường [km]= 42km
VD2: Hà Nội- Sơn Tây: Em đã đặt hàm IIF để ra kết qủa [khoảng cách km] = Đến 100 km Trong bảng giá có phân ra. Dưới 100 km thì để khoảng cách là Đến 100km (Trường hợp này là 42km). Dưới 300km thì khoảng cách là Đến 300km. Trên 300km thì khoảng cách là Trên 300km..(xem chi tiết các tb_banggia_)
3. Số kg quy đổi (em tự làm được rồi): Em thống nhất làm tròn để áp dụng theo đúng trong bảng giá .Quy định <=0.05 kg thì sẽ làm tròn là 0.05 kg.
VD1: [số kg thực tế] là 0.01 kg thì ở trường [Số kg quy đổi]= 0.05kg
VD2: [số kg thực tế] là 0.05 kg thì ở trường [Số kg quy đổi]= 0.05kg
4. Chi phí: Cái này hiện tại em chưa biết dùng code như nào để nó chọn được Bảng giá theo sự lựa chọn ở hai trường [nhóm dịch vụ] & [Loại dịch vụ] tương ứng như ở trên và tìm Đơn giá theo đúng giá trị của dòng và cột.
Em ví dụ cụ thể cách tích ở trong Excel: Về cơ bản là nó đi tìm giá trị của dòng & cột tương ứng để tìm ra ô có kết quả đúng.
Theo quy định trong bảng giá nếu số kg <=2 thì áp đúng giá theo dòng và cột. Còn nếu số Kg >2 thì sẽ tính làm hai trường hợp:
+ Lấy đơn giá của 2kg
+ Lấy đơn giá của mỗi 500 gr tiếp theo , nhân với số Kg còn lại sau khi đã trừ đi 2 kg.
VD1: Tính trọng lượng <= 2 kg
Ta xem trong sheet “Bảng tính giá”
- [Tỉnh đi]= Hà Nội
- [Tỉnh đến]= Sơn tây
-[KM]= 42km
-[Khoảng cách km]= Đến 100 km (Tương ứng với dòng E3 (trong sheet “GIÁ”)
-[số kg quy đổi] = 0.05 (tương ứng với Dòng B4 (trong sheet “GIÁ”)
-[Chi phí]= 7.200 đ (Tìm giá trị Dòng B4 và Cột E3 ->Kết quả là Ô E4 (7.200 đ). Như hình bên dưới:
undefined
VD2: Tính trọng lượng >2 kg:
Nếu trong lượng <=2 thì tìm dòng và cột tương ứng. Còn nếu > 2 kg thì sẽ lấy số thực tế trừ đi 2kg x Mỗi 500 gr tiếp theo.
Cụ thể như sau:
Ta xem trong sheet “Bảng tính giá”
- [Tỉnh đi]= Hà Nội
- [Tỉnh đến]= HCM
-[KM]= HN-HCM
-[Khoảng cách km]= HN-HCM (Tương ứng với dòng I3 (trong sheet “GIÁ”)
-[số kg quy đổi] = 3 KG (tương ứng với Dòng B11 (trong sheet “GIÁ”)
-[Chi phí]= 73.530 đ
# Diễn giải cách tính phí:
3 Kg (số thực tế) - 2Kg (quy định trong bảng giá) = 1 Kg (đây là số kg tính cho mỗi 500 gr phát sinh tiếp theo kể từ khi số kg thực tế >2)
+ Đơn giá 58.950 đ (áp dụng cho 2kg đầu) . Tại Ô I10 trong trong sheet “GIÁ”)
+ Đơn giá 7.290 đ (áp dụng cho 500 gr tiếp theo). Đơn giá quy đổi ra Kg = 7.290 đ/0.5 kg = 14.580 đ/1 kg. Tại Ô I11 trong trong sheet “GIÁ”)
èGiá cuối cùng: 58.950 đ + 14.580 đ X 1 Kg = 73.530 đ
Trân đây là những vướng mắc kính mong các Bác hỗ trợ giúp ạ.
Em cảm ơn,
http://www.mediafire.com/file/ni1213w21e...hgia.accdb
http://www.mediafire.com/file/4eb6kwpdbd...1-CPN.xlsx
http://www.mediafire.com/view/7vveliczv7qd6q0/vd1.png
http://www.mediafire.com/view/ohcpshsdh1oyoa7/vd2.png
Em cảm ơn mọi người.
tranthanhan1962 > 13-03-17, 12:37 AM
vucongpda > 13-03-17, 03:47 PM
(13-03-17, 12:28 AM)maidinhdan Đã viết:Em chào anh,(12-03-17, 11:58 PM)vucongpda Đã viết:(11-03-17, 11:05 PM)vucongpda Đã viết: Dear các Bác!Không Bác nào giúp em được vụ này ạ . Trong khi chờ các Bác hướng dẫn thì em vẫn đang tự mày mò, nghiên cứu nhưng vẫn chưa có kết quả. Mong các Bác bớt chút thời gian cho em vài ý kiến ạ.
Hiện em đang muốn viết một phần mềm nho nhỏ để phục vụ công việc theo dõi dịch vụ chuyển phát nhanh. Em đang bắt tay vào để làm thì thấy có một vấn đề vướng nhất là đang không biết làm thế nào để tính giá được cho mỗi khách hàng khác nhau, dịch vụ khác nhau ( vì nó quá phức tạp, theo kiểu dạng ma trận). Để cho các Bác dễ hình dung em đã gửi file Excel đính kèm tính chi phí (phần bôi vàng là em đã đặt công thức).
Em có những vướng mắc sau:
1.Chọn đúng bảng giá đúng theo hai tiêu chí:
->Chọn Trường [nhóm dịch vụ] =”Thư”
->Chọn trường[Loại dịch vụ]=”Hỏa tốc”
Thì nó sẽ áp dụng bảng giá “tb_banggia_thu_hoatoc” hoặc chọn [Loại dịch vụ]=”Thường” thì nó sẽ áp dụng bảng giá” tb_banggia_thu_thuong”. Cũng tương tự như vậy với Dịch vụ là “Hàng Hóa” nó sẽ chọn đúng bảng giá là Hàng hóa theo từng loại dịch vụ.
2. Số Km và Khoảng cách km từ TỈNH ĐI tới TỈNH ĐẾN hết bao nhiêu km ? em tự làm được rồi:
VD1: Hà Nội- Sơn Tây: thì sẽ tra bảng “tb_phu_km” . kết quả trường [km]= 42km
VD2: Hà Nội- Sơn Tây: Em đã đặt hàm IIF để ra kết qủa [khoảng cách km] = Đến 100 km Trong bảng giá có phân ra. Dưới 100 km thì để khoảng cách là Đến 100km (Trường hợp này là 42km). Dưới 300km thì khoảng cách là Đến 300km. Trên 300km thì khoảng cách là Trên 300km..(xem chi tiết các tb_banggia_)
3. Số kg quy đổi (em tự làm được rồi): Em thống nhất làm tròn để áp dụng theo đúng trong bảng giá .Quy định <=0.05 kg thì sẽ làm tròn là 0.05 kg.
VD1: [số kg thực tế] là 0.01 kg thì ở trường [Số kg quy đổi]= 0.05kg
VD2: [số kg thực tế] là 0.05 kg thì ở trường [Số kg quy đổi]= 0.05kg
4. Chi phí: Cái này hiện tại em chưa biết dùng code như nào để nó chọn được Bảng giá theo sự lựa chọn ở hai trường [nhóm dịch vụ] & [Loại dịch vụ] tương ứng như ở trên và tìm Đơn giá theo đúng giá trị của dòng và cột.
Em ví dụ cụ thể cách tích ở trong Excel: Về cơ bản là nó đi tìm giá trị của dòng & cột tương ứng để tìm ra ô có kết quả đúng.
Theo quy định trong bảng giá nếu số kg <=2 thì áp đúng giá theo dòng và cột. Còn nếu số Kg >2 thì sẽ tính làm hai trường hợp:
+ Lấy đơn giá của 2kg
+ Lấy đơn giá của mỗi 500 gr tiếp theo , nhân với số Kg còn lại sau khi đã trừ đi 2 kg.
VD1: Tính trọng lượng <= 2 kg
Ta xem trong sheet “Bảng tính giá”
- [Tỉnh đi]= Hà Nội
- [Tỉnh đến]= Sơn tây
-[KM]= 42km
-[Khoảng cách km]= Đến 100 km (Tương ứng với dòng E3 (trong sheet “GIÁ”)
-[số kg quy đổi] = 0.05 (tương ứng với Dòng B4 (trong sheet “GIÁ”)
-[Chi phí]= 7.200 đ (Tìm giá trị Dòng B4 và Cột E3 ->Kết quả là Ô E4 (7.200 đ). Như hình bên dưới:
undefined
VD2: Tính trọng lượng >2 kg:
Nếu trong lượng <=2 thì tìm dòng và cột tương ứng. Còn nếu > 2 kg thì sẽ lấy số thực tế trừ đi 2kg x Mỗi 500 gr tiếp theo.
Cụ thể như sau:
Ta xem trong sheet “Bảng tính giá”
- [Tỉnh đi]= Hà Nội
- [Tỉnh đến]= HCM
-[KM]= HN-HCM
-[Khoảng cách km]= HN-HCM (Tương ứng với dòng I3 (trong sheet “GIÁ”)
-[số kg quy đổi] = 3 KG (tương ứng với Dòng B11 (trong sheet “GIÁ”)
-[Chi phí]= 73.530 đ
# Diễn giải cách tính phí:
3 Kg (số thực tế) - 2Kg (quy định trong bảng giá) = 1 Kg (đây là số kg tính cho mỗi 500 gr phát sinh tiếp theo kể từ khi số kg thực tế >2)
+ Đơn giá 58.950 đ (áp dụng cho 2kg đầu) . Tại Ô I10 trong trong sheet “GIÁ”)
+ Đơn giá 7.290 đ (áp dụng cho 500 gr tiếp theo). Đơn giá quy đổi ra Kg = 7.290 đ/0.5 kg = 14.580 đ/1 kg. Tại Ô I11 trong trong sheet “GIÁ”)
èGiá cuối cùng: 58.950 đ + 14.580 đ X 1 Kg = 73.530 đ
Trân đây là những vướng mắc kính mong các Bác hỗ trợ giúp ạ.
Em cảm ơn,
http://www.mediafire.com/file/ni1213w21e...hgia.accdb
http://www.mediafire.com/file/4eb6kwpdbd...1-CPN.xlsx
http://www.mediafire.com/view/7vveliczv7qd6q0/vd1.png
http://www.mediafire.com/view/ohcpshsdh1oyoa7/vd2.png
Em cảm ơn mọi người.
Trả lời.
Câu 1. Bạn thiết kế table, form cần thiết mình sẽ hỗ trợ bạn viết hàm để lấy đúng giá bạn cần.
Câu 2. Bạn nói tự mình làm được.
Câu 3. Bạn nói tự mình làm được.
Câu 4. Hình như tương tự ý câu 1.
* Lưu ý: Vui lòng gửi bằng file Access 2003.
Thân mến!
vucongpda > 13-03-17, 03:53 PM
(13-03-17, 12:37 AM)tranthanhan1962 Đã viết: OK! Do cơ sở dữ liệu của bạn đang phân tích theo kiểu bê nguyên phần excel sang nên anh em cũng khó lòng hỗ trợ cho bạn. Mình gợi ý bạn thế này.
Phân tích từng trường hợp để tạo ra các bảng với quan hệ cha con, tạm thời có thể như thế này:
Table1: Chủng loại gồm có thư, hỏa tốc.
Table 2: Trọng lượng (có field chủng loại là khóa ngoại của field chủng loại của table 1), field trọng lượng liệt kê từng loại trọng lượng của từng chủng loại phải đặt mã cụ thể (Ví dụ 0.05 của thư = T1, 0.1 của thư =T2, 0.05 hỏa tốc = H1, 0.1 hỏa tốc =H2 ….).
Table 3: Đoạn đường (có field trọng lượng từng chủng loại là khóa ngoại của table 2). Lại liệt kê từng mã đoạn đường theo trọng lượng của từng chủng loại và đưa giá tiền vào (Ví dụ H2A, H1B – A, B, C… cuối cùng là mã đoạn đường).
Table 4: table phát sinh chi phí sẽ có các field có đầy đủ trọng lượng và đoạn đường. Viết code để khi nhập số liệu vào form sẽ tạo mã cho phát sinh. Sau khi có mã dùng hàm Dlookup() để truy xuất giá tiền từ table 3 rồi viết code tính tiền.
Thực ra cũng có nhiều cách khác. Nhưng tôi không biết diễn giải như thế nào cho bạn hiểu. cách càng đơn giản thì code càng phức tạp. Nhiều khi, có những vấn đề nhẹ nhàng trong excel nhưng đưa vào access thì phức tạp vô cùng và ngược lại. (giả dụ bình quân gia quyền hay lũy kế rất đơn giản trên excel nhưng vào access thì cực kỳ phức tạp)
Để giải quyết code tính tiền bạn nên dùng cấu trúc Select Case để giải quyết từng trường hợp (quá nhiều trường hợp). Nếu xử dụng cấu trúc If...then... rất dễ bị lẫn lộn.
Chúc bạn thành công.
tranthanhan1962 > 13-03-17, 09:59 PM
(13-03-17, 03:53 PM)vucongpda Đã viết: Em cảm ơn Bác. Do em mới đang tự học access nên khâu phân tích dữ liệu hơi kém. Để làm được dữ liệu như của Bác gợi ý em thấy khó quá . Bác cho em hỏi nếu em cứ để dữ liệu như thế thì có xây công thức tính được giá không hay bắt buộc phải làm lại dữ liệu ạ ?
Em cảm ơn,
ongke0711 > 14-03-17, 01:05 AM
Public Function TinhCuocPhi(TrongLuong As Double, NhomKC As Byte, LoaiDV As Byte, NhomHH As Byte) As Double
[/font]
Dim CuocPhi As Double
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT tblBangGia.* FROM tblBangGia " & _
"WHERE tblBangGia.NhomKC =" & NhomKC & " And tblBangGia.LoaiDV =" & LoaiDV & " And tblBangGia.NhomHH =" & NhomHH & _
" ORDER BY tblBangGia.MucTrongLuong1"
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
CuocPhi = 0
Do Until rs.EOF
If rs!MucTrongLuong1 > TrongLuong Then
CuocPhi = 0
Else
If rs!MucTrongLuong1 < TrongLuong And rs!MucTrongLuong2 >= TrongLuong Then
CuocPhi = CuocPhi + rs!CuocPhi
Else
If rs!MucTrongLuong1 < TrongLuong And rs!MucTrongLuong2 = 0 Then
Select Case NhomHH
Case 1
CuocPhi = ((TrongLuong - rs!MucTrongLuong1) \ 500) * rs!CuocPhi
Case 2
CuocPhi = ((TrongLuong - rs!MucTrongLuong1) \ 1) * rs!CuocPhi
End Select
rs.MovePrevious
CuocPhi = CuocPhi + rs!CuocPhi
rs.MoveNext
End If
End If
End If
rs.MoveNext
Loop
TinhCuocPhi = CLng(CuocPhi)
rs.Close
Set rs = Nothing
[font=Tahoma]End Function
vucongpda > 14-03-17, 12:54 PM
(14-03-17, 01:05 AM)ongke0711 Đã viết: Mạn phép bác tranhthanhan1962 post cách làm của em. Lúc trước cũng có áp dụng cái hàm gần tương tự như vầy để tính mức thuế thu nhập phải nộp theo các thang mức lương. Nay cải biến chút áp dụng vô bài toán này.Với trình độ của em các Bác gợi ý em cũng hơi khó hình dung ạ, do trình em quá thấp
#vucongpda
- Như bác tranthanhan29162 đã nói, bạn phải thiết kế lại các table chứ không thể để y nguyên như cái ma trận giá của Excel. Nếu thiết kế table như hiện tại của bạn sau này sẽ rất khó khăn khi cập nhật dữ liệu. Bản thân trong Excel nếu bạn muốn cập nhật thêm giá, thêm nhóm khoảng cách thì bạn cũng phải vẽ lại ô, thêm công thức v.v.. cũng rất thủ công.
Ví dụ: Sau này bạn cần thêm “KHOẢNG CÁCH KM” mới (thêm Trên 400km, >500km v.v..) thì chẳng lẻ vô table design thêm cột rồi làm lại tất cả các công thức?
- Bảng giá cho từng loại dịch vụ, từng loại hàng hóa riêng biệt sẽ cũng rất khó khăn khi viết code tham chiếu từng trường hợp.
Do vậy tôi sẽ tổ chức lại CSDL (cũng gần ý tưởng như của anh Ân) như bên dưới. Gồm 5 tables.
- tblNhomKC: (nhóm khoảng cách) khi cần cập nhật thêm hoặc chia nhỏ khoảng cách để tính cước phí thì nhập vào table này.
- tblKhoangCachTinh: khi phát sinh Tỉnh mới phải nhập dữ liệu nó thuộc nhóm khoảng cách tính phí (ở bảng trên) nào luôn để dễ tham chiếu sau này.
- tblBangGia: khi có phát sinh giá cước mới cho 1 mức trọng lượng nào đó thì cập nhật vào bảng này và phải nhập đầy đủ thông tin: thuộc loại DV hỏa tốc hay thường, cho nhóm KC nào (>400km hay …), cho loại hàng hóa nào (Thư, Hàng Hóa). Table chuyển đổi ma trận cước phí có nhiều cột của bạn thành dòng để dễ cập nhật cũng như truy vấn. Khi bạn cần in bảng giá thì dùng crosstab query và report để in bảng giá như kiểu ma trận hiện tại của bạn. Dữ liệu trong bảng này tôi lấy từ các table của bạn và thấy nó bị trùng lắp, giá không logic cho lắm (xem lại giá cho loại “Hàng hóa”). Cái đó bạn tự sửa cho đúng.
Tôi tạo một hàm TinhCuocPhi() như bên dưới. Bạn copy nó vào module.
Mã PHP:Public Function TinhCuocPhi(TrongLuong As Double, NhomKC As Byte, LoaiDV As Byte, NhomHH As Byte) As Double
[/font]
Dim CuocPhi As Double
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT tblBangGia.* FROM tblBangGia " & _
"WHERE tblBangGia.NhomKC =" & NhomKC & " And tblBangGia.LoaiDV =" & LoaiDV & " And tblBangGia.NhomHH =" & NhomHH & _
" ORDER BY tblBangGia.MucTrongLuong1"
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
CuocPhi = 0
Do Until rs.EOF
If rs!MucTrongLuong1 > TrongLuong Then
CuocPhi = 0
Else
If rs!MucTrongLuong1 < TrongLuong And rs!MucTrongLuong2 >= TrongLuong Then
CuocPhi = CuocPhi + rs!CuocPhi
Else
If rs!MucTrongLuong1 < TrongLuong And rs!MucTrongLuong2 = 0 Then
Select Case NhomHH
Case 1
CuocPhi = ((TrongLuong - rs!MucTrongLuong1) \ 500) * rs!CuocPhi
Case 2
CuocPhi = ((TrongLuong - rs!MucTrongLuong1) \ 1) * rs!CuocPhi
End Select
rs.MovePrevious
CuocPhi = CuocPhi + rs!CuocPhi
rs.MoveNext
End If
End If
End If
rs.MoveNext
Loop
TinhCuocPhi = CLng(CuocPhi)
rs.Close
Set rs = Nothing
[font=Tahoma]End Function
[/url][url=http://s410.photobucket.com/user/ongke0711/media/TinhCuocPhi5.png.html]
Link file demo: http://www.mediafire.com/file/8pm8d7d2hh...uocPhi.mdb