Xây dựng chương trình quản lý bán hàng bằng VBA có thực sự "ổn" không?

Liên hệ QC

anhnghi07

Thành viên mới
Tham gia
17/3/14
Bài viết
23
Được thích
0
Xin các Thầy và các anh chị đi trước dành chút thời gian gợi ý giùm em với ạ:

Em đang xây dựng 1 chương trình bán hàng cho cửa hàng em: Có khoảng 1000 phiếu thanh toán mỗi tháng, khoảng 3000 mặt hàng trong kho. Em dùng Access làm Cơ Sở Dữ Liệu.
Em dùng 3 loại máy in, và máy quét mã vạch.
Tất cả em đều dùng code VBA excel để điều khiển, hiện tại chúng đang chạy ổn. Tuy nhiên, mỗi ngày em bổ sung thêm các tiện ích và phát sinh thêm nhiều code.

Xin cho em hỏi là code VBA có bị hạn chế khi phát triển lớn chương trình quản lý ?

Có nên ngừng nghiên cứu VBA và học một loại ngôn ngữ lập trình khác để dễ quản lý Dữ liệu?

Kính mong các thầy và anh chị chia sẻ giúp ạ! Em cảm ơn!
 
Theo tôi nghĩ, nếu bạn tạo CSDL chuẩn và các thuật toán trong VBA hợp lý thì có phát triển thêm cũng không có vấn đề gì cả.
Vấn đề nan giải là việc bảo mật code của VBA Excel rất không an toàn.
 
Xin các Thầy và các anh chị đi trước dành chút thời gian gợi ý giùm em với ạ:

Em đang xây dựng 1 chương trình bán hàng cho cửa hàng em: Có khoảng 1000 phiếu thanh toán mỗi tháng, khoảng 3000 mặt hàng trong kho. Em dùng Access làm Cơ Sở Dữ Liệu.
Em dùng 3 loại máy in, và máy quét mã vạch.
Tất cả em đều dùng code VBA excel để điều khiển, hiện tại chúng đang chạy ổn. Tuy nhiên, mỗi ngày em bổ sung thêm các tiện ích và phát sinh thêm nhiều code.

Xin cho em hỏi là code VBA có bị hạn chế khi phát triển lớn chương trình quản lý ?

Có nên ngừng nghiên cứu VBA và học một loại ngôn ngữ lập trình khác để dễ quản lý Dữ liệu?

Kính mong các thầy và anh chị chia sẻ giúp ạ! Em cảm ơn!
Đã dùng CSDL Access thì làm luôn trong Access đi. Tận dụng công cụ Query của nó để truy vấn dữ liệu đỡ tốn cả đống code VBA. Có thể thiết kế ứng dụng cho nhiều người dùng (mạng LAN) nhập liệu đồng thời. Bảo mật code thì xài luôn các tính năng có sẵn của nó không cần thêm code. Dữ liệu ngày càng lớn thì nâng cấp lên dùng SQL Server làm Back-end.
 
Đã dùng CSDL Access thì làm luôn trong Access đi. Tận dụng công cụ Query của nó để truy vấn dữ liệu đỡ tốn cả đống code VBA. Có thể thiết kế ứng dụng cho nhiều người dùng (mạng LAN) nhập liệu đồng thời. Bảo mật code thì xài luôn các tính năng có sẵn của nó không cần thêm code. Dữ liệu ngày càng lớn thì nâng cấp lên dùng SQL Server làm Back-end.
Em cảm ơn! Em sẽ tìm hiểu ngay
 
Nếu mức độ quản lý sản phẩm cần chi tiết thì với 3000 mặt hàng có nhiều tính chất khác nhau chẳng hạn tivi sẽ có những thuộc tính như cỡ màn hình, độ phân giải, công nghệ màn hình... còn xe đạp sẽ có cỡ bánh, chủng loại, size... chắc phải cỡ NoSQL hay PostgreSQL (hỗ trợ json) mới đủ sự linh động.
CSDL quan hệ như Access phù hợp khi quản lý mặt hàng với thông tin cơ bản chung chung (giá, xuất xứ, trọng lượng..)
 
Nếu mức độ quản lý sản phẩm cần chi tiết thì với 3000 mặt hàng có nhiều tính chất khác nhau chẳng hạn tivi sẽ có những thuộc tính như cỡ màn hình, độ phân giải, công nghệ màn hình... còn xe đạp sẽ có cỡ bánh, chủng loại, size... chắc phải cỡ NoSQL hay PostgreSQL (hỗ trợ json) mới đủ sự linh động.
CSDL quan hệ như Access phù hợp khi quản lý mặt hàng với thông tin cơ bản chung chung (giá, xuất xứ, trọng lượng..)
Em cảm ơn! Mỗi linh kiện bên em có khoảng 2 đên 4 thuộc tính, Cảm ơn anh gợi ý để em liệu!
 
Tôi khuyên bạn nên học Javascript viết ứng dụng dựa trên nền tảng Electron và một ngày nào đó bạn sẽ nghĩ đến việc viết đồng bộ với Ứng dụng Android hay IOS thì không có gì khó khăn.

Thời đại công nghệ nên hãy lựa chọn theo công nghệ.
VBA mãi mãi chết chân ở hệ điều hành Windows.

Bạn nghĩ xem Google Drive Desktop, Google Spreadsheets, Facebook Messenger Desktop, Github Desktop, Discod Desktop,...nhiều lắm, đều dựa trên nền tảng Electron.
Vì nó quá đỉnh, và dễ học.

Lựa chọn này là tốt nhất hiện tại.
 
Tôi khuyên bạn nên học Javascript viết ứng dụng dựa trên nền tảng Electron và một ngày nào đó bạn sẽ nghĩ đến việc viết đồng bộ với Ứng dụng Android hay IOS thì không có gì khó khăn.

Thời đại công nghệ nên hãy lựa chọn theo công nghệ.
VBA mãi mãi chết chân ở hệ điều hành Windows.

Bạn nghĩ xem Google Drive Desktop, Google Spreadsheets, Facebook Messenger Desktop, Github Desktop, Discod Desktop,...nhiều lắm, đều dựa trên nền tảng Electron.
Vì nó quá đỉnh, và dễ học.

Lựa chọn này là tốt nhất hiện tại.
Cảm ơn anh với gợi ý thật đẹp! em cảm ơn
 
Cảm ơn anh với gợi ý thật đẹp! em cảm ơn
tôi bày cho 1 cách tạm keo là Ngon - bổ - rẻ
1/ tạo 1 Data.accdb chỉ xử lý những vấn đề cần tạo mối liên hệ

2/ tạo vài cái như mục số 1 chỉ lưu dữ liệu thô mà ko thực hiện +-*/ lằng nhằng trong đó vì lách cái giới hạn Access chỉ 2G

3/ xong từ Excel làm cái Form trên Form hay Form trên Sheet cứ thế mà truy xuất dữ liệu từ Access
...
khá hơn chút thì làm Data.sqlite = lưu hết cuộc đời luôn may ra nó đầy dữ liệu

nhiều tiền chút + khả năng kiến thức khá thì Ms Server + ....

Và luôn nghỉ tới cái mình có khả năng ... đừng nghỉ tới cái trên cung trăng mà khả năng mình ko thực hiện được

Nếu nhiều tiền thì thuê : yêu cầu vậy = làm được không = tiền ? = ok chốt = thế thôi
 
2/ tạo vài cái như mục số 1 chỉ lưu dữ liệu thô mà ko thực hiện +-*/ lằng nhằng trong đó vì lách cái giới hạn Access chỉ 2G

Một file Database Access giới hạn 2G là đúng rồi nhưng ứng dụng Access có thể kết nối (linked Table) với nhiều Database một lúc nhé bạn.
Còn các phần +-*/ như bạn nói (Query, Form, Report. Module) nếu thiết kế giao diện lung linh cũng chiếm chừng 5-10M thì có là bao so với 2G.

3/ xong từ Excel làm cái Form trên Form hay Form trên Sheet cứ thế mà truy xuất dữ liệu từ Access
Truy vấn (query) từ nội tại không phải nhanh hơn là truy vấn từ bên ngoài à?
 
Một file Database Access giới hạn 2G là đúng rồi nhưng ứng dụng Access có thể kết nối (linked Table) với nhiều Database một lúc nhé bạn.
Còn các phần +-*/ như bạn nói (Query, Form, Report. Module) nếu thiết kế giao diện lung linh cũng chiếm chừng 5-10M thì có là bao so với 2G.


Truy vấn (query) từ nội tại không phải nhanh hơn là truy vấn từ bên ngoài à?
tùy có cái nhanh có cái ko nhanh... vấn đề là ai thiết kế cái gì và như thế nào thôi
VD sau
1/ khi tôi xuất hàng đi thì cái cột hàng còn tồn nó trừ đi tương ứng với cột số lượng
2/ khi nhập vào thì nó cộng thêm tương ứng
3/ khi tồn còn 100 mà tối xuất 120 nó ko cho xuất
4/ Excel làm Form trên Sheet ... còn Data = Access
....
...
nhiều tay viết phần mêm chào tôi ... tôi yêu cầu 3 mục trên = tịt đấy

sơ bộ thế thôi ... còn nhiều ko nói nữa ... đó là tận dụng excel

1632544305794.png
 
Lần chỉnh sửa cuối:
tôi bày cho 1 cách tạm keo là Ngon - bổ - rẻ
1/ tạo 1 Data.accdb chỉ xử lý những vấn đề cần tạo mối liên hệ

2/ tạo vài cái như mục số 1 chỉ lưu dữ liệu thô mà ko thực hiện +-*/ lằng nhằng trong đó vì lách cái giới hạn Access chỉ 2G

3/ xong từ Excel làm cái Form trên Form hay Form trên Sheet cứ thế mà truy xuất dữ liệu từ Access
...
khá hơn chút thì làm Data.sqlite = lưu hết cuộc đời luôn may ra nó đầy dữ liệu

nhiều tiền chút + khả năng kiến thức khá thì Ms Server + ....

Và luôn nghỉ tới cái mình có khả năng ... đừng nghỉ tới cái trên cung trăng mà khả năng mình ko thực hiện được

Nếu nhiều tiền thì thuê : yêu cầu vậy = làm được không = tiền ? = ok chốt = thế thôi
Một file Access có giới hạn là 2G vậy thì thay vì nhiều Table trong một file Access ta cứ tạo mỗi Table là một file thì xài chắc mệt nghỉ luôn hen anh.
 
VD sau
1/ khi tôi xuất hàng đi thì cái cột hàng còn tồn nó trừ đi tương ứng với cột số lượng
2/ khi nhập vào thì nó cộng thêm tương ứng
3/ khi tồn còn 100 mà tối xuất 120 nó ko cho xuất
4/ Excel làm Form trên Sheet ... còn Data = Access
....
...
nhiều tay viết phần mêm chào tôi ... tôi yêu cầu 3 mục trên = tịt đấy


View attachment 266639

Cái chuyện tính tồn kho là bình thường và là tính năng cơ bản trong các ứng dụng bán hàng thôi mà bạn. Vấn đề là bạn gặp người không biết viết thôi. :D
Trong Access tôi chỉ viết cái hàm OnHand() và gọi khi chọn mã hàng là ra thôi.

Screen Shot 2021-09-25 at 12.55.24.png


Screenshot at Sep 25 12-47-24.png

Screen Shot 2021-09-25 at 12.40.07.png
 
xong từ Excel làm cái Form trên Form hay Form trên Sheet cứ thế mà truy xuất dữ liệu từ Access
Cảm ơn anh, em đang làm theo hướng anh nói. Vậy nên rất vui khi anh gợi ý thế. Tuy nhiên, sau khi nghe các anh gợi mở ở trên: em cũng dự tính sau này phải nhờ đến các chuyên gia chứ trình của chúng em không dám đi sâu quá!
 
Cái chuyện tính tồn kho là bình thường và là tính năng cơ bản trong các ứng dụng bán hàng thôi mà bạn. Vấn đề là bạn gặp người không biết viết thôi. :D
Trong Access tôi chỉ viết cái hàm OnHand() và gọi khi chọn mã hàng là ra thôi.

View attachment 266643


View attachment 266641

View attachment 266642
Thử sức viết đi nè nếu OK thì bán tôi mua cho hay tôi bán cho nhiều người khác cho

1/ Thiết kế 1 Files Main.acddb chỉ có Form xuất , Nhập hàng + truy xuất dữ liệu khi cần thiết theo yêu cầu
còn trên File đó ko lưu bất cứ dữ liệu gì

2/ Thiết kế 1 DataNHapXuat.accdb chỉ lưu dữ liệu thô khi mục số 1 nhập xuất lưu vào đó

3/ tùy bạn tao thêm mấy Data nữa thì tùy nhưng bắt buộc mục số 1 là không có lưu bất cứ dữ liệu gì lên đó ... chỉ là Form bán hàng

4/ Kiểm hàng xuất nhập trực quan như tôi mô tả bài trước ... thấy luôn còn tồn bao nhiều trên Form mục số 1

5/ khi bán hàng nó tự động tính chiết khấu theo giá trị đơn hàng
VD: tổng giá trị đơn hàng là 5 triệu thì nó tự động lấy chiết khấu là 3% còn 10 triệu là 4% xem hình dưới

1632552918807.png


VD đơn 10 triệu
1632553051834.png


5/ Mục chiết khấu có thể tự nhập = tay khi bán cho khách hàng quen mà lấy ít chiết khấu nó xuống 3% thay vì tự nhập là 4% ............... quan trọng nó tự kiểm chiết nhập vào
VD nhập vào là 4.45 % mà nhập tay là 6% = bán lỗ thì nó không cho nhập

Xem hình
1632553754096.png


Mục trên xử lý vấn đề phá sản khi bán mà quên
VD nhập về 4.5% mà mắt nhắn mắt mở nhâp chiết khấu bán 40 % ( bốn mươi)

..... còn nữa ... hay thử mấy mục mô tả đó trước xem khả năng tới đâu xong tính


Quan trọng và bắt buộc mục số 1 chỉ có Form Bán - Nhập còn lại ko lưu bất cứ cái gì trong File đó ( chỉ thế + Code thôi )
 
Lần chỉnh sửa cuối:
Thử sức viết đi nè nếu OK thì bán tôi mua cho hay tôi bán cho nhiều người khác cho

1/ Thiết kế 1 Files Main.acddb chỉ có Form xuất , Nhập hàng + truy xuất dữ liệu khi cần thiết theo yêu cầu
còn trên File đó ko lưu bất cứ dữ liệu gì

2/ Thiết kế 1 DataNHapXuat.accdb chỉ lưu dữ liệu thô khi mục số 1 nhập xuất lưu vào đó

3/ tùy bạn tao thêm mấy Data nữa thì tùy nhưng bắt buộc mục số 1 là không có lưu bất cứ dữ liệu gì lên đó ... chì là Form bán hàng

4/ Kiểm hàng xuất nhập trực quan như tôi mô tả bài trước ... thấy luôn còn tồn bao nhiều trên Form mục số 1

5/ khi bán hàng nó tự động tính chiết khấu theo giá trị đơn hàng
VD: tông giá trị đơn hàng là 5 triệu thì nó tự động lấy chiết khấu là 3% còn 10 triệu là 4% xem hình dưới
VD đơn 10 triệu
5/ Mục chiết khấu có thể tự nhập = tay khi bán cho khách hàng quen mà lấy ít chiết khấu nó xuống 3% thay vì tự nhập là 4% ............... quan trong nó tự kiểm chiết nhập nhập vào VD là 5 % mà nhập tay là 6% = bán lỗ thì nó không cho nhập

Xem hình
Mục trên xử lý vấn đề phá sản khi bán mà quên VD nhập về 4.5% mà mắt nhắn mắt mở nhâp chiết khấu bán 40 % ( bốn mươi)

..... còn nữa ... hay thử mấy mục mô tả đó trước xem khả năng tới đâu xong tính


Quan trọng và bắt buộc mục số 1 chỉ có Form bán - nhap còn lại ko lưu bất cứ cái gì trong File đó ( chỉ thế + Code thôi )

Bạn tức cười quá! Viết ứng dụng tính tiền chứ đâu có viết thử chơi, thử sức.
Nhưng vấn đề tự động chiết khấu, bẫy lỗi nhập sai, tự động áp chương trình khuyến mãi tuỳ thời điểm vô nó chuyện là bình thường.
Cái form Phiếu Xuất như hình của tôi ở trên đã có hầu như đầy đủ các bẫy lỗi như bạn đề cập. Đây là cái module bán hàng cơ bản. Nó còn phải tích hợp code, tổ chức lưu dữ liệu sẳn để sau này người ra mua thêm module kế toán thì nó sẽ móc nối dữ liệu, tài khoản, định khoản qua để tổng hợp các báo cáo kế toán, tính tồn kho, tồn kho bình quân gia quyền, báo cáo thuế v.v.. nữa bạn à.
Còn chuyện thiết kế CSDL ra làm sao thì tự chuyên môn của họ tổ chức xây dựng CSDL chứ ai lại đi qui định bạn. Cái mục số 1, số 2 là cách thiết kế cơ bản của Access rồi đó bạn và đó là thế mạnh của Access. Dùng từ đúng là Backend Database chỉ lưu Table, Frontend Database lưu các đối tượng còn lại (Query, Form, Report, Module).
Túm lại là tôi không tìm được lý do gì để hứng thú, để viết ở đây cả. :)
 
Bạn tức cười quá! Viết ứng dụng tính tiền chứ đâu có viết thử chơi, thử sức.
Nhưng vấn đề tự động chiết khấu, bẫy lỗi nhập sai, tự động áp chương trình khuyến mãi tuỳ thời điểm vô nó chuyện là bình thường.
Cái form Phiếu Xuất như hình của tôi ở trên đã có hầu như đầy đủ các bẫy lỗi như bạn đề cập. Đây là cái module bán hàng cơ bản. Nó còn phải tích hợp code, tổ chức lưu dữ liệu sẳn để sau này người ra mua thêm module kế toán thì nó sẽ móc nối dữ liệu, tài khoản, định khoản qua để tổng hợp các báo cáo kế toán, tính tồn kho, tồn kho bình quân gia quyền, báo cáo thuế v.v.. nữa bạn à.
Còn chuyện thiết kế CSDL ra làm sao thì tự chuyên môn của họ tổ chức xây dựng CSDL chứ ai lại đi qui định bạn. Cái mục số 1, số 2 là cách thiết kế cơ bản của Access rồi đó bạn và đó là thế mạnh của Access. Dùng từ đúng là Backend Database chỉ lưu Table, Frontend Database lưu các đối tượng còn lại (Query, Form, Report, Module).
Túm lại là tôi không tìm được lý do gì để hứng thú, để viết ở đây cả. :)
Tôi đặt hàng như thế đấy ... xét thấy viết được theo yêu cầu thì báo giá ... còn ko thì thôi
rất đơn giản thế thôi
 
Cái chuyện tính tồn kho là bình thường và là tính năng cơ bản trong các ứng dụng bán hàng thôi mà bạn. Vấn đề là bạn gặp người không biết viết thôi. :D
Trong Access tôi chỉ viết cái hàm OnHand() và gọi khi chọn mã hàng là ra thôi.

View attachment 266643


View attachment 266641

View attachment 266642
Nhìn rất đẹp và hoành tráng, nhưng một chương trình như thế mà bị mất điểm bởi cái MsgBox không hiển thị được bằng tiếng Việt.
 
Web KT

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

Back
Top Bottom