Friday is awesome

SAPについて個人的なメモをまとめたブログです

MENU

Chat GPTでABAPコードを作ることはできるのか?


最近、AI関連のニュースが多く、その中でもChat GPT(今も猛烈な勢いで進化していて、GPT-4の発表があったばかり)はホットなワードでNHKや民放のニュースでも使われるくらい、一般的なニュースとして広がりを見せています。
このようなAIテクノロジーは、SAP/ABAPというクローズドな技術領域にどれくらい影響があるのでしょうか?SAP業界で働くうま味の一つとして、SAPの世界は閉じた環境のため新規参入障壁が高いということがあると思います(JAVAに比べて、技術習得のハードルが高い、など)。AIはこのような生態系をも打ち砕いていくのでしょうか?
試しに、Chat GPTでいくつか、SAP/ABAPに関する質問を投げかけてみました。

質問①:受注伝票から販売価格を取得するためのABAPプログラムサンプルを書いてください
回答①:以下は、受注伝票から販売価格を取得するためのABAPプログラムサンプルです。このサンプルは、T-code VA03(受注伝票の表示)で開かれた受注伝票の価格情報を取得することを前提としています。

REPORT z_get_sales_price_from_order.

* Declare necessary variables
DATA: lt_items TYPE TABLE OF vbap,
      ls_item TYPE vbap,
      lv_order_number TYPE vbak-vbeln,
      lv_sales_price TYPE vbap-netpr.

* Get order number from user
PARAMETERS: p_order_number TYPE vbak-vbeln.

* Get items for the specified order
SELECT * FROM vbap INTO TABLE lt_items
  WHERE vbeln = p_order_number.

* Loop through each item and get the sales price
LOOP AT lt_items INTO ls_item.
  lv_sales_price = ls_item-netpr.
  WRITE: / 'Sales price for item', ls_item-posnr, 'is', lv_sales_price.
ENDLOOP.

このプログラムは、ユーザーに受注伝票の番号を入力するように要求し、その番号に関連するすべてのアイテムを取得します。その後、各アイテムの販売価格を取得し、それを表示します。注意点として、このプログラムは単一の受注伝票に対してのみ機能します。複数の受注伝票から価格を取得する場合は、ループ内の条件を変更する必要があります。

質問②:画面の検索項目で受注伝票を複数指定できて、受注伝票明細の伝票番号、明細番号、プラント、保管場所、出荷ポイント、受注数量を一覧表示するABAPプログラムサンプルを書いてください
回答②:以下は、複数の受注伝票を指定できる検索項目を持ち、受注伝票明細の伝票番号、明細番号、プラント、保管場所、出荷ポイント、受注数量を一覧表示するABAPプログラムサンプルです。

REPORT z_display_sales_orders.

* Declare necessary variables
DATA: lt_vbap TYPE TABLE OF vbap,
      ls_vbap TYPE vbap,
      lt_vbak TYPE TABLE OF vbak,
      ls_vbak TYPE vbak,
      lv_order_number TYPE vbeln,
      lt_order_numbers TYPE TABLE OF vbeln,
      lv_plant TYPE werks_d,
      lv_storage_location TYPE lgort,
      lv_shipping_point TYPE vstel,
      lv_quantity TYPE vbap-erfmg.

* Get order numbers from user
PARAMETERS: p_order_numbers TYPE string.

* Split order numbers string into table
SPLIT p_order_numbers AT ',' INTO TABLE lt_order_numbers.

* Loop through each order number
LOOP AT lt_order_numbers INTO lv_order_number.
  
  * Get order header information for the specified order number
  SELECT SINGLE * FROM vbak INTO ls_vbak WHERE vbeln = lv_order_number.

  * Get order item information for the specified order number
  SELECT * FROM vbap INTO TABLE lt_vbap WHERE vbeln = lv_order_number.

  * Loop through each item and display information
  LOOP AT lt_vbap INTO ls_vbap.
    lv_plant = ls_vbap-werks.
    lv_storage_location = ls_vbap-lgort.
    lv_shipping_point = ls_vbap-vstel.
    lv_quantity = ls_vbap-erfmg.
    WRITE: / lv_order_number, ls_vbap-posnr, lv_plant, lv_storage_location, lv_shipping_point, lv_quantity.
  ENDLOOP.

ENDLOOP.
このプログラムでは、ユーザーがコンマで区切られた複数の受注伝票番号を入力するように要求し、その番号に関連する各アイテムの情報を取得し、それを表示します。注意点として、このプログラムは指定された受注伝票番号に関連するすべてのアイテムを取得しますが、ヘッダー情報は最初のアイテムからのみ取得します。また、検索項目の追加や変更がある場合は、SELECT文やループ内の表示項目を変更する必要があります。


瞬時にこれらのサンプルコードを生成する当たり、驚きをもってしまうわけですが、、
ABAPのコードとしては、回答②では、複数入力のところを,(コンマ)で区切るというコードにしていますが、ABAPerであれば、Select-optionを指定するところでしょう。また、受注明細を使えばよくて、受注ヘッダのVBAKを検索している理由もよく分かりません。これらを指摘して再質問してみます。
質問③:先ほどのコードでParametersを使わないで、Select-optionを使ってください
回答③:以下は、先ほどのコードでParametersを使わず、Select-optionsを使った場合のABAPプログラムサンプルです。

先ほどのコードというだけで、伝わるらしく、改良したコードを生成してくれました。
熟練のABAPerからは物足りないかもしれませんが、ABAP初心者がサンプルコードを参考にする際などには十分すぎるReferenceとなると思います。
一覧検索なんかは、わざわざ設計書作成して、コーディングして、テストしてといった開発工数はかけないで、業務要件を持っているユーザがChat GPTに命令してコード生成して、それをBASISが移送して終了みたいない時代が来るんでしょうか。
ABAPはほかの言語に比べればネット上の情報量はそれほど多い言語ではないので、他のプログラミング言語だとより高度で精確なこともできるのでしょうね。
SAP/ABAPの世界もAIの技術により変わっていきそうな気配です。
https://amzn.to/3JHRJN3  HANDBOOK OF CHATGPT