Ðề: Phần mềm kế toán access
Với dữ liệu như thế này thì kết chuyển trong chương trình thế nào nhỉ. Mình thấy phài sản thì có nhưng nguồn vốn thì trống trơn.
http://www.mediafire.com/?sharekey=065a2f5435d866ae24a64199ac7f73e5e04e75f6e8ebb871
Mình xem file của bạn . Thấy TK 4111 hạch toán chi tiết có mã là 0001, tuy nhiên trong [Danh mục đối tượng] thì 0001 không có gắn với TK nào cả (Không hiểu sao bạn nhập được trong phiếu thu TK 4111 – 0001 được?).
Bạn vào [Danh mục đối tượng] thêm TK chi tiết 4111 cho đối tượng 0001 (bấm chọn Thêm, sửa TK chi tiết và thêm vào)
Với lại Trong bảng cân đối kế toán phần lấy số dư mã số 411 phải chọn Có 4111 chứ (bạn chọn Nợ).
Phần kết chuyển trong chương trình là Kết chuyển Doanh thu & Chi phí , bạn định nghĩa trong phần thiết kế sổ sách BÁO CÁO KẾT QUẢ SXKD
Ví dụ mã số 01 – Doanh thu , bạn chọn phần bên phải là Nợ các TK 511 và TK đối ứng 911. (mình thấy trong file của bạn có TK 6428/911 – bạn xóa dòng này đi).
Tương tự cho các mã số khác: MS 25 – chi phí QLDN: chọn Có TK 6421, 6422,…6428 Nợ TKĐU 911.
Để thực hện kết chuyển vào Báo cáo kế toán chọn Kết chuyển doanh thu – chi phí.
Trở lại vấn đề nhúng công thức.
Biến số của công thức là chuỗi gồm các ký tự (a,b,c,….z) thì không sao, nhưng nếu biến số là chuỗi các ký số (0,1,2,..,9) như các mã số trong Bảng CĐKT, Bảng KQSXKD thì kết quả có thể bị sai.
Kể cả dòng lệnh sau str = Replace(str, gt, rst1.Fields(0), , 1)
Bạn thử test số liệu như sau sẽ thấy.
3. Cả 2 cách trên hình như chưa tính đến khả năng kết quả lúc đầu có các ký tự trùng với code chưa tính => kết quả tính toán sai
ví dụ : tính công thức (110+111+112) tương ứng với các gi trị (5+112000+200000) = 312.002
áp dụng công thức sẽ bằng 200.200.005
vì khi dùng hàm replace :
bước 1 sẽ thay thế = 5 +"111"+"112"
bước 2 sẽ thay thế = 5 + 112000 +"112"
bước 3 sẽ thay thế = 5 + 200000000 + 200000 = 200.200.005
=> kết quả sai
Mình sửa lại đoạn code một chút như sau .
Public Function R_Ketqua(mCongthuc As String) As Variant
Dim kq As String, Arr As Variant, gt As String
Dim rst1 As DAO.Recordset
Dim ChuoiCanBo$, ChuoiGoc$
Dim kq1 As String
ChuoiCanBo = "+-*/()" 'mu?n b? kí t? g´ th´ go vào dây
ChuoiGoc = mCongthuc
For j = 1 To Len(ChuoiCanBo)
ChuoiGoc = Replace(ChuoiGoc, Mid(ChuoiCanBo, j, 1), ";")
Next
ChuoiGoc = Replace(ChuoiGoc, " ", "")
ChuoiGoc = Replace(ChuoiGoc, ";;", ";")
If Left(ChuoiGoc, 1) = ";" Then
ChuoiGoc = Right(ChuoiGoc, Len(ChuoiGoc) - 1)
End If
If Right(mCongthuc, 1) = ";" Then
ChuoiGoc = Left(ChuoiGoc, Len(ChuoiGoc) - 1)
End If
Arr = Split(ChuoiGoc, ";")
For k = 0 To UBound(Arr, 1)
gt = Arr(k)
Set rst1 = CurrentDb.OpenRecordset("select sotien from tbldata where code='" & gt & "'")
If rst1.RecordCount > 0 Then
rst1.MoveFirst
kq = str(Nz(rst1.Fields(0), 0))
kq1 = ""
For j = 1 To Len(kq)
kq1 = kq1 & Mid(kq, j, 1) & ";"
Next
Else
kq1 = "0;"
End If
mCongthuc = Replace(mCongthuc, gt, kq1)
Next
mCongthuc = Replace(mCongthuc, ";", "")
R_Ketqua = Eval(mCongthuc)
End Function
đúng với điều kiện là mã số có chiều dài từ 2 trở lên.