Kiểu dữ liệu tiền tệ trong SAP về cơ bản cũng được định nghĩa bởi kiểu decimal, tuy nhiên về cách lưu trữ tiền tệ khá đặc biệt trong hệ thống SAP. Như các bạn có thể thấy tiền tệ trên thế giới có sự chệnh lệch rất lớn về mệnh giá do vậy có những loại tiền tệ không có phần mở rộng thập phân điển hình như tiền Việt Nam đơn vị bé nhất là 1 đồng và không thể nhỏ hơn. Tuy nhiên đối với tiền USD có mệnh giá lớn 1 USD có giá trị hơn 20.000 VNĐ hiện tại và do vậy mà tiền USD có phần lưu trữ mở rộng thập phân là 2 chứ số. Tuy nhiên tất cả các giá trị tiền tệ không phân biệt đơn vị tiền tệ là gì vẫn được lưu chung trong một kiểu dữ liệu decimal và phần mở rộng thập phân là tuỳ ý. Dưới đây là một ví dụ điển hình về một kiểu dữ liệu tiền tệ trong SAP, có độ dài 11 ký tự trong đó 2 ký tự dành cho phần thập phân. Tuy nhiên về cách lưu trữ giá trị dữ liệu tiền tệ sẽ khá là đặc biệt cũng khó giải thích bằng lời cho nên các bạn hãy xem ví dụ sau đây để nắm rõ hơn về cách thức.
Ví dụ khi tôi lưu trữ 20.000 VND vào trong kiểu tiền tệ có độ dài thập phân 2 chữ số sẽ là 200,00. Như các bạn thấy toàn bộ các chữ số có trong mệnh giá được lưu trữ và không quan tâm tới kiểu dữ liệu lưu trữ có bao nhiêu ký tự thập phân. Tuy nhiên với 1 USD khi lưu vào trong cùng kiểu dữ liệu này sẽ là 1,00 và lý do là vì trong kiểu tiền tệ này có phần mở rộng thập phân là 2 chứ số. Nghĩa rằng nếu 1 mệnh giá trong một đơn vị tiền tệ nào đó sẽ được thêm vào phần ký tự thập phân mà đơn vị tiền tệ đó quy định trước khi lưu trữ, nếu không có nó sẽ giữ nguyên giá trị.
Cũng chính vì cách tổ chức lưu trữ đặc biệt trong kiểu dữ liệu tiền tệ nên với loại dữ liệu này chúng ta không thể lấy và sử dụng ngay mà chúng ta cần phải thông qua các function module để chuyển đổi giá trị từ kiểu tiền tệ sang một kiểu dữ liệu decimal thông thường trước khi thực hiện các công việc tính toán. SAP cung cấp cho chúng ta các function module để chúng ta thực hiện công việc chuyển đổi này, điển hình là 2 function module sau đây: BAPI_CURRENCY_CONV_TO_EXTERNAL, BAPI_CURRENCY_CONV_TO_INTERNAL.Và điều gì sẽ xảy ra nếu chúng ta lưu 1 USD trong kiểu dữ liệu tiền tệ có 4 chữ số thập phân? Nếu các bạn hiểu rõ vấn đề ắt hẵn các bạn đã có câu trả lời trong đầu. Hãy cho tôi biết các bạn hiểu như thế nào bằng cách trả lời bên dưới nhé.
- BAPI_CURRENCY_CONV_TO_EXTERNAL: chuyển đổi giá trị từ kiểu tiền tệ sang giá trị decimal thông thường
- BAPI_CURRENCY_CONV_TO_INTERNAL: Chuyển đổi giá trị từ kiểu decimal thông thường sang kiểu tiền tệ trước khi lưu trữ vào cơ sở dữ liệu
- BAPI_CURRENCY_CONV_TO_EXTERNAL
+ Tham số đầu vào:
- CURRENCY: đơn vị tiền tệ
- AMOUNT_INTERNAL: giá trị đầu vào trong kiểu tiền tệ
+ Tham số đầu ra:
- AMOUNT_EXTERNAL: giá trị đầu ra ở định dang decimal thông thường
Ví dụ chuyển đổi giá trị 100 từ định dạng tiền tệ sang định dạng decimal thông thường trong tiền tệ VNDKết quả:Code: Select all
DATA: lv_val TYPE bapicurr-bapicurr, lv_wert TYPE bprei VALUE 100. CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL' EXPORTING currency = 'VND' amount_internal = lv_wert IMPORTING amount_external = lv_val.
- BAPI_CURRENCY_CONV_TO_INTERNAL
+ Tham số đầu vào:
- CURRENCY: đơn vị tiền tệ
- AMOUNT_EXTERNAL: giá trị đầu vào trong kiểu tiền tệ
- MAX_NUMBER_OF_DIGITS: độ dài cực đại kiểu tiền tệ
+ Tham số đầu ra:
- AMOUNT_INTERNAL: giá trị đầu ra ở định dang tiền tệ
Ví dụ: chuyển đổi 100 VND trong định dang decimal 4 chữ số thập phân thông thường sang định dạng tiền tệ 2 chữ số thập phânKết quảCode: Select all
DATA: lv_val TYPE bapicurr-bapicurr VALUE 100, lv_wert TYPE bprei. CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL' EXPORTING currency = 'VND' amount_external = lv_val max_number_of_digits = 11 IMPORTING amount_internal = lv_wert * RETURN = .