Chào các bác,
Mình có một vấn đề thế này về số đơn hàng trong quá trình sản xuất.
Mình làm theo quy trình sản xuất khép kín: Báo giá => Sale Order => Manufacturing Order => Delivery Order
Nhu cầu là tất cả đối tượng này đều phải có thông tin về số PO(yêu cầu chào giá) của Khách hàng. số PO này mình không kiểm soát được vì do phần mềm của họ tạo ra.
Khi báo giá thì thực chất mình nhận một đơn báo giá của Khách hàng với số là: PO00001 (giả sử phần mềm của họ tạo ra số này). Sau đó mình nhập Báo giá và Sale Order với trường Reference/Description = PO00001 (Nhập tay vào). Hệ thống của mình tự đánh mã cho Sale Order là SO0001.
Sau khi confirm SO thì hệ thống tự tạo ra lệnh sản xuất MO00001. Lệnh này chỉ có thông tin là Reference từ SO0001 chứ không có thông tin PO00001.
Tương tự như vậy với Delivery Order cũng chỉ reference tới SO0001 thôi.
Các bộ phận sản xuất của bên mình từ trước giờ đều căn cứ vào số PO của khách hàng để định danh và để tham chiếu thông tin. Do đó cần thông tin này ở các đối tượng trên.
Các bác tư vấn cho mình cách làm được không?
Mình có mấy hướng giải quyết nhưng chưa được cái nào:
1. Thêm custom field kiểu text vào MO và DO để tự nhập tay. Cách này hơi bị thủ công và phải thêm một công đoạn nhập, trong khi dữ liệu reference cũng đã có. Bản chất hệ thống có lưu quan hệ giữa MO và SO mà lại phải làm vậy.
2. Thêm custom filed kiểu reference hoặc many to many vào MO để reference tới SO. => Chưa biết cách làm và không biết khả thi hay không?
3. Mình băn khoăn hệ thống có lưu quan hệ giữa MO và SO nhưng chưa biết cách nào để lấy ra đối tượng SO trong MO. Nếu lấy ra được thì sẽ hiển thị Reference/Description của SO.
Cảm ơn các bác.
5 Trả lời
Dear Thomas,
Mình xin có một số ý kiến về thảo luận này của bạn như sau:
- Hiện tại Odoo vẫn chưa cho người dùng tạo custom field kiểu reference. Bằng chứng là khi bạn tạo mới một custom field, nếu bạn chọn type là reference thì 2 trường Object Relation và Relation Field bị ẩn đi (readonly).
- Mặc định Odoo chỉ nhận diện số SO làm reference cho các tài liệu liên quan như PO, DO, MO,.. Trong trường hợp của bạn thì rõ ràng là bạn phải bổ xung thêm 1 trường kiểu Char vào SO, trường này để nhập thông tin PO của khách hàng. Sau đó mỗi đối tượng liên quan như PO, MO,.. bạn phải bổ sung thêm 1 trường và thiết lập related tới SO để show PO của khách hàng. Tất nhiên, trường hợp này bạn phải viết phân hệ tùy biến.
Cách đơn giản nhất, như bạn Coffee One đã trả lời: nội bộ trong công ty bạn sẽ sử dụng SO để làm reference thay vì dùng PO của khách hàng. Vì bạn không thể kiểm soát được tình duy nhất của PO mà khách hàng tạo ra, vì lý do nào đó họ đều tạo ra 2 PO giống nhau (đều là PO00001) thì bạn sẽ quản lý như thế nào?
Thân ái!
Thomas wrote:Với nhu cầu này của bạn, bên mình có thể chỉ cần 1~2 ngày là có thể hoàn thành một module đáp ứng đc nhu cầu đó. Đương nhiên, chi phí cũng rất dễ chịu ^_^
Có cách nào để ko phải viết phân hệ tùy biến mà làm được điều này không bác? Nếu không thì có khi phải nhập tay.
Viết phân hệ tùy biến thời gian này mình chưa có nguồn lực để làm được.
Thomas wrote:Và theo mình nghĩ viết customize module cũng nên hạn chế vì cần phải merge code giữa odoo và nhánh của mình.Đừng bao giờ sửa code của Odoo. Thay vì thế hãy viết module để kế thừa và xử lý nghiệp vụ trên các module viết thêm đó. Thế mạnh của Odoo chính là viết module thoải mái, giải quyết mọi nghiệp vụ mà mặc định không có bằng cách bổ sung thêm các apps/module.
Theo mình thì nên giải quyết như sau:
Thêm một trường kiểu text vào Sales Order, có thể đặt tên là Customer PO chẳng hạn, để lưu số PO của khách hàng.
Nội bộ trong cty sẽ sử dụng số SO (nội bộ, do chính phần mềm của mình tạo ra) để định danh thay vì sử dụng Customer PO như trước đây. Sử dụng số này thuận tiên hơn cả .
Với bộ phận kinh doanh (là người giao dịch với khách hàng) thì sẽ biết cả SO và Customer PO để tiện giao dịch.
Hi Thomas,
Hiện tại không có cách nào khác ngoài viết customize module, vì như mình giải thích, Odoo chưa cho tạo related field trên UI (giao diện người dùng).
Bạn đâu có sửa trực tiếp vào code của Odoo đâu. Thay vì thế bạn sẽ viết module riêng để kế thừa lại model của Odoo, thêm trường, ghi đè phương thức,… Do đó không ảnh hưởng gì đến code của Odoo cả. Trừ một số vô cùng ít trường hợp buộc phải hack code
Thân ái!
Mình đồng ý dùng SO làm số để nội bộ công ty quản lý.
Sau đó mỗi đối tượng liên quan như PO, MO,.. bạn phải bổ sung thêm 1 trường và thiết lập related tới SO để show PO của khách hàng. Tất nhiên, trường hợp này bạn phải viết phân hệ tùy biến.
Có cách nào để ko phải viết phân hệ tùy biến mà làm được điều này không bác? Nếu không thì có khi phải nhập tay.
Viết phân hệ tùy biến thời gian này mình chưa có nguồn lực để làm được. Và theo mình nghĩ viết customize module cũng nên hạn chế vì cần phải merge code giữa odoo và nhánh của mình.