Nhờ chỉ giùm Code tính tồn

  • Thread starter Nina
  • Ngày gửi
Nina

Nina

Trung cấp
20/12/06
68
0
6
Đâu đó trên WKT.
Chào các anh chị !Em mới học Access nên chưa thể viết code được cho table tồn VD:Table thu chi gồm có THu,chi,tồn.có ai biết chỉ giùm em nhe.Em cảm ơn nhiều
 
Khóa học Quản trị dòng tiền
N

nguoiconxunui

Khách vãng lai
29/6/04
1,280
215
63
Bình Định
aso2pc.co.cc
mới học access mà lo viết code. hihi đúng là khó thiệt
 
Đ

ĐỖ SƠN HẢI

Guest
10/10/06
130
0
0
45
Phan Thiết
Mình giup ban nha :
doan code 1:
Dim C01 As Recordset
Set C01 = CurrentDb.OpenRecordset("SOQUY", dbOpenTable)
Do Until C01.EOF
If C01.RecordCount > 0 Then
C01.Delete
End If
C01.MoveNext
Loop
C01.Close
Dim TB As Recordset
Dim Dd As Database
Dim NEWQR As QueryDef
Set Dd = CurrentDb
Set NEWQR = Dd.CreateQueryDef("TAOLAO")
NEWQR.SQL = "SELECT THUCHI.NGAY, THUCHI.MA, THUCHI.PHIEUCHI, THUCHI.DIENGIAI, THUCHI.SOTIENTHU, THUCHI.PHIEUNHAP, THUCHI.SOTIENCHI, THUCHI.CONG, THUCHI.MAKH, THUCHI.[NO], THUCHI.CO, THUCHI.PHIEUTHU, [NGAY] & [ma] AS hu, THUCHI.CHIPHI FROM THUCHI WHERE (((THUCHI.NGAY) Between [tungay] And [denngay]))ORDER BY [NGAY] & [ma];"

NEWQR.Close
Set TB = CurrentDb.OpenRecordset("SOQUY")
Dim q09 As QueryDef
Dim X09 As Recordset
TB.Index = "PRIMARYKEY"
Set q09 = CurrentDb.QueryDefs("TAOLAO")
q09.Parameters("tungay") = TUNGAY.Value
q09.Parameters("denngay") = DENNGAY.Value
'q09.Parameters("TAIKHOAN") = taikhoan.Value
Set X09 = q09.OpenRecordset()
If X09.RecordCount > 0 Then
X09.MoveFirst
Do Until X09.EOF
'On Error Resume Next
TB.Seek "=", maMOI
If TB.NoMatch Then
TB.AddNew
TB!NGAY = X09!NGAY
TB!MA = X09!hu
TB!PHIEUCHI = X09!PHIEUCHI
TB!DIENGIAI = X09!DIENGIAI
TB!SOTIENTHU = X09!SOTIENTHU
TB!PHIEUNHAP = X09!PHIEUNHAP
TB!SOTIENCHI = X09!SOTIENCHI
TB!CONG = X09!CONG
TB!no = X09!no
TB!co = X09!co
TB!PHIEUTHU = X09!PHIEUTHU
TB!CHIPHI = X09!CHIPHI

'TB!TONDAU = 0
'TB!TONCUOI = 0
'On Error Resume Next
TB.UPDATE
TB.Bookmark = TB.LastModified
End If
TB.Edit
TB.UPDATE: X09.MoveNext
Loop
End If
Dd.QueryDefs.Delete "TAOLAo"
'Dim T07 As Recordset, DAUKY As Variant
'Set T07 = CurrentDb.OpenRecordset("TONQUY", dbOpenTable)
'THANG As Variant
'THANG = Month(TUNGAY)
'Do Until T07.EOF
'T07.Seek
'RunCommand acCmdSelectRecord
Dim T7 As Recordset, TH As Integer
Set T7 = CurrentDb.OpenRecordset("TONQUY", dbOpenTable)
'TH As Variant
TH = Month(TUNGAY)
Dim A As Variant
T7.MoveFirst
Do Until T7.EOF
If T7!THANG = TH Then A = T7!SOTIEN
'End If
T7.MoveNext
Loop
T7.Close
Dim Dd1 As Database
Dim mn As QueryDef
Set Dd1 = CurrentDb
Set mn = Dd1.CreateQueryDef("TAOLAO")
mn.SQL = "SELECT THUCHI.NGAY, Sum(THUCHI.SOTIENTHU) AS THU, Sum(THUCHI.SOTIENCHI) AS CHI FROM THUCHI GROUP BY THUCHI.NGAY HAVING (((THUCHI.NGAY) < [TUNGAY]))"
mn.Close
'Set TB = CurrentDb.OpenRecordset("SOQUY")
Dim q091 As QueryDef
Dim X091 As Recordset
'TB.Index = "PRIMARYKEY"
Set q091 = CurrentDb.QueryDefs("TAOLAO")
q091.Parameters("tungay") = TUNGAY.Value
'q09.Parameters("denngay") = DENNGAY.Value
'q09.Parameters("TAIKHOAN") = taikhoan.Value
Set X091 = q091.OpenRecordset()
B = 0
Do Until X091.EOF
If X091.RecordCount > 0 Then
A = A + X091!thu
B = B + X091!chi
End If
X091.MoveNext
Loop
'TB.Close
X091.Close
Dd1.QueryDefs.Delete "TAOLAo"
C = A - B
'X09.MoveFirst
'Do Until X09.EOF
'On Error Resume Next
'TB.Seek "=", maMOI
'If TB.NoMatch Then
'TB!PHIEUTHU = X09!PHIEUTHU
'X09.MoveNext
'Loop
Dim T06 As Recordset, DAUKY As Variant
Set T06 = CurrentDb.OpenRecordset("SOQUY", dbOpenTable)
If T06.RecordCount = 0 Then
MsgBox " Xem lai ngay nhap lieu ?": Exit Sub
Else
T06.Index = "PRIMARYKEY": T06.MoveFirst
NGAYDAU = T06!NGAY: LUADAU = T06!tondau
'DAUKY = InputBox("SO DAU KY NGAY " & NGAYDAU & vbCr & "(" & LUASAU & ")", "TINH QUY LIEN TUC")
'If DAUKY = "" Or Val(DAUKY) = 0 Then DAUKY = T06!TONDAU
DAUKY = C
tondau.Value = C
Do Until T06.EOF
T06.Edit: T06!tondau = DAUKY
T06!TONCUOI = DAUKY + T06!SOTIENTHU - T06!SOTIENCHI
T06.UPDATE: DAUKY = T06!TONCUOI
T06.MoveNext
Loop
End If
T06.Close: Me.Requery: Me.Refresh
x.Value = DAUKY
Y.Value = C
DoCmd.OpenReport "soquy", acViewPreview

doan code 2

Public Function soquy()
Dim C01 As Recordset
Set C01 = CurrentDb.OpenRecordset("THUCHI", dbOpenTable)
Do Until C01.EOF
If C01.RecordCount > 0 Then
C01.Delete
End If
C01.MoveNext
Loop
C01.Close
Dim TB As Recordset
Dim Dd As Database
Dim NEWQR As QueryDef
Set Dd = CurrentDb
Set NEWQR = Dd.CreateQueryDef("TAOLAO")
NEWQR.SQL = "SELECT vndmaphieuchitienmat.maphieu, vndmaphieuchitienmat.makhach, vndmaphieuchitienmat.ngay, vndmaphieuchitienmat.diengiai, vndmaphieuchitienmat.tenkhach, vndmaphieuchitienmat.phanloai, vndmaphieuchitienmat.sotien, vndmaphieuchitienmat.Cong, vndmaphieuchitienmat.chungtukem, 'PC' & [MAPHIEU] AS MAMOI, Left([MAPHIEU],3) AS PHIEUCHI, 1111 AS TAICO FROM vndmaphieuchitienmat;"
NEWQR.Close
Set TB = CurrentDb.OpenRecordset("THUCHI")
Dim q09 As QueryDef
Dim X09 As Recordset
TB.Index = "PRIMARYKEY"
Set q09 = CurrentDb.QueryDefs("TAOLAO")
'q09.Parameters("tungay") = TUNGAY.Value
'q09.Parameters("denngay") = DENNGAY.Value
'q09.Parameters("TAIKHOAN") = taikhoan.Value
Set X09 = q09.OpenRecordset()
If X09.RecordCount > 0 Then
X09.MoveFirst
Do Until X09.EOF
'On Error Resume Next
TB.Seek "=", maMOI
If TB.NoMatch Then
TB.AddNew
TB!NGAY = X09!NGAY
TB!MA = X09!maMOI & "vnd"
TB!PHIEUCHI = X09!PHIEUCHI & "vnd"
TB!DIENGIAI = X09!DIENGIAI
TB!SOTIENCHI = X09!SOTIEN
TB!CONG = X09!SOTIEN
TB!CHIPHI = X09!MAKHACH
TB!MAKH = X09!TENKHACH
TB!LOAICP = X09!PHANLOAI
TB!co = X09!taico
TB!PHIEUNHAP = X09!CHUNGTUKEM
'On Error Resume Next
TB.UPDATE: TB.Bookmark = TB.LastModified
End If
TB.Edit
TB.UPDATE: X09.MoveNext
Loop
End If
Dd.QueryDefs.Delete "TAOLAo"
'cap nhat phieu thu
Dim kh As Recordset
Dim dm As Database
Dim oldqr As QueryDef
Set dm = CurrentDb
Set oldqr = dm.CreateQueryDef("laotao")
oldqr.SQL = "SELECT vndmaphieuthutienmat.maphieu, vndmaphieuthutienmat.madoanhthu, vndmaphieuthutienmat.diengiai, vndmaphieuthutienmat.ngay, vndmaphieuthutienmat.[ten khach], vndmaphieuthutienmat.diachi, vndmaphieuthutienmat.sotien, 'PT' & [MAPHIEU] AS MAPTHU, Left([MAPHIEU],2) AS PHIEUTHU, vndmaphieuthutienmat.PHANLOAI, 1111 AS TAINO FROM vndmaphieuthutienmat;"

oldqr.Close
Set kh = CurrentDb.OpenRecordset("THUCHI")
Dim m09 As QueryDef
Dim z09 As Recordset
kh.Index = "PRIMARYKEY"
Set m09 = CurrentDb.QueryDefs("laotao")
'm09.Parameters("tungay") = TUNGAY.Value
'm09.Parameters("denngay") = DENNGAY.Value
'm09.Parameters("TAIKHOAN") = taikhoan.Value
Set z09 = m09.OpenRecordset()
If z09.RecordCount > 0 Then
z09.MoveFirst
Do Until z09.EOF
'On Error Resume Next
kh.Seek "=", mapthu
If kh.NoMatch Then
kh.AddNew
kh!NGAY = z09!NGAY
kh!MA = z09!mapthu & "vnd"
kh!PHIEUTHU = z09!PHIEUTHU & "vnd"
kh!DIENGIAI = z09!DIENGIAI
kh!SOTIENTHU = z09!SOTIEN
kh!CONG = z09!SOTIEN
kh!no = z09!taino
kh!CHIPHI = z09!PHANLOAI
'kh!PHIEUNHAP = z09!CHUNGTUKEM
'On Error Resume Next
kh.UPDATE: kh.Bookmark = kh.LastModified
End If
kh.Edit
kh.UPDATE: z09.MoveNext
Loop
End If
dm.QueryDefs.Delete "laotao"

dm.Close

Dim dd10 As Recordset
Dim zz10 As Recordset
Set dd10 = CurrentDb.OpenRecordset("ma", dbOpenTable)
dd10.Index = "PRIMARYKEY"
Set zz10 = CurrentDb.OpenRecordset("thuchi", dbOpenTable)
If zz10.RecordCount > 0 Then
zz10.MoveFirst
Do Until zz10.EOF
dd10.Seek "=", zz10!CHIPHI
If Not dd10.NoMatch Then
zz10.Edit
zz10!no = dd10!taino
zz10!co = dd10!taico
zz10.UPDATE
End If
zz10.MoveNext
Loop
End If
dd10.Close
zz10.Close
End Function

chuc thanh cong
 
Nina

Nina

Trung cấp
20/12/06
68
0
6
Đâu đó trên WKT.
Cảm ơn anh Sơn

Em cảm ơn anh Sơn nhiều nha.Để em tai về và làm theo anh ,có gì em hỏi anh tiếp nhe.Chúc anh năm mới có nhều niềm vui,dồi dào sức khỏe ,hạnh phúc và thành đạt.Hẹn gặp lại anh.
 
Đ

ĐỖ SƠN HẢI

Guest
10/10/06
130
0
0
45
Phan Thiết
ban lam theo cac buoc sau
1. tao table thu (ngay, mathu,maphieu, noidung, sotienthu)
2. tao table chi (ngay , machi, maphieu, noidung, sotienchi)
3. tao table thuchi (ngay,phieuthu,phieuchi, thu , chi, ton, diengiai)
4. tao table soquy giong table thuchi chi de lay du lieu ngay can xem
VND : ban cho xem ton quy tu ngay .... den ngay....
luc do thứ tự lập trình như sau
lấy toàn bộ dữ liệu trong pham vi xem chuyển sang table thuchi sau đó lọc và chuyển sang table sổ quỹ (table thuchi và sổ quỹ bạn có thể tự tạo bằng code hoặt bạn có thể tạo cố định)

chúc ban học giỏi access
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,032
125
63
50
Hà nội
vnuni.net
Có lẽ bạn chỉ cần Union 2 cái table thu/chi với nhau thì thành cái sổ quỹ ngay thôi mà. Khi Union nhớ trong câu SQL có bổ sung fake field nhé vì Union chỉ cho phép làm việc với cấu trúc đồng nhất.

Ví dụ:


strSQL_Condition = "WHERE ngay BETWEEN '...' AND '...' "

strSQL = "SELECT ngay, maphieu AS maphieuthu, '' AS maphieuchi, noidung, sotien AS tien_thu, null AS tien_chi FROM tb_thu " & strSQL_Condition
strSQL = strSQL & vbcrlf & " UNION ALL "
strSQL = strSQL & "SELECT ngay, '' AS maphieuthu, maphieu AS maphieuchi, noidung, null AS tien_thu, sotien AS tien_chi FROM tb_chi " & strSQL_Condition

Đại khái là như thế.

Thực ra các loại chứng từ kế toán như: hóa đơn mua/bán, trả lại, bán lẻ, nhập, xuất, thu, chi, phiếu thanh toán, v.v... người ta đều gọi là các giao dịch (financial/inventory,... transactions). Hàng ngày các transactions được tạo ra từ các chứng từ kế toán phát sinh (financial/inventory... documents) và được lưu vào sổ nhật ký (journals). Sổ nhật ký này bản chất là lưu các giao dịch theo tuần tự thời gian. Các chứng từ này sẽ được Ghi sổ (Posted) sang sổ cái tùy theo tính chất của từng loại nghiệp vụ.

Như vậy, về bản chất, cái mà các bạn gọi là sổ quỹ thực ra chỉ cần tổ hợp của 2 loại giao dịch (có thể gọi là 4 loại cũng được) là thu/chi (tiền mặt/tiền gửi). Tất cả đều nằm trong cái mà mình hay gọi là tb_T_Transactions --> tb_T_Journal. Chỉ cần phải cái câu lệnh SQL đơn giản là bạn có các sổ nhật ký các loại, sỗ quỹ, sổ xyz ngay.

Hope that helps!
 
Đ

ĐỖ SƠN HẢI

Guest
10/10/06
130
0
0
45
Phan Thiết
Ban chú ý cấu trúc lập trình nếu chỉ tạo query khó cụ thể
bạn muốn chạy sổ quỹ từ ngày 15/10/2007 đến ngày 25/10/2007 thỉ bạn phải tính tồn kho đến ngày 14/10/2007 sau đó mới mới lấy dữ liệu tiếp tục
thể hiện lên sổ quỹ báo cáo . Thêm vào đó còn tùy thuộc vào loại báo cáo xếp yêu cầu nếu chỉ báo cáo tồn quỹ thì đơn giản nhưng nếu xếp yếu câu báo cáo như sau thì làm thế nào :

ngay...... P.thu......P.chi ......dien giai........no....co......thu........chi.....ton
.....................................................................tồn đầu.................1
1/1 ..........1.......................xxxx.............111....xxx....1.................. 2
1/2 .......................1..........xxxx..............xxx....111...............0.5......1.5

nếu có cách nào không lập trình chỉ dùng querry chỉ giúp mình .
 
Sửa lần cuối:
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,032
125
63
50
Hà nội
vnuni.net
1. Có lẽ Sơn dùng từ sai. Trong sổ quỹ thì ko có khái niệm "Tồn kho". (Người ta gọi là dư đầu kỳ của tài khoản (dư đầu kỳ của 111 chẳng hạn).

2. Trong trường hợp kỳ là FromDate - ToDate thì phải xác định dư đầu kỳ của FromDate (là thời điểm T0 = Month(FromDate)) + phát sinh tăng - phát sinh giảm (trong khoảng từ T0 đến FromDate) và gọi kết quả đó là T1 (Dư đầu tới tính thời điểm FromDate).

(Ở các phần mềm tốt, bao giờ fiscal year cũng được chia thành các accounting periods (ở VN thì hay dùng tháng làm acc periods chứ bọn nước ngoài thì nhiều loại fiscal year và accounting periods lắm). Và sau mỗi kỳ thì người ta thực hiện động tác Closing (mình hay gọi là khóa kỳ kế toán ấy) và bao giờ tại 1 đầu kỳ mới cũng có giá trị là số dư ban đầu cho tất cả các đối tượng như tài khoản, khách hàng, hàng hóa, v.v....)

3. Còn cái đoạn PS tăng (thu), PS giảm (chi) trong khoảng fromdate - todate ở dưới thì quá dễ rồi.

4. Kết hợp 3 cái đó và vận dụng Fake fields ở 3 sub-queries trước khi Union thì ổn thôi. Chỉ có điều là có biết vận dụng hay ko thôi.

Mấy cái sql tớ viết cách đây hơn 8 năm rồi ko chỉ áp dụng cho mỗi tính số dư tài khoản mà còn tính dư tồn kho (về lượng) nữa. Tất cả chỉ là vận dụng cách viết pl sql thôi. (à, bạn đừng nghĩ là ai từng viết PM, từng biết tới DB thì biết viết SQL ngon nhé. 80% SQL trong các SP hiện nay ở VN đều chưa chắc đã là optimized sql đâu)

Mà thôi, bạn viết kiểu gì cũng được. Miễn là nó chạy. Tớ giải thích mấy món này mệt lắm. Tớ cũng chỉ có sức viết đến thế thôi.
 
Sửa lần cuối:
N

nguyendinhhieu

Guest
22/7/05
10
0
1
42
Ha noi
Tính tồn kho không cần code VB

Các bác muốn tính tồn thì vào query của access mà làm, cần gì dùng code làm gì, vừa chậm, vừa phức tạp
chỉ cần dùng
1. Total query
2. Union query
3. Select query

Kết hợp ba cái loại này là tính được

Nhanh, gọn
 
H

huydungktv

Guest
30/10/08
1
0
0
kien giang
Xin Chào Các Bạn!!!! (Mình là thành viên mới)
Các bạn giúp mình cái này nhe. Bây giờ mình có hai Table: nhap(Ngaynhap, Masp, Soluong,...) và xuat(ngayxuat, Masp, Soluong,...)

Dữ liệu bên trong của từng table như sau:

Table Nhap:
Masp Soluong
01 | 100
02 | 50
04 | 50

Table Xuat:
Masp Soluong
01 | 50
02 | 50
03 | 100

Kết quả mong muốn của mình là:

Masp SoluongTon
01 | 50
02 | 0
03 | -100
04 | 50

Do không phải chuyên ngành nên mình không thể viết lệnh SQL để giải quyết vấn đề này được, nếu bạn nào có thể giúp được mình xin cám ơn nhiều.

Nếu có thể gửi kết quả cho mình nhe. Đây là Y!M của mình: huydung_1987
 

Xem nhiều

Webketoan Zalo OA