-
RE: VBA Cách xử lý file dữ liệu khi import file excel thô vào Table
Đình Phán > 08-06-21, 03:22 PM
Rất cảm ơn sự hướng dẫn nhiệt tình từ anh ongke0711
Sau khi được anh hướng dẫn, em đã dành thời gian rảnh buổi tối để tìm hiểu Access căn bản. Hiện tại em có thể Query ra dữ liệu em cần, nhưng thực hiện tại Access phải qua nhiều bước quá.
Ví dụ:
- Em tạo được Bảng cân đối phát sinh với số dư Nợ tương ứng với TK Nợ, Số dư Có tương ứng với TK Có.
- Bây giờ em muốn tạo 1 bảng mới gồm 2 cột được ghép bởi 2 table mới query từ QuyeryCDPS, cụ thể:
Table (Số tài khoản --- Số dư cuối)
Được append bởi 2 bảng
table1 (Số TK Nợ --- Số dư Nợ cuối)
table2 (Số TK Có --- Số dư Có cuối)
Vì có tài khoản lưỡng tính, nên em lại phải Group by theo Số tài khoản và Sum theo số dư cuối.
Như vậy với việc này em đang phải trải qua rất nhiều thao tác
1. Tạo quyeryCDPS để map với Tài khoản nợ, tài khoản Có
2. Tạo bảng table1 (Số TK Nợ --- Số dư Nợ cuối)
3. Tạo bảng table2 (số TK Có --- Số dư Có cuối)
4. Append 2 bảng lại làm 1 để ra table3 (Số tài khoản --- Số dư cuối)
5. Tạo quyery để Group by theo Số tài khoản
Em xin hỏi các anh chị là có cách nào thực hiện nhanh được nội dung này không ạ.
Cũng nhờ các anh chị cho em xin đoạn code mẫu theo cấu trúc như sau:
Sub TenThuTuc()
Khai báo biến
.........
SQL = (......đoạn này là tùy ý do em khai thác, em chạy câu lệnh như thế nào thì ra kết quả đó)
.......
End Sub
Tức là em muốn dùng VBA trong Access kết hợp với câu lệnh SQL để ra kết quả mong muốn.
Cảm ơn! -
RE: VBA Cách xử lý file dữ liệu khi import file excel thô vào Table
ongke0711 > 08-06-21, 04:23 PM
Bạn gửi cái file mẫu lên đi để mọi người dễ hình dung bạn tổ chức CSDL như thế nào. Thiết kế Query nó tuỳ thuộc cấu trúc bảng và Relationship của nó. Nếu xây dựng bảng chuẩn, có thể chỉ cần Query là có thể xử lý phần lớn các công việc mà không cần dùng đến code.
Chạy các Query trong ngăn Query sẽ nhanh hơn Query trong code VBA. Tuy nhiên cũng có nhiều việc xử lý bằng code + câu lệnh SQL như thêm, sửa, xoá dữ liệu (Action Query).
Về vấn đề của bạn liên quan đến kiến thức kế toán thì tôi không rành lắm, sẽ có nhiều thành viên khác chuyên ngành kế toán hỗ trợ bạn. -
RE: VBA Cách xử lý file dữ liệu khi import file excel thô vào Table
Đình Phán > 08-06-21, 05:09 PM
https://drive.google.com/file/d/10Lvf9QO...sp=sharing
file mẫu đây ạ.
Em muốn có 1 bảng gồm 2 field
Field1: Account
Field2: Amount
Account được nối từ AccDebit và AccCredit
Amount được nối từ CoDr và CoDr
Sau đó Group by theo Account ạ -
RE: VBA Cách xử lý file dữ liệu khi import file excel thô vào Table
Xuân Thanh > 08-06-21, 08:12 PM
1/ Tại sao lại nhập chung CoDr và CoCr vào làm một? Không hiểu nguyên tắc
2/ Nêu muốn làm như bạn thì tạo query sau :
Mã:SELECT tblMappingAccount.LaosAccount AS Account, IIf([CoDr]>0,[CoDr],[CoCr]) AS Amount
FROM tblTrialBalance INNER JOIN tblMappingAccount ON tblTrialBalance.Code = tblMappingAccount.LaosAccount
WHERE (((IIf([CoDr]>0,[CoDr],[CoCr]))>0));
P/s : Nếu bỏ dòng WHERE đi thì nó sẽ chọn hết các Account. Nếu dùng WHERE như trong câu lệnh nó chỉ chọn những Account nào có giá trị lớn hơn 0
Hỏi thêm : Cứ một Acc thì chỉ có một Dr hoặc Cr >0 đúng không? Tức là không xảy ra trường hợp cả Cr và Dr đều >0 -
RE: VBA Cách xử lý file dữ liệu khi import file excel thô vào Table
Đình Phán > 08-06-21, 08:46 PM
Chào anh Xuân Thanh,
Em ko lấy theo LaosAccount ạ, mà em lấy theo AccDebit và AccCredit, đồng thời nhặt số dư tương ứng ở Cân đối phát sinh.
Tức AccDebit thì có số dư là CoDr còn AccCredit thì có số dư là CoCr
Sau đó em gộp và nhóm lại để khử trùng đi.
Làm như vậy thì ví dụ như tài khoản 131, em tách ra được luôn là Phải thu khách hàng và Khách hàng trả tiền trước. Do CDPS đã xây dựng để 131 có số dư cuối ở cả Dr và Cr (gom các đơn vị khách hàng có số dư Nợ và các đơn vị khách hàng có số dư Có) -
RE: VBA Cách xử lý file dữ liệu khi import file excel thô vào Table
ongke0711 > 08-06-21, 10:02 PM
Muốn lấy AccDebit thì nắm nó kéo vào lưới Query thôi. Sửa chút câu lệnh SQL của anh Thanh.
Mã PHP:SELECT tblMappingAccount.AccDebit, IIf([CoDr]>0,[CoDr],[CoCr]) AS Amount
FROM tblTrialBalance INNER JOIN tblMappingAccount ON tblTrialBalance.Code = tblMappingAccount.LaosAccount
WHERE (((tblMappingAccount.AccDebit) Is Not Null) AND ((IIf([CoDr]>0,[CoDr],[CoCr]))>0)); -
RE: VBA Cách xử lý file dữ liệu khi import file excel thô vào Table
Đình Phán > 08-06-21, 10:09 PM
(08-06-21, 10:02 PM)ongke0711 Đã viết: Muốn lấy AccDebit thì nắm nó kéo vào lưới Query thôi. Sửa chút câu lệnh SQL của anh Thanh.
Mã PHP:SELECT tblMappingAccount.AccDebit, IIf([CoDr]>0,[CoDr],[CoCr]) AS Amount
FROM tblTrialBalance INNER JOIN tblMappingAccount ON tblTrialBalance.Code = tblMappingAccount.LaosAccount
WHERE (((tblMappingAccount.AccDebit) Is Not Null) AND ((IIf([CoDr]>0,[CoDr],[CoCr]))>0));
Vậy mới chỉ lấy được 1 loại tài khoản là dư Nợ, thiếu tài khoản dư có anh ạ.
Như em đã giải thích các bước ở trên thì với câu lệnh này mới tạo được bảng TK Dư Nợ.
Em phải tạo 2 bảng TK Dư Nọ và TK Dư Có sau đó gộp lại với nhau thành 1 bảng, rồi bỏ trùng (group by) theo tài khoản -
RE: VBA Cách xử lý file dữ liệu khi import file excel thô vào Table
Đình Phán > 08-06-21, 10:18 PM
Câu lệnh thì em có rồi, thực ra em Query tay rồi copy SQL của Access thôi
Mã PHP:SELECT tblMappingAccount.AccDebit as Account, tblTrialBalance.CoDr as Amount
FROM tblTrialBalance INNER JOIN tblMappingAccount ON tblTrialBalance.Code = tblMappingAccount.LaosAccount
WHERE (((tblMappingAccount.AccDebit) Is Not Null) AND ((tblTrialBalance.CoDr)>0))
UNION
SELECT tblMappingAccount.AccCredit, tblTrialBalance.CoCr
FROM tblTrialBalance INNER JOIN tblMappingAccount ON tblTrialBalance.Code = tblMappingAccount.LaosAccount
WHERE (((tblMappingAccount.AccCredit) Is Not Null) AND ((tblTrialBalance.CoCr)>0));
GROUP BY Account
Anh có thể giúp em để tạo thành 1 Thủ tục, sau đó em gán đoạn lệnh này vào String SQL bên dưới. Rồi gán cho Thủ tục này 1 Button ạ.
Sub TenThuTuc()
Khai báo biến
.........
SQL = (......đoạn này là tùy ý do em khai thác, em chạy câu lệnh như thế nào thì ra kết quả đó)
.......
End Sub -
RE: VBA Cách xử lý file dữ liệu khi import file excel thô vào Table
ongke0711 > 08-06-21, 10:36 PM
(08-06-21, 10:09 PM)Đình Phán Đã viết: Vậy mới chỉ lấy được 1 loại tài khoản là dư Nợ, thiếu tài khoản dư có anh ạ.
Như em đã giải thích các bước ở trên thì với câu lệnh này mới tạo được bảng TK Dư Nợ.
Em phải tạo 2 bảng TK Dư Nọ và TK Dư Có sau đó gộp lại với nhau thành 1 bảng, rồi bỏ trùng (group by) theo tài khoản
Trong code anh Thanh vừa có CoDr vừa có CoCr rồi đó. Nếu muốn +- thì thêm dấu - vào CoCr. Cần gì dùng Union Query.
Mã PHP:IIf([CoDr]>0,[CoDr],[CoCr])
Còn vụ tạo 1 thủ tục để chạy cái Query đó thì bạn khoan nghĩ tới đi và cũng không có ai tạo kiểu vậy.
Câu lệnh SQL chạy trong ngăn Query nó một số cái khác khi đưa vào code VBA, phải thay đổi một số thứ nếu có tham số, rồi tham chiếu Form này nọ. Tuỳ từng tác vụ mà xử lý thôi.
Bên cạnh đó thì bạn cũng có thể xem Query như một Table dữ liệu (được tổng hợp khi chạy) và thực hiện các truy vấn khác JOIN với nó như Table cũng được rồi, không nhất thiết lưu xuống Table cho nặng CSDL.
Thông thường từ Form người ta muốn chạy một Query nào đó (trong ngăn Query) thì code VBA cho nó là:
Mã PHP:Docmd.OpenQuery "TenQuery1"
Docmd.OpenQuery "TenQuery2"
... -
RE: VBA Cách xử lý file dữ liệu khi import file excel thô vào Table
tranthanhan1962 > 08-06-21, 10:52 PM
Tốt nhất nên tạo một phần mềm access hoàn chỉnh. Dữ liệu excel chuyển qua 1 sheet thành sheet phát sinh với đầy đủ các field của table phát sinh. Sau đó copy sheet phát sinh vào table phát sinh trong phần mềm để xử lý. Phần mềm kế toán mà xử lý chàng hảng excel-access rất dễ sai số liệu, mà sai là sẽ không biết sai từ đâu, không biết đường mò.
Nguyên tắt xây dựng 1 phần mềm kế toán là tạo các table gốc: Danh sách khách hàng, Danh mục tài khoản, Danh sách hàng hóa (đây là hệ thống bảng tạo chỉ mục đặt quan hệ cho các table sử lý phát sinh). Table quan trọng nhất là table phát sinh chính (ngày phát sinh; chứng từ phát sinh; tên khách hàng - tên các đối tượng liên quan, nếu có; các giá tri phát sinh trên chứng từ; quan trọng nhất là mã phát sinh), table thứ 2 là table hạch toán tài khoản chứa toàn bộ chi tiết tài khoản của từng mã phát sinh đượch hạch toán nó là sub table của table phát sinh chính (mã phát sinh; số hiệu tài khoản; giá trị nợ, có), table thứ 3 là table phát sinh hàng hóa cũng là subtable của table phát sinh chính chứa phát sinh hàng hóa (nếu có) (gồm mã phát sinh, tên hàng, số lượng, đơn giá, thành tiền...). Nếu có nhiều giá trị tiền tệ thì quy đổi tất cả thành 1 loại duy nhất (như bác Xuân Thanh đã nhắc nhỡ).
Phần mềm kế toán là phần mềm đặc thù, chỉ khi nào hoàn chỉnh, tuyệt đối chính xác mới được sử dụng. Nếu không sẽ ngồi khóc với một đống rác số liệu không biết xử lý từ đâu!
Chúc bạn thành công!