Hỏi Đáp

Welcome!

This community is for professionals and enthusiasts of our products and services.
Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

0

Report Purchase order trong OpenERP

Ảnh đại diện
vũ đình dũng

Em chào anh chị !!!
Anh chị cho em hỏi một chút thế này ạ. Trong package Purchase trong phần addons có một package là report và trong đó có một file là purchase_report.py, class purchase_report được xây dựng để tạo bảng lưu những giá trị cần thiết và có một hàm là def init(self, cr): để thực hiện câu truy vấn đến database lấy những giá trị cần thiết nhưng em không hiểu khi select họ lấy min(l.id) as id để làm gì ạ? l ở đây là purchase_order_line, theo em hiểu thì sau khi tạo bảng họ cần có id cho các record nhưng em không hiểu sao lại là min(l.id). Em rất mong các anh chị có thể gợi ý cho em phần này ạ, em cảm ơn anh chị.

Ảnh đại diện
Huỷ
5 Trả lời
0
Ảnh đại diện
Leo Tran
Best Answer

Chào Dũng,

Không chỉ trong purchase_report, mà rất nhiều report trong OpenERP đều có select min id. Nếu trường select min id mà là Null có nghĩa là không có bản ghi nào và ngược lại.
Như vậy mục đích của trường min id là giúp chúng ta kiểm tra xem trong câu select đấy có dữ liệu hay không. Đằng nào cũng phải select thì chúng ta select luôn min(id), rồi dùng trường đó để kiểm tra, thay vì chúng ta lại phải trọc vào database để select count.

Ví dụ: trong việc tính phân bổ tài sản, anh có câu truy vấn như sau?

CASE WHEN (select min(d.id) from account_asset_depreciation_line as d
left join account_asset_asset as ac ON (ac.id=d.asset_id)
where a.id=ac.id) = min(dl.id)
THEN a.purchase_value
ELSE 0
END[


Đơn giản nó chỉ là một thủ thuật thay cho việc em lại phải select count rồi kiểm tra count > 0.
Ảnh đại diện
Huỷ
1
Ảnh đại diện
vũ đình dũng
Best Answer

Vâng, em cảm ơn anh, chiều đi học về em sẽ ngâm thêm, em chào anh.

Ảnh đại diện
Huỷ
1
Ảnh đại diện
vũ đình dũng
Best Answer

Theo như anh bảo thì cái đó chỉ dùng để kiểm tra nhưng ở đây tại sao họ lại lấy theo purchase order line mà không phải là purchase order, em đang làm một cái report đơn giản theo cách họ làm nhưng cách biểu diễn của em khác họ, em vẫn thấy mập mờ chưa hiểu rõ lắm :(

Ảnh đại diện
Huỷ
1
Ảnh đại diện
vũ đình dũng
Best Answer

Em rất mong hướng dẫn từ anh chị. Em cảm ơn.

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Leo Tran
Best Answer
Theo như anh bảo thì cái đó chỉ dùng để kiểm tra nhưng ở đây tại sao họ lại lấy theo purchase order line mà không phải là purchase order, em đang làm một cái report đơn giản theo cách họ làm nhưng cách biểu diễn của em khác họ, em vẫn thấy mập mờ chưa hiểu rõ lắm :(

Lấy cái gì là do mục đích của họ. Như anh đã nói, ý nghĩa của nó là dùng để kiểm tra xem có dữ liệu hay không. Như vậy trong trường hợp này họ muốn kiểm tra xem puchase order đấy có line nào không? Về nguyên tắc, bất kỳ một purchase order nào cũng phải có ít nhất 1 line. Do đó min(l.id) luôn luôn khác null. Nếu = null nghĩa là dữ liệu có vấn đề.
Ảnh đại diện
Huỷ

Trả lời của bạn

Vui lòng đảm bảo câu trả lời của bạn có liên quan và giải đáp đúng nội dung câu hỏi. Nếu muốn bình luận về câu hỏi hoặc câu trả lời, hãy sử dụng công cụ Bình luận. Lưu ý, bạn có thể thay đổi nội dung trả lời thay vì trả lời lại 02 lần cho cùng một câu hỏi. Đồng thời bạn có thể nhấn nút để bầu chọn câu hỏi / câu trả lời tốt nhất.