Muốn làm Report có Record source động

thuydhpy

Member
Hội viên mới
Mình có 12 bảng lương trong 12 tháng có cấu trúc giống nhau nhưng tên gọi được qui định là luong01, luong02, luong03...
Thiết kế 1 form cho phép chọn tháng cần in bảg luong, nếu đồng ý in bảng lương, nó sẽ cho phép in bảng lương có dữ liệu nguồn là bảng lương tháng đang chọn.
- Nếu tạo 12 report in 12 bảng trên thì không có gì phải bàn.
- Còn nếu muốn chỉ tạo 1 report thôi, rồi thay đổi record source, liệu access có thực hiện được không?
Rất cám ơn sự quan tâm thảo luận của các anh chị
 
Ðề: Muốn làm Report có Record source động

Bạn đưa file Access của bạn đây, tui làm rồi gởi lại cho...Nhanh mờ...suyngamdi@gmail.com
 
Ðề: Muốn làm Report có Record source động

Mình có 12 bảng lương trong 12 tháng có cấu trúc giống nhau nhưng tên gọi được qui định là luong01, luong02, luong03...
Thiết kế 1 form cho phép chọn tháng cần in bảg luong, nếu đồng ý in bảng lương, nó sẽ cho phép in bảng lương có dữ liệu nguồn là bảng lương tháng đang chọn.
- Nếu tạo 12 report in 12 bảng trên thì không có gì phải bàn.
- Còn nếu muốn chỉ tạo 1 report thôi, rồi thay đổi record source, liệu access có thực hiện được không?
Rất cám ơn sự quan tâm thảo luận của các anh chị
Làm được nhưng bạn nói thế thì khó trả lời cho bạn. Up file lên để mọi người giúp cho.
 
Ðề: Muốn làm Report có Record source động

Có tài liệu riêng về combo box đây nhưng suynghidi hổng có quyền gửi đính kèm file. Để đưa lên Online Share rồi gửi link vậy
 
Ðề: Muốn làm Report có Record source động

Mình cũng không biết up file ở chỗ nào nữa
 
Ðề: Muốn làm Report có Record source động

Mình nghĩ bạn đã tạo được report bảng lương của 1 tháng rồi đúng không? Để report đấy có thể in được bảng lương cho cả 12 tháng thì đơn giản thôi. Bạn thực hiện như sau (Giả sử report bảng lương bạn đã tạo có tên là rpt_BangLuong):

1. Bạn tạo một Query đặt tên là qry_BangLuong với câu lệnh SQL như sau: SELECT * FROM LUONG01;

2. Mở rpt_BangLuong ở chế độ Design, đặt lại thuộc tính Record Souce là qry_BangLuong

3. Tạo 1 form chọn điều kiện báo cáo có tên là frm_InBangLuong, trên form này gồm có các điều khiển:
- 1 Combobox hoặc 1 text box để cho người sử dụng nhập tháng cần in bảng lương (bạn nên tạo bằng combobox vừa có thể nhập từ bàn phím hoặc có thể chọn từ danh sách từ 1 đến 12). Ở đây tôi giả sử sẽ tạo combobox có tên là cbo_Thang
- 1 Command Button có tên là cmd_OK để in bảng lương và 1 Command Button cmd_Cancel để đóng form lại.

Trong sự kiện On Click của Command cmd_OK bạn đánh các lệnh sau:

Private Sub cmd_OK_Click()
On Error GoTo loi
Dim st, TenBang
Dim db As Database, Qr As QueryDef
TenBang = "LUONG" & trim(cbo_Thang)
st = "SELECT * FROM " & TenBang & ";"
Set db = CurrentDb
Set Qr = db.QueryDefs("qry_BangLuong")
Qr.SQL = st
Qr.Close
Set db = Nothing
DoCmd.OpenReport "rpt_BangLuong", acViewPreview
DoCmd.Maximize
Exit Sub
loi:
Select Case Err.Number
Case Else
MsgBox "Lỗi: " & Err.Number & " - " & Err.Description
End Select

Để tiêu đề bảng lương thể hiện đúng bảng lương đang in, VD: bạn chọn tháng 03 thì sẽ hiện là: "BẢNG THANH TOÁN LƯƠNG THÁNG 03" thì bạn làm như sau:
Giả sử tiêu đề trong rpt_BangLuong bạn tạo bằng 1 label có tên là lbl_TieuDe thì ở sự kiện Report_Open bạn thêm vào lệnh sau:
lbl_TieuDe.Caption = "Bảng thanh toán lương thang " & forms("frm_InBangLuong")!cbo_Thang

Lưu ý: khi nhập tháng từ 1-9 phải thêm số 0 vào trước (01-09) để chương trình xác đinh được đúng tên bảng bạn đặt.

Nếu có trục trặc gì bạn vui lòng liên hệ tôi sẽ giúp bạn
Chúc thành công!


Ngoài cách này, bạn cũng có thể dùng cách sau: (không phải viết code VBA):
1/ Như dongnamnb nói: Ta đã có form frm_InBangLuong, với combobox với name là cbo_Thang, Nguồn dữ liệu của Report In bảng lương rpt_bangLuong là qry_bangluong.
2/ Ta cần lấy nguồn dữ liệu cho Combo box sổ xuống: Trong frm_inBangLuong, ở chế độ Design, chọn cbo_Thang, Mở property (Alt + Enter nó), bạn chuyển qua tab All, làm như sau:
Control Source: Để trống
Rowsource Type:
Cách 1: Chọn Table/Query (Chọn cái này có tính năng động, rất hay...sẽ giải thích sau), Và mục Row source: bạn kích vào nút ba chấm để tạo Group query, với nguồn dữ liệu là table Lương, chỉ lấy 1 trường là THÁNG.
cách 2: Chọn value list, Trong Row Source: gõ "Tháng 1"; "Tháng 2";...."Tháng 12". (chú ý gõ "Tháng xx" phải đúng hoàn toàn (font chữ, số ký tự..) với dữ liệu trong cột tháng của Table Lương).
NHững thuộc tính khác để mặc định cũng được.
3/ Trong qry_bangluong, cột tháng, dòng criteria, bạn gõ: "forms!frm_InBangLuong!cbo_thang"
4/ chuyển frm_InBangLuong sang chế độ xem, chọn tháng cần in, bấm nút in sẽ cho bạn kết quả như ý (sau này làm những cái khác cũng tương tự).
5/ Làm Theo dongnamnb phần này: "Để tiêu đề bảng lương thể hiện đúng bảng lương đang in, VD: bạn chọn tháng 03 thì sẽ hiện là: "BẢNG THANH TOÁN LƯƠNG THÁNG 03" thì bạn làm như sau:
Giả sử tiêu đề trong rpt_BangLuong bạn tạo bằng 1 label có tên là lbl_TieuDe thì ở sự kiện Report_Open bạn thêm vào lệnh sau:
lbl_TieuDe.Caption = "Bảng thanh toán lương thang " & forms("frm_InBangLuong")!cbo_Thang"


Mình sẽ gửi cho bạn sớm tool mẫu để bạn dễ hiểu.
Có gì chưa rõ bạn liên hệ với dongnamnb hay suynghidi nhé, chúng tôi sẽ hỗ trợ. chúc thành công:happy3:

Link down phần mềm mình làm mẫu để thõa mãn nhu cầu của bạn nè: http://danketoan.com/forum/showthread.php?p=134933#post134933

Note: nếu bạn ở Miền Trung mà đang làm việc ở Đà Nẵng thì gia nhập hội DanKetoan Miền Trung nhé: http://danketoan.com/forum/showthread.php?goto=newpost&t=78987
:ibbanana::ibbanana::ibbanana:
 
Sửa lần cuối:
Ðề: Muốn làm Report có Record source động

Tôi thấy các bạn làm cực quá, nên tôi góp một tay coi.
Các bạn có 12 table lương có cấu trúc giống nhau, vậy là khoẻ rồi.
Bây giờ các bạn cứ tạo một report dựa trên một table lương nào đó: luong01 chăng hạn.

Ở form điều khiển, bạn chọn tháng bằng một combo tháng.
Combo này có thuộc tính như sau:
Name: cbothang
Row Source type: Value
Row Source: 1;2;3;4;5;6;7;8;9;10;11;12

Một nút lệnh. Trong thủ tục sự kiện Click của nút lệnh này, bạn vào code như sau:

On Error Resume Next
DoCmd.OpenReport "tên report",acViewNormal, , , , cbothang
On Error Goto 0


Ở report, bạn sẽ làm một số công việc sau:
Ở design view, bạn cho một textbox ẩn, có tên là thang
Một text box khác chứa tiêu đề, control source của nó là:
="BẢNG LƯƠNG THÁNG " & thang
Vào thủ tục nè:

Private Sub Report_NoData (Cancel As Integer)
MsgBox "khong co du lieu de in"
Cancel = True
End Sub


Private Sub Report_Open(Cancel As Integer)
thang = RIGHT("0" & OpenArgs, 2)
RecordSource = "SELECT * FROM LUONG" & thang
Requery
End Sub

Xong rồi đó.
:thumbup:
 
Ðề: Muốn làm Report có Record source động

Rất cám ơn anh phatnq2002 và bạn suynghidi (vì thấy hình còn trẻ) đã giúp mình thực hiện được cái Report như ý muốn. Theo các bạn thì lưu bảng lương như vậy có ổn không?
-----------------------------------------------------------------------------------------
Anh phatnq2002 ơi, em thực hiện đoạn code trong report_Open bị lỗi ở tạ dòng lệng Requery
 
Sửa lần cuối:
Ðề: Muốn làm Report có Record source động

Rất cám ơn anh phatnq2002 và bạn suynghidi (vì thấy hình còn trẻ) đã giúp mình thực hiện được cái Report như ý muốn. Theo các bạn thì lưu bảng lương như vậy có ổn không?
-----------------------------------------------------------------------------------------
Anh phatnq2002 ơi, em thực hiện đoạn code trong report_Open bị lỗi ở tạ dòng lệng Requery

Bỏ câu đó đi cũng được. Không sao đâu.
Tại tôi lộn bên form, khi muốn refresh lại dữ liệu của form, phải dùng lệnh requery nó mới chịu.

Lưu dữ liệu như vậy chắc chắn là không hay lắm. Nếu số lượng nhân viên không nhiều lắm thì gom lại thành một bảng lương duy nhất thôi rồi filter theo tháng và năm để có cái bảng lương mình cần. Tiện nhiều thứ, kể cả tổng hợp quỹ lương của một năm, ...
 
Ðề: Muốn làm Report có Record source động

@suynghidi
@phatnq2002

Bạn ơi mình cũng đang tập làm một cái tương tự thế:
Table: T_Bophan ( MaBP, TenBP)
form: frmIndsBP, combo0

Ở bên Report mục Record Source mình đã tạo query lấy những mục cần thiết rồi, ở mục Criteria của TenBP mình đã nhập [forms]![frmIndsBP]![combo0]

Khi mình nhấp vào Report & query rồi nhập tên bộ phận mình cần lọc thì Ok
Nhưng khi mình ở form chọn bộ phận cần lọc thì lại không được.

Không biết mình làm sai chỗ nào. Mong các bạn giúp đỡ.

Thanks your regards !

P/S: Vì mình mới chỉ đang tập tành làm cái access nên chưa biết sử dụng code, chỉ hộ mình hướng trên thôi nhé :helpsmilie:
 
Ðề: Muốn làm Report có Record source động

@suynghidi
@phatnq2002

Bạn ơi mình cũng đang tập làm một cái tương tự thế:
Table: T_Bophan ( MaBP, TenBP)
form: frmIndsBP, combo0

Ở bên Report mục Record Source mình đã tạo query lấy những mục cần thiết rồi, ở mục Criteria của TenBP mình đã nhập [forms]![frmIndsBP]![combo0]

Khi mình nhấp vào Report & query rồi nhập tên bộ phận mình cần lọc thì Ok
Nhưng khi mình ở form chọn bộ phận cần lọc thì lại không được.

Không biết mình làm sai chỗ nào. Mong các bạn giúp đỡ.

Thanks your regards !

P/S: Vì mình mới chỉ đang tập tành làm cái access nên chưa biết sử dụng code, chỉ hộ mình hướng trên thôi nhé :helpsmilie:

Bạn gửi file lên để mọi người cùng down về nghiên cứu, làm và gửi lại cho bạn nhé. Cách chia sẽ file online thì SND đã có viết một bài hướng dẫn rồi, bạn tìm lại các bài viết của SND trong mục Tin học thường thức nhé. Rất vui nếu giúp được cho bạn. Hiện tại SND cũng đã chia sẻ 2 file tài liệu khá hay về Access tại Thư viện IT4DKT - http://suynghidi.homeip.net/IT4DKT.com/index.php?option=com_docman&task=cat_view&gid=5&Itemid=3 (Nếu bạn vào không được thì call 0914.617.170 để SND bật máy tính lên nhé, chú ý bạn đăng ký thành viên thì mới tải được - không cần xác nhận qua Emai - Đăng ký có ngay). Chúc bạn may mắn :cheers1::cheers1:
 
Ðề: Muốn làm Report có Record source động

Bạn gửi file lên để mọi người cùng down về nghiên cứu, làm và gửi lại cho bạn nhé. Cách chia sẽ file online thì SND đã có viết một bài hướng dẫn rồi, bạn tìm lại các bài viết của SND trong mục Tin học thường thức nhé. Rất vui nếu giúp được cho bạn. Hiện tại SND cũng đã chia sẻ 2 file tài liệu khá hay về Access tại Thư viện IT4DKT - http://suynghidi.homeip.net/IT4DKT.com/index.php?option=com_docman&task=cat_view&gid=5&Itemid=3 (Nếu bạn vào không được thì call 0914.617.170 để SND bật máy tính lên nhé, chú ý bạn đăng ký thành viên thì mới tải được - không cần xác nhận qua Emai - Đăng ký có ngay). Chúc bạn may mắn :cheers1::cheers1:

BAO cũng là thành viên sao tải không được vậy suynghidi :confuse1:
The page cannot be displayed
The page you are looking for is currently unavailable. The Web site might be experiencing technical difficulties, or you may need to adjust your browser settings.
Có ai bị vậy không ta :confuse1:
 
Ðề: Muốn làm Report có Record source động

Đây là file của mình ftp://123.18.113.46. Tài khoản Guest ( No password).

Bạn down về rồi xem hộ nhé :sweatdrop:. Nếu không vào được thì reply để mình bật máy :cheers1:.
 
Ðề: Muốn làm Report có Record source động

Hi hi, không ai viết dữ liệu kiểu để 12 bảng lương ở 12 table cả. Bạn nên gộp dữ liệu của các tháng vào 1 table. Sau đó dùng query để lọc dữ liệu. Ví dụ trong khi truy vấn tại cột tháng chỉ cần cần đặt giá trị "Thang can chon", tại cột năm để "Nam can chon' thì khi mở report(có sourse lấy từ query) nó sẽ bật nên 1 input box tháng can chon, nam can chon . Bạn chỉ cần điền thông số là ra thôi. Nhung đây mới là cách đơn giản, nếu muốn cao hơn và trực quan hơn bản phải dùng textbox, listbox hoặc combobox để chọn rồi dùng thuộc tính refresh để làm tươi lại dữ liệu khi truy vấn.
Bạn nên tìm các sample mẫu để đọc (Mấy cái này có sẵn trong bộ cài office) có quá nhiều chức năng để ta ngâm cứu rồi.
Good luck
 
Ðề: Muốn làm Report có Record source động

@suynghidi
@phatnq2002

Bạn ơi mình cũng đang tập làm một cái tương tự thế:
Table: T_Bophan ( MaBP, TenBP)
form: frmIndsBP, combo0

Ở bên Report mục Record Source mình đã tạo query lấy những mục cần thiết rồi, ở mục Criteria của TenBP mình đã nhập [forms]![frmIndsBP]![combo0]

Khi mình nhấp vào Report & query rồi nhập tên bộ phận mình cần lọc thì Ok
Nhưng khi mình ở form chọn bộ phận cần lọc thì lại không được.

Không biết mình làm sai chỗ nào. Mong các bạn giúp đỡ.

Thanks your regards !

P/S: Vì mình mới chỉ đang tập tành làm cái access nên chưa biết sử dụng code, chỉ hộ mình hướng trên thôi nhé :helpsmilie:

Bạn có thể chia sẽ file đang làm của mình TẠI ĐÂY - IT4DKT để anh em hội IT4DKT nghiên cứu giúp bạn. Chúc vui :ibbanana::ibbanana:
 
Ðề: Muốn làm Report có Record source động

bài của phatnq2002 rất hay, bạn có thể chỉ mình làm sao mà có dòng chữ việt đọc tổng tiền lương trong bảng lương không. VD:tổng:8.987.543 có ghi dưới dòng chữ:
Bằng chữ: Tám triệu chín trăm tám bảy nghìn năm trăm bốn ba đồng chẵn
thanks!
 
Ðề: Muốn làm Report có Record source động

Tôi thấy các bạn làm cực quá, nên tôi góp một tay coi.
Các bạn có 12 table lương có cấu trúc giống nhau, vậy là khoẻ rồi.
Bây giờ các bạn cứ tạo một report dựa trên một table lương nào đó: luong01 chăng hạn.

Ở form điều khiển, bạn chọn tháng bằng một combo tháng.
Combo này có thuộc tính như sau:
Name: cbothang
Row Source type: Value
Row Source: 1;2;3;4;5;6;7;8;9;10;11;12

Một nút lệnh. Trong thủ tục sự kiện Click của nút lệnh này, bạn vào code như sau:

On Error Resume Next
DoCmd.OpenReport "tên report",acViewNormal, , , , cbothang
On Error Goto 0


Ở report, bạn sẽ làm một số công việc sau:
Ở design view, bạn cho một textbox ẩn, có tên là thang
Một text box khác chứa tiêu đề, control source của nó là:
="BẢNG LƯƠNG THÁNG " & thang
Vào thủ tục nè:

Private Sub Report_NoData (Cancel As Integer)
MsgBox "khong co du lieu de in"
Cancel = True
End Sub


Private Sub Report_Open(Cancel As Integer)
thang = RIGHT("0" & OpenArgs, 2)
RecordSource = "SELECT * FROM LUONG" & thang
Requery
End Sub

Xong rồi đó.
:thumbup:

Hay đấy,Thanhks! phatnq2002 làm giúp dòng chữ trên form nhập hồ sơ: đây là HS thứ a/b (b là tổng số hồ sơ đã nhập =count(hoten), a là hồ sơ hiện tại đang nhập)
 
Ðề: Muốn làm Report có Record source động

Hay đấy,Thanhks! phatnq2002 làm giúp dòng chữ trên form nhập hồ sơ: đây là HS thứ a/b (b là tổng số hồ sơ đã nhập =count(hoten), a là hồ sơ hiện tại đang nhập)

Làm trên form thì "hơi phức tạp" bởi vì nếu đang hiệu chỉnh thì có thể lấy được số thứ tự của record hiện hành, nhưng nếu là dữ liệu mới thì chưa thể lấy được. Phải dùng mẹo một tý:

Giả sử bạn có textbox tongso: = COUNT(mahs) (hoặc COUNT(hoten) tuỳ ý bạn)

Bạn tạo một textbox lấy tiêu đề, ví dụ đặt tên là txtTieuDe.

Bạn sẽ làm 2 thủ tục sự kiện:

Sub Form_BeforeInsert(Cancel As Integer)
txtTieuDe.Value = "HO SO THU " & Val(tongso) + 1​
End Sub


Mục đích của thủ tục này là khi người dùng vừa nhập ký tự đầu tiên cho record mới trên form thì nhảy số liền. Không cho hiện tổng số vì tổng số lúc này chưa cập nhật. Nếu bạn muốn thì bạn đổi lại là:

txtTieuDe.Value = "HO SO THU " & Val(tongso) + 1 & "/" & (tongso +1)

Sub Form_Current()
On Error Resume Next
Me.RecordsetClone.Bookmark = Me.Bookmark
txtTieude.Value = "HO SO THU " & Me.RecordsetClone.AbsolutePosition + 1 & "/" & tongso
On Error GoTo 0
End Sub


Mục đích của thủ tục này là khi chuyển đến record nào thì hiển thị số thứ tự của record đó. Nếu đến record mới sẽ có lỗi vì không lấy được STT record, vì vậy phải có cặp On Error để bẫy lỗi bằng cách bỏ qua lỗi.

That's OK?
 

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Cách làm file Excel quản lý lãi vay

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top