Liên quan đến CSDL Access nhiều hơn Excel nhưng vẫn phải hỏi (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

vietskynet

Thành viên mới
Tham gia
1/4/08
Bài viết
17
Được thích
1
Em đang tập làm phần thống kê xuất nhập tồn cho 1 công ty bán hàng tạp hóa , mỗi tháng phải đưa ra 4 dữ liệu sau đây

Tồn đầu kỳ, nhập trong kỳ, xuất trong kỳ và tồn cuối kỳ của từng mặt hàng

Về tồn cuối thì ko bàn vì chỉ là kết quả 3 cột kia thôi.
Em muốn hỏi cách thống kê 3 cột kia sao cho hay nhất

Cấu trúc chính trong CSDL là 1 bảng "Hóa Đơn Nhập" , "Hóa đơn xuất", "chi tiết hàng nhập" và chi tiết hàng xuất

Như vậy nếu em muốn truy vấn tồn đầu kỳ thì em sẽ tính Sum tất cả các đợt nhập hàng bắt đầu từ tháng trước, sau đó tính Sum hàng nhập và hàng xuất trong tháng
Vấn đề em đặt ra là
1- Có thể thống kê như vậy bằng Access ko (1 query truy vấn 3 dữ kiện đó), hay bắt buộc phải nhờ đến Excel
2- Doanh nghiệp hoạt đống mới vài tháng thì việc quét dữ liệu tồn đầu kỳ không khó nhưng hoạt động 6-7 năm mà truy vấn kiều này thì hơi phí tài nguyên, không có giải pháp gì ko
3- Cuối cùng nhưng không kém quan trọng, em chia ra nhập và xuất hàng thành 2 mảng khách nhau, như vậy có hợp lý không, hay chỉ nên gom chung vào 1 bảng

Em cám ơn, mới bước chân vào thống kê em đã gặp bài toán mệt bão nên phải hỏi các trùm
 
Lần chỉnh sửa cuối:
1. Query của Access thực tế không được lưu như 1 bảng tính toán. Nó chỉ được lưu như 1 câu lệnh SQL, không phí tài nguyên. Khi nào gọi đến nó, Access mới tính toán và hiện lên màn hình. Tuy vậy, với dữ liệu nhiều, sẽ tính toán hơi chậm, đương nhiên.

2. Nếu em đã học Access, thì tất phải biết sơ bộ về CSDL, vậy thì nhập xuất nên để chung. Thậm chí số lượng, thành tiền cũng chung. Để phân biệt chúng trong bảng dữ liệu chính, sẽ cần 1 field Loại chứng tử.

3. Nhất thiết nên có bảng Danh mục hàng hoá, kết hợp số dư đầu kỳ luôn (có thể bằng không toàn bộ). Số dư đầu kỳ (giả sử tháng 4) không chỉ Sum nhập từ đầu (giả sử đầu năm) đến hết kỳ tháng
3, mà là sum nhập trừ sum xuất từ đầu năm đến hết tháng 3. Kết quả có thể lưu như 1 query 3 tháng. Nếu chịu khó thì làm từng query như vậy cho mỗi tháng, cuối tháng này làm đầu tháng sau.
Làm từ đầu năm cũng có điểm lợi là có thể tuỳ chọn lập báo cáo cho kỳ không cố định thí dụ chỉ tính trong khoảng thời gian từ 16/02 đến 20/03 với 2 mốc thời gian tuỳ ý.
Chọn cách nào là theo yêu cầu riêng của doanh nghiệp và cả yêu cầu của sếp.

Nói không hết được, chỉ bấy nhiêu, em cố làm nhé.
 
Tại vì em thấy có nhiều chương trình quản lý kho chia thành 2 mảng nhập và xuất khác nhau
Có 1 bảng dành cho phiếu nhập và 1 bảng dành cho phiếu xuất
Nhưng em ko biết có nên làm vậy ko hay là phiếu nhập xuất cứ gộp chung 1 bảng là được

Vậy giờ em thử làm báo cáo theo hướng này
Vì dụ thống kê cho tháng 3 vừa rồi
- Truy vấn lấy dữ liệu hàng tồn = tổng nhập - tổng xuất (tính từ đầu tới năm tới cuối tháng 2)
- Export ra Excel thành 1 cột số liệu
- Truy vấn tổng nhập, tổng xuất trong tháng 3 --> Export thành cột tổng nhập trong excel
-Sau đó dùng các phép toán trong Excel tính tồn cuối tháng 3
 
Lần chỉnh sửa cuối:
Vậy em cứ thử đi, rồi thắc mắc gì thì hỏi nhé. Còn cái sổ chi tiết vật tư từng mặt hàng nữa đó. Sổ này làm report trong Access hay hơn, vì Excel đòi mỗi sổ 1 trang, không như Access lưu như 1 report duy nhất.
 
1. Query của Access thực tế không được lưu như 1 bảng tính toán. Nó chỉ được lưu như 1 câu lệnh SQL, không phí tài nguyên. Khi nào gọi đến nó, Access mới tính toán và hiện lên màn hình. Tuy vậy, với dữ liệu nhiều, sẽ tính toán hơi chậm, đương nhiên.

2. Nếu em đã học Access, thì tất phải biết sơ bộ về CSDL, vậy thì nhập xuất nên để chung. Thậm chí số lượng, thành tiền cũng chung. Để phân biệt chúng trong bảng dữ liệu chính, sẽ cần 1 field Loại chứng tử.

Đồng ý quan điểm này của bác

3. Nhất thiết nên có bảng Danh mục hàng hoá, kết hợp số dư đầu kỳ luôn (có thể bằng không toàn bộ).

Làm như vậy thì khi lập query lại phải tốn thêm một query nữa. Thường thì tôi làm theo cách nhập tồn đầu kỳ như một phiếu nhập thông thường với thời gian là ngày cuối cùng của kỳ niên hạn trước(ngày trước, tháng trước, qúy trước, năm trước). Như vậy query tính số dư đầu kỳ sẽ nhẹ hơn => tính toán nhanh hơn. [/quote]

Làm từ đầu năm cũng có điểm lợi là có thể tuỳ chọn lập báo cáo cho kỳ không cố định thí dụ chỉ tính trong khoảng thời gian từ 16/02 đến 20/03 với 2 mốc thời gian tuỳ ý.
Chọn cách nào là theo yêu cầu riêng của doanh nghiệp và cả yêu cầu của sếp.

Ok với bác điều này nhưng nên làm theo kiểu báo cáo với thởi gian bất kỳ thì áp dụng vào kiểu báo cáo nào cũng xài được
 
Trong tờ thống kê mẫu mà boss kiu làm theo em thấy có 1 cột đơn giá. hình như là họ lấy tổng tiền chia cho tổng hàng
VD:
Mahang Tenhang soluong giatri dongia
HUT Hu tieu 05 25000 5000
MAL Mi an lien 02 36000 18000

Nhưng khi xem lại hóa đơn thì đơn giá có thể tăng hoặc vài đợt trong cùng kỳ, cho nên nếu lấy tổng giái trị chia cho tổng hàng thì sai, không biết trong trường hợp này thì lấy đơn giá kiểu nào, vẫn lấy trung bình hay chọn cái cao nhất trong kỳ
 
Rõ ràng là khi nhập thì phải chính xác theo chứng từ nhập, nhưng xuất là tính theo cách của đơn vị mình: NTXT, NSXT, BQgia quyền. . . tất cả là theo yêu cầu riêng của đơn vị. Em cứ làm theo yêu cầu của Boss.
 
Em có 1 mainform để nhập thông tin về hóa đơn
1 subform lưu thông tin về các mặt hàng của hóa đơn

và ở phần footer của subform em có 1 text box với source là
=Sum((dongia-dongia*Forms!mainform!chietkhau/100)*soluong) - Cột chiết khấu nằm ở Main Form

Nhưng báo lỗi là #Error

Em đã thử cách thứ 2 là cho 1 textbox vào datasheet của subform với giá trị
[Chiết khấu hàng] : (dongia-dongia*Forms!mainform!chietkhau/100)*soluong
Cái này hiển thị OK -=09=
Nhưng khi quay xuống footer tính sum của [Chiết khấu hàng] thì lại ra #error
---------------
Bắt đầu nghiên cứu
Em tạo 1 textbox trong Datasheet - Giá trị là 2
Sau đó xuống footer tính Sum xủa textbox ==> #Error
Nhưng nếu tính sum của 1 cột VD ; Sum (soluong) thì ko Error

Em nghĩ em đã hiểu sai gì đó chỗ này
 
Nếu textbox là [Chiết khấu hàng] : (dongia-dongia*Forms!mainform!chietkhau/100)*soluong
Thi sum ở footer là =sum((dongia-dongia*Forms!mainform!chietkhau/100)*soluong)
[Chiết khấu hàng] không phải là 1 field dữ liệu, không tính trực tiếp được.

Nói thêm để sau này có dịp dùng:
Giả sử em muốn lấy 1 giá trị sum nào đó của subform (trong textboxA) vào 1 field của main form (tức là ngược với cái em đang làm), thì cấu trúc sẽ không giống bình thường:
=subform.Form!textboxA
 
Thật trớ trêu
Em không thể gán giá trị
Forms!hoadon!chietkhau vào hàm sum ở footer được (hoadon là tên Form chính)
Tuy nhiên ở vùng Datasheet gán vào thì nó hiện ra tốt
=Sum(([dongia]-[dongia]*Forms!hoadon!chietkhau/100)*[sotien]) --> Error
=Sum(([dongia]-[dongia]*2/100)*[sotien]) ---> Good

Cái CSDL của em đang làm dạng như trong Attachment
Vì cái kia lớn quá em ko post được
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Lỗi to đùng:
- dữ liệu soluong và dongia trong table chitietbanhang là kiểu text. --> không tính toán được
- textbox có tên sotien, lại có data source là số lượng
- Khi subform tính sum không ra (tính text không được) sẽ error --> làm sao mainform lấy giá trị đó mà không error?

Nói thêm:
-sau khi sửa loại dữ liệu thành number, các textbox bị lỗi nên delete và làm lại, không nên cố sửa vì một số thuộc tính của nó bị đặt theo dữ liệu kiểu text
- tốt hơn nên có 1 textbox tính thành tiền trong subform, tính luôn sum(thanhtien) ở subform footer, rồi gán thành tiền của mainform với giá trị này.
 
Em đã sữa lại thuộc tính
Del hết dữ liệu và textbox , sau đó nhập lại data khác
Kết quả vẫn bị

Em nhận thấy chi tiết mới về lỗi

=Sum(dongia*soluong*Forms!hoadon!chietkhau) --> Error
=Sum(dongia*soluong)*Forms!hoadon!chietkhau --> OK
=Sum(dongia*soluong) --> OK
=Sum(dongia*soluong*2) --> OK

Vậy em nghĩ có thể loại trừ được trường hợp sai kiểu dữ liệu sai và viết tên textbox sai
Em đã chỉnh lại và đơn giản hóa như file đính kèm, ai tốt bụng thử chạy trên máy xem có bị giống em ko hay là office của em có vấn đề
 

File đính kèm

Chả tốt bụng gì đâu. Thực ra nghe cái câu tốt bụng hết muốn trả lời.
Coi như nhắc nhở chú em 1 lần .
Xem file.
Tuy ra kết quả trên form nhưng nếu không có 1 field nào của master hay detail lưu kết quả thì cũng chỉ để lâu lâu buồn mở form lên ngó chơi.
Thêm nút Refresh, nếu không, thay đổi tỷ lệ chiết khấu nó cũng trơ trơ.
 

File đính kèm

Sorry, em lỡ lời
Thật ra em nói vậy vì lúc nhiều lúc em post file mà ko ai tải về vì sợ virus (nếu nói câu No Virus thì lại càng đáng nghi hơn nên đàn cầu xin lòng thương xót của mọi người :-= )

Qua Form mà Mod gửi lại thì chắc em chỉ còn 1 biện pháp là thêm 1 cột chiết khấu cho mặt hàng mà thôi (chịu dư thừa dữ liệu nhưng chính xác)

Vì công thức là trog ô tổng của Mod là = Sum(soluong*dongia)*chietkhau
Là tính sum rồi mới nhân, nhưng ngặt cái là nhà cung cấp nhân chietkhau vào đơn giá rồi làm tròn sau đó mới sum
Có 1 lần em thử tính như vậy thì bảng tính và hóa đơn bị sai lệch
Hóa đơn : 512,660
Bảng tính : 512,658.5 (có làm tròn cũng chỉ ra 59)
Lý do là từ đơn giá đã được nhân và làm tròn cùng chiết khấu, cho nên em mới phải tìm cho bằng được cách nhân từ ngay đơn giá hoặc thành tiền
Bây giờ thì chắc đành thêm 1 cột chiết khấu vào kế bên mặt hàng !$@!!!$@!!!$@!!
 
Bây giờ thì chắc đành thêm 1 cột chiết khấu vào kế bên mặt hàng
Lẽ ra phải như vậy từ đầu. Tưởng em biết rồi nhưng lược bớt để up file lên nên không nói.
Xem thêm về form, nút lệnh, cấu trúc dữ liệu ở đây: http://www.giaiphapexcel.com/forum/showthread.php?p=55076#post55076 bài số #3. Xem form nhập liệu nhập xuất kho, chỗ VAT và tỷ lệ VAT, sửa lại ra chiết khấu.
Nếu còn lúng túng chỗ nào, thì cứ hỏi, với điều kiện:
- Không cầu xin thương xót
- Không gọi là Mod
- Phãi nhấn thanks
Nếu không thì bo xịt, nghỉ chơi.
 
Nếu không thì bo xịt, nghỉ chơi.
^_^ Chết em,
Thật ra em ko biết gì về kế toán, chỉ tập tành viết chương trình access nên nghĩ đơn giản, để có tính ràng buộc cao ta chỉ cần làm chiết khấu ở hóa đơn là đủ

Khó nhất trong bài tập thực tế em đang làm là vấn đề làm tròn, mỗi hóa đơn có cách làm tròn đa dạng khác nhau
VD
Cty A : 569.396,1 = 569.397
Cty B : 569.396,1 = 569.396
Em định chọn giải pháp tiêu cực là nhập y hóa đơn nhưng như thế thì bảng tính của mình sẽ bị mất đi mối liên hệ chặt chẽ giữa các cột và công thức, không biết em có nên thêm 1 cột là cách thức làm tròn riêng cho mỗi đối tượng công ty ko

P/S : cái phần nhấn thanks lâu nay em ko thấy vì em đọc bài lúc ko đăng nhập sau đó nhấn trả lời thì mới đăng nhập, giờ nhấn bù !!!!
 
Mối quan hệ chỉ cần chặt chẽ giữa các table với nhau để có những ràng buộc về dữ liệu. Còn giữa các field đâu có ràng buộc gì ghê gớm?
Gợi ý:
Khi đã có các field cần thiết và có các textbox trên form, thì hãy làm như sau:

PHP:
Sub Soluong_AfterUpdate
Thanhtien = Round(Soluong*Dongia*Form!hoadon.chietkhau/100,0)
End sub

PHP:
Sub Dongia_AfterUpdate
Thanhtien = Round(Soluong*Dongia*Form!hoadon.chietkhau/100,0)
End Sub

Để cho Access làm tròn tương đối trước, nếu số này chênh lệch với số trên hoá đơn 1 vài đồng thì sửa, không thì thôi.

Nhất là phải nhớ có nút Refresh tổng số trên form hoadon mới cập nhật. Số này có thể dùng để lập report phiếu nhận, phiếu xuất in ra tại chỗ, không cần lưu vì ta có thể tính tổng bất cứ lúc nào bằng query cho các báo cáo khác.
 
Bạn có thể dùng thêm phương thức Requery cho Form để khi có sự thay đổi về dữ liệu thì nó tự động hiển thị lên luôn khỏi làm nút Refresh.

Con cọp con
 
concop đã viết:
Bạn có thể dùng thêm phương thức Requery cho Form để khi có sự thay đổi về dữ liệu thì nó tự động hiển thị lên luôn khỏi làm nút Refresh.

Trong file cụ thể này, nếu 1 textbox không là dữ liệu của bất kỳ 1 field nào dù của Master hay của Child, hoặc Data source của form là table, không phải query, thì ReQuery không có tác dụng. Nút Refresh thực tế là sử dụng phương thức Recalc hoặc Refresh:

Forms!hoadon.Recalc
hoặc
Forms!hoadon.Refresh

Nhưng khi đưa method Recalc hoặc ReQuery vào các sự kiện AfterUpdate, thì sau đó Focus sẽ nhảy về control mặc định, phải dời focus về lại chỗ muốn nhập liệu tiếp.
Nếu dùng nút thì khi nào xong xuôi mới refresh 1 lần.
 
Lúc mình thay đổi ở Subform thì hình như mainform cũng tự thay đổi. Tuy nhiên vài trường hợp phép tính lớn, các đối tượng sẽ tính với các tốc độ khác nhau nên có vài lần tổng tiền em ra 0 vì các chiết khấu này nọ chưa tính xong, trong CSDL thật có em có 1 nút Tính tiền (công dụng như anh nói ), ngoài ra em cũng phải sửa lại thứ tự các phép tính như tổng tiền hàng --> Khuyến mãi --> chiết khấu ....-> Tổng tiền để chắc ăn tổng tiền ra kết quả đúng
Nhưng có 1 vấn đề là việc thay đổi dữ liệu ở mainform. vì phát sinh chiết khấu cho từng mặt hàng nên khi em thay đổi chiết khấu ở Main thì các record tại Sub cũng phải thay đổi. Nếu mình chỉ gán "subform!field = value" thì em chỉ thấy record đang được focus mới thay đổi. Lúc trước em hay giải quyết bằng cách dùng lệnh query update khi biến cố AfterUpdate. Không biết đây có phải là cách duy nhất ko

Hình như Access ko làm tròn theo kiếu từ 0.5 trở lên là tròn lên
Nhưng cái hóa đơn em đang làm hình như là tròn xuống (chả hiểu quy các làm tròn chính thức của nó là sao -=09=-=09=)

Như vậy thì cần viết hàm mới hay là có thể tùy chỉnh hàm Round trong Access lại bây giờ

Nếu viết hàm mới thì anh check dùm em xem như vậy có lỗi gì ko, hàm này dùng đến bây giờ vẫn ổn nhưng nếu dùng hàm gốc do Access thì vẫn hay hơn

Function lamtron(so As Double) As Double
Dim sodu As Double
Dim num As Double
num = Int(so)
sodu = so - num
If sodu > 0.5 Then
num = num + 1
Else
num = num
End If
lamtron = num
End Function
Ban đầu em gán cho biến Num là Integer, bị lỗi Overflow (sau mới phát hiện là đang tính toán với tiền VND nên đâu có dùng Interger được), tuy nhiên em ko biết gán cho nó là Double có phí ko
 
Chỉnh sửa lần cuối bởi điều hành viên:
Function lamtron () là làm tròn lên.
Hàm Round() của Access là làm tròn trên 5 dưới 4
Còn cách làm tròn của các anh các chị viết hoá đơn là muôn hình muôn vẻ, có khi tròn lên, có khi tròn xuống, có khi tròn đến hàng chục không chừng. Em xem hoá đơn tiền điện và tiền điện thoại thì biết, làm tròn bằng phần mềm đấy, mà ba hồi tròn lên, ba hồi tròn xuống.
Vậy không nên tự làm khổ mình hơn nữa, lám tròn theo Access là ổn rồi.
 
Cho em hỏi là vì mỗi tháng có thể có những mặt hàng được bán là khác nhau cho nên khi thống kê xuất nhập tồn, bắt buộc mình phải nhập lại thủ công chỉ số tồn của từng mặt hàng trong Excel để tính phải ko anh, chắc ko thể dùng query truy vấn rồi paste cột qua excel được
 
Cho em hỏi là vì mỗi tháng có thể có những mặt hàng được bán là khác nhau cho nên khi thống kê xuất nhập tồn, bắt buộc mình phải nhập lại thủ công chỉ số tồn của từng mặt hàng trong Excel để tính phải ko anh, chắc ko thể dùng query truy vấn rồi paste cột qua excel được

Bạn dùng lệnh TransferSpreadsheet của Access để chuyển dữ liệu của một table hay một query ra file Excel. Câu lệnh sau đây là để chuyển dữ liệu từ table PhatSinh ra file Excel "PhatSinh.xls" trong thư mục ThucHanh của ổ đĩa E
Mã:
Sub ChuyenraEx()
     DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "tblPhatSinh", "E:\ThucHanh\PhatSinh.xls"
End Sub
Thân
 
Chào AnhPhuong,
Tôi thường dùng câu lệnh sau hơn:
DoCmd.OutputTo acOutputQuery, QueryName, acFormatXLS, "Filename.xls", True

Trong Access 2007 có thể Export nhiều query ra 1 file Excel nhiều sheet, nhưng tôi chưa thử bằng code. Anh đã thử chưa?
 
Việc xuất dữ liệu từ Access qua Excel theo em có thể dùng nhiều phương thức khác nhau. Giống như A.Phương và A.Mỹ đề cập ở trên.
Ngoài ra, theo em thì mình có thể dùng các công nghệ sau này như DAO, ADO, ADO.NET. Việc báo cáo xuát ra sẽ theo định dạng mình muốn.

Lê Văn Duyệt
 
Em thấy bản thống kê mẫu thống kê theo mặt hàng, sau đó em kiểm tra lại thống kê theo hóa đơn thì thấy tổng tiền bị chênh lệch, do là bên hóa đơn tổng tiền đã được nhân với VAT
Bos nói cứ tính kiểu cũ sau đó lấy tổng tiền nhân VAT kiểm tra lại vì boss bảo bên kia sẽ tính lại VAT và các thứ linh tinh gì khác -+*/-+*/
Nhưng khi xét lại trong đống hóa đơn thì lòi ra 1 cái VAT 5%, những cái còn lại là 100%, như vậy là bắt buộc phải cộng VAT khi thống kê theo hàng chứ đâu có để đến cuối mới nhân VAT ????
 
Sao em nói "Bây giờ thì chắc đành thêm 1 cột chiết khấu vào kế bên mặt hàng "?
Vậy thì thêm 1 field nữa tính VAT. có vậy cũng hỏi!
Còn nữa: thống kê công nợ mới có VAT, thống kê hàng tồn không có VAT.
Công nợ dựa trên hoá đơn, mỗi hoá đơn chỉ có 1 loại thuế suất, --> mỗi hoá đơn chỉ cần tổng VAT thôi. Tổng này nằm trong dữ liệu Master
Tuy vậy thêm 1 field trong Child cũng không ảnh hưởng gì, vào form cho nó tự cộng xuống tổng.
 
Vậy thực chất tổng tiền thanh toán của hóa đơn phải tính theo công thức là tổng của tiền mỗi mặt hàng đã nhân VAT của hàng đó
Vậy mà từ trước giờ em toán tính tiền hàng xong mới nhân VAT, so với hóa đơn thấy đúng nên cứ làm hoài @!##
Như vậy nếu có chiết khấu và VAT thì ta sẽ tính như vậy
Mã:
 Thành tiền =soluong*((dongia-dongia*chietkhau/100)+(dongia-dongia*chietkhau/100)*VAT/100))
Hay
Mã:
 =soluong*dongia*(1-chietkhau/100)*(1+VAT/100)
+-+-+-++-+-+-++-+-+-++-+-+-+
 
Lần chỉnh sửa cuối:
Không không, VAT 1 field riêng. Thành tiền không VAT là giá nhập kho, Thành tiền cộng VAt là công nợ phải trả. Sẽ phải dùng nó để tính toán riêng sau này.
Vậy sẽ có 2 field:
thanhtien=dongia*soluong*(1-forms!hoadon.chietkhau/100)
tienVAT=thanhtien*tsVAT hoặc = thanhtien*forms!hoadon.tsVAT)

Trong Query nhập kho lấy field thanhtien, Trong Query công nợ lấy 2 field cộng lại.

Hay là em đưa công trình của em lên kèm yêu cầu, anh xem cấu trúc dữ liệu cho.
Các yêu cầu cần có để thiết kế CSDL:
- Cần tính nhập kho, đương nhiên
- Có tính giá xuất kho không? theo PP nào?
- Xuất kho bán có thuế VAT không? có chiết khấu không? Giá bán 1 loại hay nhiều loại giá? VAT 1 thuế suất hay nhiều thuế suất?
- Tính tồn đầu theo đầu năm hay theo tháng hay theo kỳ không cố định?
- Có phải theo dõi công nợ người bán không?
- Có phải theo dõi công nợ người mua không? Có phân loại KH hay không?
- Báo cáo NXT có cần giá trị hay chỉ cần số lượng? Có cần sổ chi tiết 1 mặt hàng không? Có giá trị không hay chỉ cần số luợng?
- Liệt kê các loại báo cáo cần phải thực hiện kèm mẫu nếu là mẫu đặc biệt. Mẫu thông thường thì khỏi.
 
Em cũng chưa bao giờ thực hiện cái này cả, em mới tập thôi nên cũng ko biết các thứ như công nợ và VAT này nọ T_T, mấy cái tiêu chuẩn trên để em hỏi lại boss xem
Cụ thể là boss đưa cho em 1 tờ giấy và bảo làm nguyên mẫu như tờ giấy đó cho các kỳ sau luôn
Mẫu tờ giấy bao gồm
Mã Hiệu+Tên Hàng+Đơn vị+S.Lượng(TĐK)+Giá trị (TĐK)+S.Lượng(NTK)+Giá trị (NTK)+S.Lượng(XTK)+Giá trị (XTK)+S.Lượng(TCK)+Giá trị (TCK)+Đơn giá
Mỗi tháng boss đưa 1 đống hóa đơn tháng đó, em nhập và thống kê ra 1 tờ mà tên gọi theo tờ mẫu là SỔ TỔNG HỢP XUẤT TỒN KHO

Hôm qua em hỏi boss có cộng VAT ko, boss cũng lưỡng lự tính toán gì đó rồi mới nói thôi khỏi. Theo em thì chắc boss cũng phụ thuộc vào bên công ty kế toán hay thuế gì đó chứ ko hiểu nhiều về kế toán, vì cả chục năm rồi hình như bây giờ cái đại lý của boss mới đổi thành công ty, boss cũng ko quen với các nguyên lý và hoạt động của máy tính **~****~****~**
Xui thật,

Em đã làm như anh là tạo 1 bảng danh mục hàng hóa với 1 field là Tồn kho, vậy khi nhập hay edit số lượng hàng trong hóa đơn thì đồng thời ta cũng tăng hay giảm đơn vị tồn của mặt hàng đó phải ko ???
 
Chỉnh sửa lần cuối bởi điều hành viên:
khi cần lập báo cáo tháng 3, em sẽ lập 1 query từ DMHH, chi tiết NX, điều kiện lọc là ngayct< 01/03/2008, lấy tổng nhập và tổng xuất , tạo 1 field mới tính ra tồn cuối:
toncuoi02 = tondau + sumnhap - sumxuat. Query này lưu lại giả sử TonCKtruoc.
Sau đó làm 1 query khác từ TonCKtruoc lấy số tồn, chi tiết NX lấy tổng nhập và xuất theo đk lọc ngayct between 01/03/2008 and 31/03/2008. Cũng như trên tạo 1 field mới tính số tồn cuối kỳ báo cáo (TonCKBC).
2 tham số ngày đầu kỳ & cuối kỳ báo cáo có thể chọn trên form. Giả sử trên form1 (chọn kỳ báo cáo) có 2 textbox hoặc calendar tên date1 và date2:
Điều kiện lọc của Query thứ nhất:
Ngayct< Forms!Form1.Date1
Điều kiện lọc của Query thứ hai:
Ngayct Between Forms!Form1.Date1 And Forms!Form1.Date2
Nói ít ráng hiểu nhiều.
 
Em đã làm gần giống như vậy rồi, chỉnh lại tí nữa là xong
Em vẫn chưa hiểu làm sao để cho hai cái
TonCKtruoc và TonCKBC có cùng số mặt hàng cả
Vì khi em chi xuất từ DMHH và chi tiết NX (bằng lệng group by Mã Hàng) thì ở kỳ trước có những mặt hàng mà kỳ sau ko có và ngược lại, như vậy khi em xuất sang excel em không thể cho nó bind từ trên xuống được
Hiện nay em xử lý tình huống này bằng cách
1. Truy vấn tất cả các mặt hàng rá list . Sau đó dùng MS Excel Object xuất sang cột Mã Hàng và Tên Hàng Hóa bên Excel
2. Truy vấn dữ liệu Tồn CK Trước, sau đó cứ mỗi record em cho dò theo mã hàng từng dòng bên Excel, nếu dò đến dòng có mã hàng trùng thì cho dữ liệu vô ô đó ngay
3. Truy vấn dữ liệu Tồn CK Sau, sau đó thì làm y chang bước 2
Kết quả chạy đúng nhưng như vậy có thừa về mặt thuật toán ko ???

ERROR.jpg


* Những mặt hàng có số 0 chính là những mặt hàng sau khi truy vấn từ danh mục hàng hóa và chi tiết nhập xuất nó ko có (vì nó ko nhập trong kỳ đó nên khi truy vấn dùng group by mã hàng sẽ ko thấy mặt hàng này), dẫn đến khi cho xuất dữ liệu mà ko kiểm tra coi đúng dòng mã hàng ko sẽ bịsaii
 
Lần chỉnh sửa cuối:
Khi truy vấn lấy TonCKtruoc hay lấy TonCKBC đều làm theo 1 cách sẽ được DS dài như nhau:
Chọn Join type (loại quan hệ) giữa DMHH và DataNX là Include All Record in DMHH and only those from DataNX where the joined field are equal.
Như vậy sẽ lấy mọi mã hàng dù có tồn đầu hoặc nhập xuất hay không. (trong cả 2 query)
Bảo đảm DM 2 query bằng nhau về số luợng mã hàng.

Chú ý nếu mặt hàng có tồn đầu, không nhập hoặc không xuất sẽ không tính được (ra kq zero) vì sum(slnhap) hoặc sum(slxuat) bị null. Giải quyết bằng cách:
PHP:
 SLToncuoi = Tondau + IIf(sum(slnhap)>0,sum(slnhap),0) - IIf(sum(slxuat)>0,Sum(slxuat),0)
Tương tự cho field TTToncuoi
 
Cho em hỏi 2 vấn đề nữa

Thứ nhất là nếu một ngày đẹp trời trong 1 cái hóa đơn nào đó nó ghi " Trừ tiền nợ tháng trước 200.000", hay "thấy mặt thằng mua thấy ghét cộng vào 200.000" (cái này thì ko có, em chỉ ví dụ thôi ^^), thì các khoảng tăng hay giảm đó mình xử lý ra sao, hay là mình cứ cộng thủ công rồi điền vào ô tổng tiền, và các khoản như thế có tính VAT hay ko

Thứ 2 là khi em tính xuất nhập tồn về số lượng và số tiền thì em nên tính ra sao. Số lượng hàng thì không nói vì chỉ cần trừ là ra. Còn về tiền bán thì nhập giá khác, xuất giá khác, lúc báo vào tồn cuối thì nên cho công thức tính tiền thế nào
Cám ơn
 
1. Về hoá đơn:
- Trừ nợ không bao giờ được phép trừ trên hoá đơn. Chỉ có chiết khấu, giảm giá mới ghi trên hoá đơn. Lúc đó sẽ trừ vào giá từng mặt hàng.
- VAT là số thực tế ghi trên hoá đơn, dù tổng tiền là bao nhiêu, có bị trừ vì các lý do trên hay không.
2. Giá xuất phải tính trong Query: Nếu tính giá bình quân gia quyền định kỳ:
Mã:
giabq=(IIf(ttDK>0,ttDK,0)+IIf(Sum(ttnhap)>0,Sum(ttNhap),0))/
(IIf(slDK>0,slDK,0)+IIf(Sum(SlNhap)>0,Sum(SlNhap),0))
Giá bq giữa kỳ và cuối kỳ có thể khác nhau, và kỳ này kỳ khác cũng có thể khác nhau, nhưng báo cáo chỉ in cuối kỳ nên không lo.

3. Tạo 1 field riêng để lọc:
Mã:
 Loc= SlDK+Sum(SlNhap)+Sum(SlXuat)
hoặc
Mã:
 Loc= SlDK*Sum(SlNhap)*Sum(SlXuat)
- Đk lọc Loc > 0
- Visible = False

Mục đích là loại những mặt hàng không dùng đến, không tồn đầu, và không nhập xuất. ngoài ra tránh được lỗi #DivBy0 do slDK + Sum(SlNhap) = 0
 
Khi có giá bq rồi thì tính thành tiền xuất phải làm tròn:
ttxuat=round(giabq*sum(slxuat),0)
thành tiền cuối kỳ thì cộng trừ, đừng nhân. Mục đích là ra kết quả nguyên. Để tránh trường hợp:

- nhập sl 3 x gbq 3,3333 = 10
xuất trong kỳ: sl 2 x gbq 3,3333 = 6,6666
tồn cuối: sl 1 x gbq 3,3333 = 3,3333

- Tương tự mặt hàng 2: nhập sl 11 x gbq 2,4545 = 27
xuất sl 8 x gbq 2,4545 = 19,63636
tồn cuối sl 3 x gbq 2,4545 = 7,3636

Lên báo cáo thường là số nguyên:

XNTon.jpg


Sẽ thấy ngay dòng cộng : 3 + 7 = 11, không hay tí nào

Lâu ngày chầy tháng, xảy ra tình trạng hết số lượng, còn giá trị 1đ hoặc -1 đ, kiếm hoặc điều chỉnh mệt mỏi.

Báo cáo công nợ cũng bị như vậy nếu VAT không làm tròn hoặc gõ trực tiếp số tiền vào.
 
Cho em hỏi là khi mình chọn source của 1 form là 1 table hay query thì làm thế nào để mình di chuyển đến 1 record xác định (ví dụ như khi nhấn nút "Tìm" thì di chuyển đến record có mã Hóa đơn là 065489/BA-2007)
Em thử dùng DoCmd.GotoRecord nhưng nó chỉ cho mình di chuyển đến số bản ghi (mà số này thay đổi liên tục)
 
Đặt trỏ chuột vào textbox có trường muốn tìm, nhấn ctrl+F (ở đây là số hóa đơn.)
 
Cho em hỏi là nếu nhập xuất chung 1 bảng thì mình tính tồn bằng hàm iifsum
còn nếu mình chia thành 2 bảng thì có thể tính được ko. Em thử chia thành 2 bảng nhập xuất riêng và tính bằng Group By ,Sum và INNER JOIN nhưng nó chỉ đúng khi mình nhập cái gì thì phải bán cái đó nếu ko số tính của nó sai tùm lum 2000 mà có khi ko biết soa tính ra đến mười mấy ngàn đơn vị
 

Bài viết mới nhất

Back
Top Bottom