Xư lý dữ liệu tiền tệ trong SAP

Các bài viết chia sẽ về các đoạn code, chương trình hoạt động và hữu ích trong lạp trình ABAP
Post Reply
User avatar
admin
Site Admin
Posts: 15
Joined: Mon Mar 07, 2022 4:43 pm
Location: HCM

Xư lý dữ liệu tiền tệ trong SAP

Post by admin »

Tiền tệ trong SAP là một chủ đề khá cốt lõi tuy nhiên vẫn có nhiều bạn dù lập trình SAP nhiều năm nhưng cũng chưa hẵn nắm bắt được hoàn toàn về chủ đề này. Cho nên tôi muốn chia sẽ chủ đề với các bạn lập trình ABAP để nắm bắt rõ hơn về cách tổ chức lưu trữ tiền tệ trong hệ thống SAP và cách xử lý trên đơn vị dữ liệu này.
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.
netprce.png
netprce.png (20.96 KiB) Viewed 3490 times
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ị.
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é.
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.
  • 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
  1. 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ệ VND

    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.
    Kết quả:
    convext.png
    convext.png (13.03 KiB) Viewed 3483 times
  2. 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ân

    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               =
        .
    Kết quả
    convinternal.png
    convinternal.png (14.43 KiB) Viewed 3483 times
Thông qua 2 ví dụ chuyển đổi kể trên chắc các bạn cũng phần nào hoặc có thể thấu đáo được cách tổ chức và xử lý dữ liệu tiền tệ trong SAP. Chúc các bạn có một ngày học tập và làm việc tốt đẹp và rất mong được sự đóng góp và chia sẽ kinh nghiệm của các bạn trong ngành.
Post Reply