Quản lý mua bán hàng - Phần 4: Thiết kế form

phatnq2002

Tích cực giảm cân...
Hội viên mới
Bài này bao gồm:

Link dữ liệu từ file dữ liệu đã tao đến file "chạy". Cái "vụ" này là để các bạn hiểu sơ sơ thế nào là tách dữliệu và cá cphần thực thi riêng ra làm 2 file khác nhau.

Thiết kế hoàn tất một form cập nhật dan hmục hàng hóa, chỉ đến phần trang trí và bố trí control mà thôi. Chưa đụng vào code. Phần code sẽ được post ở bài tiếp theo.

Good job !
 

Đính kèm

  • ThietkeForm_1.pdf
    215.2 KB · Lượt xem: 3,607
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form (2)

Tôi post phần tiếp theo của thiết kế form frmDMHH.

Đây là phần coding của nó, sử dụng VBA của Access. Do vậy nếu bạn nào đã biết qua đôi chút về lập trình trong Access, hẵn sẽ dễ theo dõi hơn.

Với các bạn mới làm quen, tôi đề nghị các bạn nên chuẩn bị sẵn một tài liệu tham khảo thích hợp về Access VBA, chủ yếu là cú pháp lệnh dựng sẵn của VB.

Trong bài đính kèm, tôi có sơ lược phần lý thuyết, các bạn có thể tham khảo.

Vẫn tiếp tục nhận ý kiến của các bạn.
 

Đính kèm

  • ThietKeForm_2.pdf
    165 KB · Lượt xem: 2,426
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Em thấy có 1 vấn đề nảy sinh khi thực hiện lệnh undo. Nếu chúng ta chỉ nhập 1 record thì lệnh Undo có hiệu lực còn như nếu ta nhập liên tiếp từ 2 record trở lên thì chỉ có record cuối cùng mới có hiệu lực còn tất cả các record đã nhập phía trên đều tự động lưu vào CSDL.
Các bác xem có phương án nào để giải quyết không?
Bác phat có thể nêu rõ hộ em lý do mà ta sử dụng Sub mà không sử dụng Function hoặc ngược lại được không. Cái này em (và chắc nhiều người) cũng chưa hiểu rõ về nó. Theo kinh nghiệm em thấy cái Function nó rộng hơn Sub thì phải vì ngoài việc trả về được các giá trị tính toán thì nó lại cũng có thể cho thực thi đối với các đối tượng. Đôi khi cứ sài nhưng chẳng biết công dụng của nó ra sao cả , hi hi

Tại trang 3 phần 2 em đề nghị thay vì sử dụng việc việc gán Status cho từng control thì ta nên sài For each control... như thế thì về sau khi có sửa tên các đối tượng ta cũng không phải đi sửa lại từng cái nữa
 
Sửa lần cuối:
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Em thấy có 1 vấn đề nảy sinh khi thực hiện lệnh undo. Nếu chúng ta chỉ nhập 1 record thì lệnh Undo có hiệu lực còn như nếu ta nhập liên tiếp từ 2 record trở lên thì chỉ có record cuối cùng mới có hiệu lực còn tất cả các record đã nhập phía trên đều tự động lưu vào CSDL.
Các bác xem có phương án nào để giải quyết không?

Vẫn hoạt động tốt mà bác. Bác xem lại nhé
 
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form (2)

Tôi post phần tiếp theo của thiết kế form frmDMHH.

Đây là phần coding của nó, sử dụng VBA của Access. Do vậy nếu bạn nào đã biết qua đôi chút về lập trình trong Access, hẵn sẽ dễ theo dõi hơn.

Với các bạn mới làm quen, tôi đề nghị các bạn nên chuẩn bị sẵn một tài liệu tham khảo thích hợp về Access VBA, chủ yếu là cú pháp lệnh dựng sẵn của VB.

Trong bài đính kèm, tôi có sơ lược phần lý thuyết, các bạn có thể tham khảo.

Vẫn tiếp tục nhận ý kiến của các bạn.
Phần này em lúng túng đây, may mà anh có kèm lý thuyết không là em theo đuối luôn. CÁm ơn anh nhiều
 
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Tài liệu anh Phatnq đưa ra rất chi tiết, anh em cứ thế mà làm, nhưng bác chưa printscreen cái form frmDMHH lên em lại đang mày mò.

Mấy cái nút Next, Last, Delete... bấm nút wizard control hỗ trợ, vẽ nút lệnh mới, là tạo được ngay.

Như vậy: nhập mã hàng hoá tại txthh_ma, còn loại hàng hoá là combobox cboloaihh_ma- vừa dùng để chọn và để nhập mới.
 
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Em đã làm theo hướng dẫn nhưng các nút đó vẫn không có tác dụng :k5197769:
Dùng wizard control để hỗ trợ có khi tiện hơn :xinloinhe::chuyengivay:
HỊC 3 hôm nữa em phải bảo vệ bài tập lớn quản lý công văn rồi:k5197769:
 
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Em thấy có 1 vấn đề nảy sinh khi thực hiện lệnh undo. Nếu chúng ta chỉ nhập 1 record thì lệnh Undo có hiệu lực còn như nếu ta nhập liên tiếp từ 2 record trở lên thì chỉ có record cuối cùng mới có hiệu lực còn tất cả các record đã nhập phía trên đều tự động lưu vào CSDL.
Các bác xem có phương án nào để giải quyết không?
Bác phat có thể nêu rõ hộ em lý do mà ta sử dụng Sub mà không sử dụng Function hoặc ngược lại được không. Cái này em (và chắc nhiều người) cũng chưa hiểu rõ về nó. Theo kinh nghiệm em thấy cái Function nó rộng hơn Sub thì phải vì ngoài việc trả về được các giá trị tính toán thì nó lại cũng có thể cho thực thi đối với các đối tượng. Đôi khi cứ sài nhưng chẳng biết công dụng của nó ra sao cả , hi hi

Tại trang 3 phần 2 em đề nghị thay vì sử dụng việc việc gán Status cho từng control thì ta nên sài For each control... như thế thì về sau khi có sửa tên các đối tượng ta cũng không phải đi sửa lại từng cái nữa

Thiết kế theo trên thì Undo chỉ có tác dụng cho record đang nhập hoặc hiệu chỉnh, vì kiểu của form là Single Form mà. Single Form cho phép chúng ta mỗi lần làm việc với một record, hay nói chính xác là mỗi lần ta chỉ "thấy" một record trên form mà thôi.

Về Sub và Function xin phép đề cập ở một bài khác, vì nói đến nó cũng phải chi tiết và đầy đủ.

Còn việc gán thuộc tính Locked và Enabeld cho các nút lệnh và control khác, thì bạn có chắc là chỉ có từng ấy control với mỗi form không. Và có bảo đảm thứ tự của chúng trên form không? Dùng For Each ... trong tình huống này còn phức tạp hơn là gán trực tiếp.
 
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form (2)

Tôi post phần tiếp theo của thiết kế form frmDMHH.

Đây là phần coding của nó, sử dụng VBA của Access. Do vậy nếu bạn nào đã biết qua đôi chút về lập trình trong Access, hẵn sẽ dễ theo dõi hơn.

Với các bạn mới làm quen, tôi đề nghị các bạn nên chuẩn bị sẵn một tài liệu tham khảo thích hợp về Access VBA, chủ yếu là cú pháp lệnh dựng sẵn của VB.

Trong bài đính kèm, tôi có sơ lược phần lý thuyết, các bạn có thể tham khảo.

Vẫn tiếp tục nhận ý kiến của các bạn.

Xin góp ý về việc thiết kế Form dùng để cập nhật danh mục hàng hoá.
Khi khai báo thuộc tính Record Source cho Form này:
+ Nếu để nhập mới ta nên khai báo bằng câu lệnh SQL như sau:
SELECT * FROM tblDMHH WHERE False;
+ Khi nào cần xem danh mục xác định ta sẽ dùng code VBA để nạp lại thuộc tính Record Source với điều kiện lọc dữ liệu tương ứng.

Làm như vậy Form sẽ được mở nhanh hơn và ứng dụng tiêu tốn ít bộ nhớ hơn.

Lẽ ra nội dung góp ý này nên để ở những phần sau, song vì tôi nhận thấy đây là vấn đề cần lưu tâm khi thiết kế Form và Report nên góp ý luôn, kẻo mai mốt lại quên mất. Xin mod bỏ lỗi cho nhé.
 
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Cảm ơn bạn lehongduc.
To all mem:
Tip của bạn lehongduc rất hữu ích vì khi khởi nạp form sẽ nạp trắng dữ liệu, do vậy thời gian khởi nạp sẽ nhanh.

Tuy nhiên, cần lưu ý, do thiết kế chúng ta có 4 nút đầu trước sau cuối, nên nếu khởi nạp trắng thì 4 nút này vô tác dụng nếu lúc nạp vào người sử dụng muốn dùng chúng để di chuyển đến một record nào đó.
 
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Cảm ơn bạn lehongduc.
To all mem:
Tip của bạn lehongduc rất hữu ích vì khi khởi nạp form sẽ nạp trắng dữ liệu, do vậy thời gian khởi nạp sẽ nhanh.

Tuy nhiên, cần lưu ý, do thiết kế chúng ta có 4 nút đầu trước sau cuối, nên nếu khởi nạp trắng thì 4 nút này vô tác dụng nếu lúc nạp vào người sử dụng muốn dùng chúng để di chuyển đến một record nào đó.

Trao đổi thêm:
Với cách làm theo đề nghị của tôi, các nút lệnh duyệt từng mẫu tin tới lui chỉ có hiệu lực đối với các mẫu tin được nhập vào kể từ lúc mở Form.
Trong trường hợp cần duyệt các mẫu tin đang có trong table DmHanghoa theo 1 điều kiện nào đó chúng ta cần viết 1 thủ tục để duyệt theo điều kiện xác định (hoặc duyệt toàn bộ nếu cần).

Để tiện cho các Bạn tham khảo cụ thể, đồng thời tránh làm xáo trộn file ứng dụng chung chúng ta đang xây dựng, sau đây tôi xin thuyết minh chi tiết với 1 dữ liệu mẫu riêng:
File dữ liệu mẫu lưu tại link sau:
http://www.mediafire.com/download.php?zm21c0zwwml

Giả định tôi có table đặt tên là: DmHanghoa đăng ký danh mục hàng hoá
Trong đó có 2 field:
+ MSHH: đăng ký mã số hàng hoá
+ TenHanghoa: đăng ký tên hàng hoá

Tôi thiết kế Form nhập Danh mục hàng hoá đặt tên là: frmCapnhatDmHanghoa
Trong Form này:
+ có 3 TextBox: MSHH, TenHangHoa và 1 TextBox dùng để ghi tổng số mẫu tin hiện có trong table DmHanghoa
+ có các nút lệnh: cmdThemmoi, cmdToi, cmdLui, cmdXoa, cmdHienTatca, cmdLoc
+ Khai báo thuộc tính Record Source của Form như sau: SELECT * FROM DmHanghoa WHERE False

Thủ tục gán cho sự kiện Click của từng nút lệnh trên như sau:

Private Sub cmdloc_click()
'Lọc lại dữ liệu theo điều kiện xác định
Dim sDieukien
'Lấy điều kiện được khai báo thông qua hàm Inputbox
sDieukien = InputBox("Xin nhap vao 1 hoac mot so ky tu dau cua Ma so hang hoa can loc: ", "Loc Danh muc")
If Not IsNull(sDieukien) Then
'Gán lại RecordSource cho Form
Me.RecordSource = "SELECT * FROM DmHanghoa WHERE((DmHanghoa.MSHH) Like '" & sDieukien & "*');"
Me.Requery
End If
End Sub

Private Sub cmdthemmoi_click()
'Thêm mới
On Error GoTo Err_Command5_Click
'Gán lại RecordSource cho Form như lúc ban đầu
Me.RecordSource = "SELECT * FROM DmHanghoa WHERE False;"
Me.Requery 'Dòng này để nạp lại dữ liệu nguồn cho Form
'Chuyển sang chế độ nhập mới
DoCmd.GoToRecord , , acNewRec

Exit_Command5_Click:
Exit Sub

Err_Command5_Click:
MsgBox Err.Description
Resume Exit_Command5_Click

End Sub

Private Sub cmdtoi_click()
'Duyệt đến mẫu tin kế tiếp sau
On Error GoTo Err_Command6_Click

DoCmd.GoToRecord , , acNext

Exit_Command6_Click:
Exit Sub

Err_Command6_Click:
MsgBox Err.Description
Resume Exit_Command6_Click

End Sub

Private Sub cmdlui_click()
'Duyệt đến mẫu tin kế tiếp trước
On Error GoTo Err_Command7_Click

DoCmd.GoToRecord , , acPrevious

Exit_Command7_Click:
Exit Sub

Err_Command7_Click:
MsgBox Err.Description
Resume Exit_Command7_Click

End Sub

Private Sub cmdhientatca_click()
'Cho hiện toàn bộ các mẫu tin trong table DmHanghoa
'Bằng cách gán lại RecordSource cho Form
Me.RecordSource = "DmHanghoa"
Me.Requery

End Sub

Private Sub cmdxoa_click()
'Xoá mẫu tin đang thấy
On Error GoTo Err_Command11_Click

DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70

Exit_Command11_Click:
Exit Sub

Err_Command11_Click:
MsgBox Err.Description
Resume Exit_Command11_Click

End Sub
 
Sửa lần cuối:
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Tôi post tiếp phần tiếp theo: thiết kế form tìm kiếm của danh mục hàng hóa.

Mục đích là khi người sử dụng nhấnnút Tìm trên form frmDMHH sẽ hiện form tìm. Tring form tìm sẽ cho chọn hoặc là theo mã số, theo tên và theo loại hàng.


Sau đó cho hiện trong bảng phía dưới. Nhắp kép lên dòng nào thì nội dung dòng đó sẽ hiện lên form frmDMHH.

Phần in ấn sẽ được post sau.

 

Đính kèm

  • ThietKeForm_3.pdf
    317.3 KB · Lượt xem: 1,521
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Bác Phat ơi, mỗi lần bác viết xong bài ngoài file hướng dẫn PDF bác gửi cho bọn em cái sample luôn nhé. Vì đọc xong bài thì bọn em cũng hiểu rồi lấy ví dụ ra xem cho nó nhanh.
Em thấy sử dụng cái Each.. mạnh chứ. Nhất là về sau mình dùng cái này để xử lý một nhóm đối tượng dựa theo kiểu (text, combo..) hoặc thay đổi caption hàng loạt cho các đối này. Chẳng lẽ bây giờ chương trình có cả tây, ta cùng sài mà lại bắt tây nó đọc bằng giao diện tiếng Việt.
Lần đầu tiên thấy cái điều kiện where false mà bác Đức đưa ra, cái này hữu ích khi chưa muốn cho nó load dữ liệu.
 
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Bác Phat ơi, mỗi lần bác viết xong bài ngoài file hướng dẫn PDF bác gửi cho bọn em cái sample luôn nhé. Vì đọc xong bài thì bọn em cũng hiểu rồi lấy ví dụ ra xem cho nó nhanh.
Em thấy sử dụng cái Each.. mạnh chứ. Nhất là về sau mình dùng cái này để xử lý một nhóm đối tượng dựa theo kiểu (text, combo..) hoặc thay đổi caption hàng loạt cho các đối này. Chẳng lẽ bây giờ chương trình có cả tây, ta cùng sài mà lại bắt tây nó đọc bằng giao diện tiếng Việt.
Lần đầu tiên thấy cái điều kiện where false mà bác Đức đưa ra, cái này hữu ích khi chưa muốn cho nó load dữ liệu.

Bạn có biết rằng trong giai đoạn triển khai một phần mềm thì cái nào "nhức đầu" nhất không? Đó chính là nhập dữ liệu thử hoặc nhập dữ liệu chính thức từ nguồn dữ liệu sẵn có của đơn vị triển khai. :jfbq00191070412ahu0

Do vậy, mong các bạn thông cảm, tự mình nhập vào cho nó sang. "Kẻ góp của, người góp công".

Tôi không nói For Each không xài nhưng tùy tình huống mà xài. Chuyện tây ta không bàn ở đây vì khi ta xử lý control, hầu như chúng ta xử lý theo Name của chúng. Mà Name của chúng thì chỉ có developer biết, chứ user lấy gì biết !!!

Cái kỹ thuật dùng WHERE False (hoặc WHERE True) là kỹ thuật thường xài cho dân lập trình VB hoặc .NET (kể cả C#) khi muốn khởi gán một data table. Bác lehongduc đem vào đây là "lộ nghề" anh em hết. :xinloinhe:
 
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

ặc ặc, mới có cái where false mà bác Phatnq đã sợ lộ nghề rồi. Trông bác thế mà ki quá
:071::gun_guns:
-----------------------------------------------------------------------------------------
Thấy bác mượn đề xuất làm Server/Client em thấy nhất trí. Vì như thế sẽ toàn diện hơn.
Thấy bác phat vẫn lăn tăn là newbie khó tiếp cận. Vậy đề nghị cả nhà cho ý kiến để còn triển khai vì Coding cho Client và Server/Client có đôi chút khác biệt.
Làm phần mềm kế toán mà chỉ dùng cho một mình thì nghe có vẻ không ổn lắm
 
Sửa lần cuối:
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

ặc ặc, mới có cái where false mà bác Phatnq đã sợ lộ nghề rồi. Trông bác thế mà ki quá
:071::gun_guns:
-----------------------------------------------------------------------------------------
Thấy bác mượn đề xuất làm Server/Client em thấy nhất trí. Vì như thế sẽ toàn diện hơn.
Thấy bác phat vẫn lăn tăn là newbie khó tiếp cận. Vậy đề nghị cả nhà cho ý kiến để còn triển khai vì Coding cho Client và Server/Client có đôi chút khác biệt.
Làm phần mềm kế toán mà chỉ dùng cho một mình thì nghe có vẻ không ổn lắm

Chào các Bạn,
Tôi thấy cứ tiếp tục thực hiện theo hướng dẫn của "chủ xị" như chúng ta đang làm, đến khi nào đạt được mục tiêu đã đề ra ban đầu ta sẽ bước tiếp bước nữa: phát triển ứng dụng theo nhiều hướng khác nhau.

Trong quá trình xây dựng ứng dụng chúng ta cũng cần tránh việc "sử dụng dao mổ trâu để đi mổ gà", vừa nhọc nhằn vừa không đạt được mục tiêu sẽ dễ nản lòng.
 
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Chào các bạn
Mình là lính mới đang trong thời gian tìm hiểu Access tôi thấy Access rất hay trong các ứng dụng vừa và nhỏ, tình cờ vào đây thấy bác phatnq2002 lập ra chuyên mục này thật là một ý tưởng hay và phù hợp với những người đang tìm hiểu Access như tôi. Với lại mọi người ở đây có trình độ khác nhau nên tôi nghĩ chúng ta hay đi theo như mục tiêu ban đầu chúng ta đã đưa ra khi nào hoàn thiện rồi thì chúng ta phát triển tiếp cũng chưa muộn mà, như vạy mọi người dể theo dõi và hiểu vấn đề kỷ và sâu hơn.:mua:
 
Sửa lần cuối:
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Xin hoan nghênh chủ topic. Bài viết dễ hiểu và rất thực tế. Mong chủ topic phát huy thêm cho anh em học hỏi.
 
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Thấy bác mượn đề xuất làm Server/Client em thấy nhất trí. Vì như thế sẽ toàn diện hơn.
Thấy bác phat vẫn lăn tăn là newbie khó tiếp cận. Vậy đề nghị cả nhà cho ý kiến để còn triển khai vì Coding cho Client và Server/Client có đôi chút khác biệt.
Làm phần mềm kế toán mà chỉ dùng cho một mình thì nghe có vẻ không ổn lắm




Chỉ là đôi chút thôi chứ không có gì khác biệt nhiều đâu mà lo.

Nếu như bạn phân biệt (trong đầu) rõ ràng mô hình cơ sở dữ liệu 3 lớp thì khi đó viết ứng dụng chạy trên 1 máy cũng rõ ràng hơn.
 
Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

Muốn phần subCT có thanh trượt ngang dọc để có thể chứa được nhiều record thì phải làm như thế nào ạ? :xinloinhe:
 

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


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Kỹ thuật giải trình thanh tra BHXH

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

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top