Minh họa & Hướng dẫn

Ở đây có các bài viết và hình ảnh minh họa liên quan đến Access

Quản lý vật tư

đăng 19:18, 22 thg 7, 2016 bởi Ngoc Dang Dinh

Mình không phải dân chuyên môn kho hàng nhưng theo thiển nghĩ, mình quan niệm thế này
Trong quản lý kho hàng, để thuận tiện cho việc tính toán tồn kho người ta phân loại dư lày
1. Xác định đặc tính hàng hóa (để lâu được không hay là chỉ có thời hạn lưu kho nhất định)
Nếu là hàng có thời hạn lưu kho thì trong bảng danh mục loại hàng cần có thêm trường thời hạn lưu kho tối đa ... xx ngày

2. Mô tả nghiệp vụ xuất nhập kho
Nhập vào phải quản lý được
+ Ngày nhập
+ Số lượng nhập
+ Nơi chứa chấp

Xuất ra phải quản lý được tối thiều
+ Ngày xuất
+ Số lượng xuất
+ Xuất từ chỗ nào?

Báo cáo tồn kho lúc này chỉ đơn giản là
Tính tổng lượng nhập vào, trừ đi lượng xuất ra (có thể theo kho hay theo danh mục hàng hóa ...)
Cái này dùng Query dạng Groupby và các hàm Sum là xong.

Có nhiều người hay tính ngay tồn kho đưa vào 1 trường để sau này chỉ cần truy vấn ngày xuất gần nhất là biết còn bao nhiêu.
(Cách này tiện với các kho có nhiều hàng hóa khác nhau, số lượng lớn)

Cần nhớ là DLOOKUP, bản chất là hàm tìm kiếm trong bảng - như vậy nó chỉ có thể tìm chứ nó không thực hiện các biện pháp tính toán được.
Xem qua file ví dụ nhé...

Trả lời bài viết ...về crosstab report

đăng 02:47, 1 thg 9, 2015 bởi Ngoc Dang Dinh

http://thuthuataccess.com/forum/post-27700.html#pid27700
thunga25 Đã viết: ....
Bạn nào biết thì chỉ mình với, vì mình đang cần gấp, nhưng tìm mãi vẫn chưa biết cách.

Bài của bạn có mấy vấn đề sau:
1. CSLD của bạn thiết kế chưa chuẩn mực
+ bạn cần để chế độ Compact khi đóng csdl để nó đỡ phình to (nhấn Tool/Options/General - chọn Compact on Close)
+ Bảng Test của bạn chưa đáp ứng chuẩn Nomalize vì bạn để 2 trường Mã NCC và Tên dạng text lưu kèm số liệu. Cái này làm cho csdl to lên và khó quản lý.
+ Query crosstab của bạn thiết kế không đúng, chỉ cần Column Heading là Mã Nhà cung cấp hoặc tên còn phần rowheading với mã nhà cung cấp thì bỏ đi
+ Trường đơn giá phải có kiểu số liệu là Number/Double hoặc single nhé, không để kiểu text được.
2. Cách sửa chữa như sau
+ Sửa lại thiết kế bảng, tạo một bảng tblNCC trong đó như file đính kèm.
Người ta quản lý danh mục ncc dựa vào ID
+ Bảng test sửa lại, liên kết với bảng nhà cung cấp bằng 1 trường ID_NCC là xong, kiểu số.

3. Về vấn đề crosstab.
Do số lượng nhà cung cấp là bất định vì thế nó có thể lên đến hàng ngàn. Như vậy bạn phải giới hạn số nhà cung cấp hiển thị trong báo cáo. Muốn như vậy thì cần đưa ra tiêu chí lựa chọn số nhà cung cấp cần hiển thị, ví dụ tối đa là bao nhiêu (chẳng hạn 10) vì khổ giấy A4 chỉ cho in đến thế.
Sau đó sẽ tiếp tục in tiếp với các nhà cung cấp khác.

Giải pháp đưa vào báo cáo.
1. Thiết kế 1 báo cáo chuẩn với các trường chuẩn hiển thị tên hàng, còn lại là khoảng 10 textbox/label rỗng có tên theo chuẩn chẳng hạn
lb1, lb2 ...lb10, txt1, txt2 ...txt10.

2. Thiết kế thủ tục nạp thông tin cho các txt và lbl dựa vào các trường hiển thị trong crosstab query.
Thủ tục này phải đặt trong mục Report_Open.
các thứ như sau:
Truy vấn crosstab qry_price_compare (đã được sửa lại) làm nguồn cho báo cáo
... bạn có thể xem thêm đoạn code

Mã:
Private Sub Report_Open(Cancel As Integer)
    ' Thu tuc de dua so lieu vao bao cao va dieu chinh ten cot
    Dim SqlStr As String
    Dim rs As Recordset
    Dim iCol As Long, i As Long
    SqlStr = "Select * from " & Me.RecordSource & ";"
    Set rs = CurrentDb.OpenRecordset(SqlStr)
    ' Cot 1 luon la ten hang, bat dau tu cot 2 se la ma nha cung cap
    With Me
        For i = 1 To rs.Fields.Count - 1
            .Controls("lbl_cr_" & i).Visible = True
            .Controls("lbl_cr_" & i).Caption = GetColumnName(Val(rs.Fields(i).Name))
            ' doi voi textbox thi dat ten vung so lieu luon
            ' vi ten textbox la so nen phai co them ham chuyen gia tri sang chu
            .Controls(CStr(i)).Visible = True
            .Controls(CStr(i)).ControlSource = rs.Fields(i).Name
            ' dinh dang so lieu
            .Controls(CStr(i)).Format = "Standard"
            .Controls(CStr(i)).DecimalPlaces = 0
        Next
        ' Cac doi tuong khac thi giau di
        While i <= 9
            .Controls("lbl_cr_" & i).Visible = False
            ' doi voi textbox thi dat ten vung so lieu luon
            .Controls(CStr(i)).Visible = False
            i = i + 1
        Wend
    End With
    rs.Close
    DoCmd.Maximize
End Sub

Tôi cũng bổ sung công cụ vẽ đường kẻ trong báo cáo. bạn chỉ cần gọi thủ tục như trong báo cáo. Khi thiết kế cần có một nhãn là lb1 nằm ở ngoài cùng bên trái làm điểm chuẩn canh lề.
Các nhãn dùng làm chuẩn để kẻ dòng đều phải được đặt tag là 1

1-2 of 2