Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

haquocquan

New Member
Hội viên mới
Tôi có một vấn để nhờ các PRO giúp đỡ:
Tôi có một table theo dõi mua hàng (THEODOI) của các khách hàng, gồm MSKH, HOTEN, NG_MUA, MAHANG, SOTIEN. Mỗi lần có khách hàng mua hàng là tôi lại cập nhập tiếp vào.
Tôi muốn lọc ra lần mua hàng cuối cùng (ngày mua cuối cùng) của các khách hàng để đánh giá xem bao lâu rồi khách hàng này chưa mua hàng.
Các PRO giúp tôi với nhé.
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Bạn làm cái query:

SELECT MSKH, Max(ng_mua) AS [ngay mua cuoi cung]
FROM tblmuahang
GROUP BY MSKH;
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

hay dung phan mem nay, ko phai suy nghi nhieu, co mọi báo cáo mà bạn cần. "metadata.com.vn/setupmda939.exe" 'minhhoan1010@yahoo.com" co j cu nhan tin nghen, tôi sẽ hỗ trợ bạn suốt quá trình sử dụng, kể cả dùng thử "0933.115.234"
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Bạn làm cái query:

SELECT MSKH, Max(ng_mua) AS [ngay mua cuoi cung]
FROM tblmuahang
GROUP BY MSKH;
Nhưng chỉ lấy được tên và ngày mua cuối cùng thôi, tôi muốn lấy cả số tiền mua hàng của ngày mua cuối cùng nữa cơ.
-----------------------------------------------------------------------------------------
Các bác PRO thử giúp em xem ý tưởng như thế này liệu có được không:
Quét table (tạo vòng lặp) và đặt 2 biến để so sánh: tại bản ghi thứ nhất gán biến cho MSKH và ngaymuahang; sau đó quét: nếu gặp MSKH=bien(1), so sánh nếu ngaymuahang>bien(2), gán lại biến. Khi quét hết ta sẽ lấy được MSKH với ngaymuahang (bien2) lớn nhất. Append vào một table.
Quay lại vòng lặp. Tôi thấy phức tạp quá, chắc mình không làm được. Các PRO xem xét giúp nhé.
Đồng thời, các PRO cho xin đoạn code quét table để lấy record có giá trị primarykey trùng với biến.
 
Sửa lần cuối:
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Đúng là ý tưởng của tôi điên rồ thật, mới chạy có mấy trăm bản ghi mà chậm lắm.
Tôi làm theo cách của bác DONGNAMND. Các bác thử xem giúp code này nhé:
- Tạo tblNGAYCUOI:
Mã:
SELECT MaKH, Max(ngaymua) AS ngaycuoi INTO tblNGAYCUOI FROM tblTHEODOI GROUP BY MaKH
- Tạo query lọc ra thông tin ngày mua hàng cuối cùng của các KH:
Mã:
SELECT tblTHEODOI.MSKH, tblTHEODOI.HOTEN, tblTHEODOI.NGAYMUA, tblTHEODOI.SOTIEN FROM tblTHEODOI INNER JOIN tblNGAYCUOI ON (tblTHEODOI.ngaymua = tblNGAYCUOI.ngaycuoi) AND (tblTHEODOI.MSKH = tblNGAYCUOI.MSKH;
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Đúng là ý tưởng của tôi điên rồ thật, mới chạy có mấy trăm bản ghi mà chậm lắm.
Tôi làm theo cách của bác DONGNAMND. Các bác thử xem giúp code này nhé:
- Tạo tblNGAYCUOI:
Mã:
SELECT MaKH, Max(ngaymua) AS ngaycuoi INTO tblNGAYCUOI FROM tblTHEODOI GROUP BY MaKH
- Tạo query lọc ra thông tin ngày mua hàng cuối cùng của các KH:
Mã:
SELECT tblTHEODOI.MSKH, tblTHEODOI.HOTEN, tblTHEODOI.NGAYMUA, tblTHEODOI.SOTIEN FROM tblTHEODOI INNER JOIN tblNGAYCUOI ON (tblTHEODOI.ngaymua = tblNGAYCUOI.ngaycuoi) AND (tblTHEODOI.MSKH = tblNGAYCUOI.MSKH;

Bạn làm đúng phương pháp hướng đối tượng rồi đó.
Trong query lấy ngày cuối bạn có thể không cần INTO tblNGAYCUOI
Thay vào đó hãy đặt tên cho query đó là tblNGAYCUOI.
Máy chỉ lưu lại 1 dòng lệnh thay vì phải lưu lại cả 1 table nháp.

Cắt lệnh query dài nhằng ra thành những đơn vị nhỏ sẽ có thể dùng lại cho việc khác được thuận tiện.
Lấy ví dụ nếu như 1 khách hàng có thể mua hàng nhiều lần trong cùng 1 ngày, khi đó bạn cần 1 cái query nho nhỏ để sum số tiền mua của 1 người trong 1 ngày.
Cái query đó có thể sẽ dùng cho nhiều báo cáo.
Trong cái báo cáo ban đầu của bạn có thể bạn sẽ cần Inner Join nó vào tiếp.
 
Sửa lần cuối:
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Bạn làm đúng phương pháp hướng đối tượng rồi đó.
Trong query lấy ngày cuối bạn có thể không cần INTO tblNGAYCUOI
Thay vào đó hãy đặt tên cho query đó là tblNGAYCUOI.
Máy chỉ lưu lại 1 dòng lệnh thay vì phải lưu lại cả 1 table nháp.

Cắt lệnh query dài nhằng ra thành những đơn vị nhỏ sẽ có thể dùng lại cho việc khác được thuận tiện.
Lấy ví dụ nếu như 1 khách hàng có thể mua hàng nhiều lần trong cùng 1 ngày, khi đó bạn cần 1 cái query nho nhỏ để sum số tiền mua của 1 người trong 1 ngày.
Cái query đó có thể sẽ dùng cho nhiều báo cáo.
Trong cái báo cáo ban đầu của bạn có thể bạn sẽ cần Inner Join nó vào tiếp.
[SELECT THEODOI.MSKH, Max(THEODOI.NG_MUA) as NgayCuoi FROM THEODOI GROUP BY THEODOI.MSKH]. AS tblNgayCuoi

Đoạn code này chính là query tblNGAYCUOI phải không bác. Tức là tạo một query ảo có đúng không ạ? Em tạm gọi query trên là query ảo, có cách nào tạo một query ảo độc lập không bác. Cho em xin đoạn code nhé. Em toàn phải tạo query thật để chạy thôi, trong MDB nhiều query quá.
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Chưa hiểu ý bạn về query ảo, query độc lập.

Các query là các query, nó là 1 cách nhìn khác về các table thực trên dĩa.
Một số phần mềm khác gọi nó là các View để phân biệt với các lệnh làm thay đổi table (như update, creat, delete ...).
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Đúng là ý tưởng của tôi điên rồ thật, mới chạy có mấy trăm bản ghi mà chậm lắm.
Tôi làm theo cách của bác DONGNAMND. Các bác thử xem giúp code này nhé:
- Tạo tblNGAYCUOI:
Mã:
SELECT MaKH, Max(ngaymua) AS ngaycuoi INTO tblNGAYCUOI FROM tblTHEODOI GROUP BY MaKH
- Tạo query lọc ra thông tin ngày mua hàng cuối cùng của các KH:
Mã:
SELECT tblTHEODOI.MSKH, tblTHEODOI.HOTEN, tblTHEODOI.NGAYMUA, tblTHEODOI.SOTIEN FROM tblTHEODOI INNER JOIN tblNGAYCUOI ON (tblTHEODOI.ngaymua = tblNGAYCUOI.ngaycuoi) AND (tblTHEODOI.MSKH = tblNGAYCUOI.MSKH;

Có nhất thiết thế không nhỉ?

Một query thôi:

SELECT mskh, hoten, ngaymua, SUM(sotien) AS tongso
FROM tblTHEODOI
WHERE mskh+Format("yyyymmdd",ngaymua)
IN (SELECT mskh+ngay FROM (SELECT mskh, MAX(Format("yyyymmdd", (ngaymua)) FROM tblTHEODOI) GROUP BY mskh)
GROUP BY mskh, hoten, ngaymua
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Chưa hiểu ý bạn về query ảo, query độc lập.

Các query là các query, nó là 1 cách nhìn khác về các table thực trên dĩa.
Một số phần mềm khác gọi nó là các View để phân biệt với các lệnh làm thay đổi table (như update, creat, delete ...).
Ý em là: khi em tạo một table để lấy số liệu tổng hợp, em phải truy vấn đến rất nhiều table hay query khác (các query này phải tạo từ nhiều table...). Cụ thể nhé:
Em có dữ liệu gốc (lấy từ ngoài vào) như sau:
table: HSKH (mã số KH, Tên KH, địa chỉ, mã xã, mã huyện, mã tỉnh)
table: MAXA (mã xã, tên xã, mã nhân viên theo dõi)
table: HUYEN (mã huyện, tên huyện)
table: TINH (mã tỉnh, tên tỉnh)
table: BANHANG (ngày, mã số KH, số hợp đồng, mã sản phẩm, phương thức bán, số tiền)
table: THEODOINO (số hợp đồng, trả nợ, ngày)
table: PHUONGTHUC (phương thức bán, thời gian cho nợ)
table: CANBO (mã nhân viên theo dõi, tên nhân viên theo dõi)
và một số bảng khác nữa
Để liên kết các bảng này vào với nhau, em phải tạo ra một số query nhỏ.
Ý em là, tạo một số câu lệnh select nhỏ để tạo ra query nhỏ (nhưng query đó không nhìn thấy trên DB), sau đó từ đó liên kết lại mới nhau. Sau khi kết thúc câu lệnh (em đã tạo được ra báo cáo tổng hơp), thì các query nhỏ này không còn nữa.
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Muốn các query nhỏ không tồn tại thì bạn phải copy nó và thay vào cái query báo cáo tổng hợp, và như thế sẽ tạo thành 1 query rất phức tạp, dài lằng ngoằng.

Và nếu bạn lại phải lập thêm 1 báo cáo tổng hợp khác nữa thì bạn lại phải làm thêm 1 cái dài ngoằng nữa.

Việc các query nhỏ nằm trên máy không ảnh hưởng gì. Nó chỉ là 1 dòng lệnh.

Xem lại 2 câu lệnh cũ của bạn:

SELECT MaKH, Max(ngaymua) AS ngaycuoi INTO tblNGAYCUOI FROM tblTHEODOI GROUP BY MaKH

SELECT tblTHEODOI.MSKH, tblTHEODOI.HOTEN, tblTHEODOI.NGAYMUA, tblTHEODOI.SOTIEN FROM tblTHEODOI INNER JOIN tblNGAYCUOI ON (tblTHEODOI.ngaymua = tblNGAYCUOI.ngaycuoi) AND (tblTHEODOI.MSKH = tblNGAYCUOI.MSKH;

Ở câu 1 bạn có INTO tblNgaycuoi nên nó sẽ tạo ra 1 table trên dĩa.
Và câu 2 bạn sẽ lấy số liệu từ table tblNgaycuoi ấy.
Như vậy trước khi bạn thực hiện câu 2 thì phải thực hiện câu 1 trước để đảm bảo số liệu được cập nhật.

Thay vì thế, bỏ cái đoạn "...INTO tbleNgaycuoi..." đi và đặt tên cái query này là tblNgaycuoi :
SELECT MaKH, Max(ngaymua) AS ngaycuoi FROM tblTHEODOI GROUP BY MaKH

Lúc bấy giờ nó sẽ không tạo ra 1 table nào trên dĩa cả.
Vì thế ở câu 2 chỗ "...INNER JOIN tblNGAYCUOI..." thì máy sẽ lấy query tblNgaycuoi chứ không lấy table (nhớ xóa cái table tblNgayCuoi đi nhé).
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Muốn các query nhỏ không tồn tại thì bạn phải copy nó và thay vào cái query báo cáo tổng hợp, và như thế sẽ tạo thành 1 query rất phức tạp, dài lằng ngoằng.

Và nếu bạn lại phải lập thêm 1 báo cáo tổng hợp khác nữa thì bạn lại phải làm thêm 1 cái dài ngoằng nữa.

Việc các query nhỏ nằm trên máy không ảnh hưởng gì. Nó chỉ là 1 dòng lệnh.

Xem lại 2 câu lệnh cũ của bạn:

SELECT MaKH, Max(ngaymua) AS ngaycuoi INTO tblNGAYCUOI FROM tblTHEODOI GROUP BY MaKH

SELECT tblTHEODOI.MSKH, tblTHEODOI.HOTEN, tblTHEODOI.NGAYMUA, tblTHEODOI.SOTIEN FROM tblTHEODOI INNER JOIN tblNGAYCUOI ON (tblTHEODOI.ngaymua = tblNGAYCUOI.ngaycuoi) AND (tblTHEODOI.MSKH = tblNGAYCUOI.MSKH;

Ở câu 1 bạn có INTO tblNgaycuoi nên nó sẽ tạo ra 1 table trên dĩa.
Và câu 2 bạn sẽ lấy số liệu từ table tblNgaycuoi ấy.
Như vậy trước khi bạn thực hiện câu 2 thì phải thực hiện câu 1 trước để đảm bảo số liệu được cập nhật.

Thay vì thế, bỏ cái đoạn "...INTO tbleNgaycuoi..." đi và đặt tên cái query này là tblNgaycuoi :
SELECT MaKH, Max(ngaymua) AS ngaycuoi FROM tblTHEODOI GROUP BY MaKH

Lúc bấy giờ nó sẽ không tạo ra 1 table nào trên dĩa cả.
Vì thế ở câu 2 chỗ "...INNER JOIN tblNGAYCUOI..." thì máy sẽ lấy query tblNgaycuoi chứ không lấy table (nhớ xóa cái table tblNgayCuoi đi nhé).

Có nghĩa là:
tblNGAYCUOI = "SELECT MaKH, Max(ngaymua) AS ngaycuoi FROM tblTHEODOI GROUP BY MaKH"
và lúc này tblNGAYCUOI trở thành một QUERY. Bây giờ em đã hiểu rồi.

Tất cả các report của em đều lấy từ query tổng hợp đó, như thế nó mới đủ thông tin. Còn các thông tin lẻ: chẳng hạn như mua hàng của khách hàng (chi tiết theo từng hợp đồng) em lại tạo một query riêng. Từ query tổng hợp đó, em có thể lấy được tất cả các số liệu mà Sếp cần, còn một số khác là lấy để phục vụ công việc của mình.
Em vừa làm (chương trình) vừa học (có ý tưởng, đọc và hỏi các PRO), trước đây em làm theo kiểu tạo query bằng lưới query (tức là vào DB -> query -> Design), cho nên mới có nhiều query. Gần đây em mới học sử dụng code. Bác bác PRO cho em hỏi thêm một chút nhé, theo hướng dẫn của bác ở trên:
- Trong dòng lệnh, em đặt query3 = "Select ", em có thể lấy số liệu từ query3 như là một query đang tồn tại để đư vào report được không.
Mong các bác chỉ dẫn.
 
Sửa lần cuối:
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Muốn các query nhỏ không tồn tại thì bạn phải copy nó và thay vào cái query báo cáo tổng hợp, và như thế sẽ tạo thành 1 query rất phức tạp, dài lằng ngoằng.

Và nếu bạn lại phải lập thêm 1 báo cáo tổng hợp khác nữa thì bạn lại phải làm thêm 1 cái dài ngoằng nữa.

Việc các query nhỏ nằm trên máy không ảnh hưởng gì. Nó chỉ là 1 dòng lệnh.

Xem lại 2 câu lệnh cũ của bạn:

SELECT MaKH, Max(ngaymua) AS ngaycuoi INTO tblNGAYCUOI FROM tblTHEODOI GROUP BY MaKH

SELECT tblTHEODOI.MSKH, tblTHEODOI.HOTEN, tblTHEODOI.NGAYMUA, tblTHEODOI.SOTIEN FROM tblTHEODOI INNER JOIN tblNGAYCUOI ON (tblTHEODOI.ngaymua = tblNGAYCUOI.ngaycuoi) AND (tblTHEODOI.MSKH = tblNGAYCUOI.MSKH;

Ở câu 1 bạn có INTO tblNgaycuoi nên nó sẽ tạo ra 1 table trên dĩa.
Và câu 2 bạn sẽ lấy số liệu từ table tblNgaycuoi ấy.
Như vậy trước khi bạn thực hiện câu 2 thì phải thực hiện câu 1 trước để đảm bảo số liệu được cập nhật.

Thay vì thế, bỏ cái đoạn "...INTO tbleNgaycuoi..." đi và đặt tên cái query này là tblNgaycuoi :
SELECT MaKH, Max(ngaymua) AS ngaycuoi FROM tblTHEODOI GROUP BY MaKH

Lúc bấy giờ nó sẽ không tạo ra 1 table nào trên dĩa cả.
Vì thế ở câu 2 chỗ "...INNER JOIN tblNGAYCUOI..." thì máy sẽ lấy query tblNgaycuoi chứ không lấy table (nhớ xóa cái table tblNgayCuoi đi nhé).
Đặt tên tblNGAYCUOI bằng một dòng lệnh như thế nào bác ơi, em thực hiện mãi không được. Cho em đoạn code nhé.
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Đặt tên tblNGAYCUOI bằng một dòng lệnh như thế nào bác ơi, em thực hiện mãi không được. Cho em đoạn code nhé.

Code là code thế nào?
Thay vì bạn đặt nó trong 1 trang code thì đặt nó thành 1 cái query trong data.
Mục đích là để dùng lại nhiều lần, khỏi phải gõ lại.
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Em tạo được rồi, bác CHECK giúp nhé:

Mã:
SQL="([SELECT MaKH, Max(ngaymua) AS ngaycuoi FROM tblTHEODOI GROUP BY MaKH]. as tblNgayCuoi)"

SELECT tblTHEODOI.MSKH, tblTHEODOI.HOTEN, tblTHEODOI.NGAYMUA, tblTHEODOI.SOTIEN FROM tblTHEODOI INNER JOIN "& SQL &" ON (tblTHEODOI.ngaymua = tblNGAYCUOI.ngaycuoi) AND (tblTHEODOI.MSKH = tblNGAYCUOI.MSKH;
OK không bác.
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Bạn hãy quay lại bài #5 của dongnamnb và bài #10 của anh Phát xem.
Đó là cách mà hôm trước 2 người đó đã nói mà bạn vẫn hông chịu mà.
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Bạn hãy quay lại bài #5 của dongnamnb và bài #10 của anh Phát xem.
Đó là cách mà hôm trước 2 người đó đã nói mà bạn vẫn hông chịu mà.
Em nhờ các PRO kiểm tra giúp cơ mà. Người ta đang tập teng học, thì hỏi cho hiểu chứ.
Về bài 5 của anh DONGNAMDB:
SELECT THEODOI.MSKH, Last(THEODOI.HOTEN) AS HOTEN, Last(THEODOI.NG_MUA) AS NG_MUA, Last(THEODOI.MAHANG) AS MAHANG, Last(THEODOI.SOTIEN) AS SOTIEN
FROM THEODOI INNER JOIN [SELECT THEODOI.MSKH, Max(THEODOI.NG_MUA) as NgayCuoi FROM THEODOI GROUP BY THEODOI.MSKH]. AS tblNgayCuoi ON (tblNgayCuoi .NgayCuoi = THEODOI.NG_MUA) AND (THEODOI.MSKH = tblNgayCuoi .MSKH)
GROUP BY THEODOI.MSKH;
Em thay toàn bộ phần tô đỏ bằng: &SQL&, "SQL" đã được định nghĩa bằng:
SQL="([SELECT MaKH, Max(ngaymua) AS ngaycuoi FROM tblTHEODOI GROUP BY MaKH]. as tblNgayCuoi)"
để cho câu lệnh thứ hai không dài nữa và dễ nhìn hơn.
Em học tập các PRO, sau đó tùy biến như vậy và nhờ các PRO CHECK giúp (chứ em thử chạy rồi, OK rồi)
Về bài #10 của bác Phật, em cũng đã thử, OK rồi. Em cũng tách như vậy cho dễ nhớ và dễ nhìn, dễ hiểu.
muontennguoi CHECK giúp nhé.
 
Sửa lần cuối:
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Thật ra mình chả thích quá sa lầy vào code làm gì cho nhức đầu. Cứ tạo bằng lưới cho nhanh rồi copy qua! (Nói thật thậm chí chả thèm xem câu SQL nó mặt tròn mặt méo thế nào nữa)
Dài quá thì ngắt. Xuống hàng rồi nối bằng dấu "&" .
vậy thôi!
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Thật ra mình chả thích quá sa lầy vào code làm gì cho nhức đầu. Cứ tạo bằng lưới cho nhanh rồi copy qua! (Nói thật thậm chí chả thèm xem câu SQL nó mặt tròn mặt méo thế nào nữa)
Dài quá thì ngắt. Xuống hàng rồi nối bằng dấu "&" .
vậy thôi!
Tôi thử nối rồi, nhưng không được. LoveBlue cho xin một ví dụ ngắt xuống dòng một câu lệnh nhé
 
Ðề: Làm thế nào để lấy dữ liệu phát sinh cuối cùng trong Table!

Tôi thử nối rồi, nhưng không được. LoveBlue cho xin một ví dụ ngắt xuống dòng một câu lệnh nhé

Ví dụ như ngay câu trên của bạn
SELECT THEODOI.MSKH, Last(THEODOI.HOTEN) AS HOTEN, Last(THEODOI.NG_MUA) AS NG_MUA, Last(THEODOI.MAHANG) AS MAHANG, Last(THEODOI.SOTIEN) AS SOTIEN
FROM THEODOI INNER JOIN [SELECT THEODOI.MSKH, Max(THEODOI.NG_MUA) as NgayCuoi FROM THEODOI GROUP BY THEODOI.MSKH]. AS tblNgayCuoi ON (tblNgayCuoi .NgayCuoi = THEODOI.NG_MUA) AND (THEODOI.MSKH = tblNgayCuoi .MSKH)
GROUP BY THEODOI.MSKH;


Ta có thể viết lại thế này:
Dim SQL1 As String
SQL1 = "SELECT THEODOI.MSKH, Last(THEODOI.HOTEN) AS HOTEN, Last(THEODOI.NG_MUA) AS NG_MUA, Last(THEODOI.MAHANG) AS MAHANG, Last(THEODOI.SOTIEN) AS SOTIEN "
SQL1 = SQL1 & "FROM THEODOI INNER JOIN [SELECT THEODOI.MSKH, Max(THEODOI.NG_MUA) as NgayCuoi FROM THEODOI GROUP BY THEODOI.MSKH]. AS tblNgayCuoi "
SQL1 =SQL1 & " ON (tblNgayCuoi .NgayCuoi = THEODOI.NG_MUA) AND (THEODOI.MSKH = tblNgayCuoi .MSKH) GROUP BY THEODOI.MSKH"

Mục đích ghép các string dài với nhau thành từng đoạn cho dễ nhìn ( hoặc phụ vụ truyền tham số từ Form). Thế thôi! :)
 
Sửa lần cuối:

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Cách làm file Excel quản lý lãi vay

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top