2015年3月26日 星期四

ABAP4: Add or subtract SAP Date Time

ABAP4: Add or subtract SAP Date Time By Timestamp

SAP 的日期與時間 SY-DATUM & SY-UZEIT 是分開,並不像 Oracle datetime 可以直接加減運算,因此可透過轉換成 Timestamp (UTC) 變成秒後,再針對要增加 or 減少的時間轉換成秒後進行運算,最後再把 Timestamp 轉為 Date Time

第一種方法:

透過 RKE_TIMESTAMP_CONVERT_INPUT 把時間轉換成 UTC Timestamp,再透過 RKE_TIMESTAMP_CONVERT_OUTPUT 轉回 DATE/TIME.

CALL FUNCTION 'RKE_TIMESTAMP_CONVERT_INPUT'


CALL FUNCTION 'RKE_TIMESTAMP_CONVERT_OUTPUT'

2015年3月24日 星期二

ABAP/4 : How to get file list from application server folder

有的時侯我們會提供將報表的資料透過 Open dataset 的方式寫入 Server 上的路徑,因此可能會需要列出某個目錄裡有哪些檔案提供 User 下載來使用,則可透過下面方式取得

主要的幾個功能

開始對指定的目錄進行讀取
CALL 'C_DIR_READ_START'
依序捉取目前指定路徑的 Folder

CALL 'C_DIR_READ_NEXT'
結束前面 C_DIR_READ_START 功能,通常在程式一開始會先呼叫一次,避勉其他程式漏了呼叫 C_DIR_READ_FINISH 造成異常

CALL 'C_DIR_READ_FINISH'

2015年3月23日 星期一

ABAP/4 : How to get file list from local computer folder

How to get file list from local computer folder

目前可透過 FM TMP_GUI_DIRECTORY_LIST_FILES 捉取指定目錄下的 Folder List 與 File List,回傳的 Structure SDOKPATH 的 PATHNAME 為 CHAR(255) 因此可以

CALL FUNCTION 'TMP_GUI_DIRECTORY_LIST_FILES'

但回傳的 FILE_TABLE 與 DIR_TABLE 只有名稱,並沒有 File Size, Last Modify Date,因此要再透過 CL_GUI_FRONTEND_SERVICES=>DIRECTORY_LIST_FILES 捉取檔案的資料,只是此 Class Interface 並沒有回傳 Folder List,因此要與前面 FM 結合使用


CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_LIST_FILES

2014年8月4日 星期一

ABAP/4 : How to backup (or download) SAP Z report program?

參考 : http://scn.sap.com/thread/1258318

備份程式對程式設計師來說是一個相當重要的工作,雖然 SAP 本身已有 Version Management,但異地備份的工作仍不能省略,至少對自己重要的程式身邊留一份比較安全。
主要的語法 READ REPORT 'ZXXXXX' INTO [INTERNAL TABLE].

2014年7月30日 星期三

ABAP/4 : How to check program or background JOB name has already been executed


How to check program has already been executed


在有些情況下,Add-On 程式不能同時執行,這時則必需使用下面 Function 判斷程式是否已經有在執行,主要是透過產生 SM12 的 Lock Argument 的方式,確認目前執行時,沒有相同的 Lock Argument 存在


CALL FUNCTION 'ENQUEUE_ESINDX'
  EXPORTING RELID = 'ZZ'
    SRTFD = SY-CPROG
    SRTF2 = 0
    _SCOPE = '3'
  EXCEPTIONS FOREIGN_LOCK = 1
    SYSTEM_FAILURE = 2.

參數說明 :
RELID = 'ZZ' "Hard code
SRTFD = SY-CPROG   "Enqueue 的參數2 - 目前執行的程式名稱
SRTF2 = 0          "Enqueue 的參數2 - 依情況決定是否使用,例如 0 已被 Lock, 則加 1,最多只能到 5 (表示同時只能執行五次此程式)
_SCOPE = '3'       "請參考 SAP _SCOPE

2014年2月26日 星期三

ABAP/4 : Using value-request popup screen to select Internal table or customize value by F4IF_INT_TABLE_VALUE_REQUEST

有的時侯,User 可能會需要使用特定的選單來進行選擇,在不建立 Search Help 的情況下,可以透過 Fuction Module : F4IF_INT_TABLE_VALUE_REQUEST 產生選擇的畫面。

如下圖,User 可自行定義 PARAMETERS,可選擇的畫面


2013年10月23日 星期三

ABAP/4 Import/Export internal table from program (Memory ID)

User 常會說我需要捉取 Program A 和 B 的資料合起來顯示,但如果要把 Program A 和 B 程式邏級寫成 Function Module 或模組化礦日廢時,此時則可以透過 Memory ID 進行資料的 Share



主要語法 : 

A) EXPORT [SOURCE INTERNAL TABLE] TO MEMORY ID '[UNIQUE_MEMORY_STRING]'.

B) IMPORT [SOURCE INTERNAL TABLE] TO [TARGET INTERNAL TABLE] FROM MEMORY ID '[UNIQUE_MEMORY_STRING]'.

2013年10月16日 星期三

How to export SE11 table fields list?

我們經常使用 SE11 要查詢特定的欄位,或是由 Description 來找尋欄位的描述,但使用 Ctrl + F 只能找到第一筆符合的資料,或是為了匯出 Field List,但在 SE11 並無法使用 Save To Local File 的方式進行。




2013年10月15日 星期二

ABAP/4 How to create a dynamic internal table

一般宣告 Internal Table 時,都需要指定欄位,如下,此 Table 只能有兩個欄位

DATA: BEGIN OF ITAB OCCURS 0,
        FIELD1 TYPE I,
        FIELD2 TYPE C,
      END OF ITAB.
但有時欄位可能依特殊條件而需要增加,則此時就必需要自訂 Internal Table。

宣告:

"指標 for 動態 Table 與 Work Area
FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE,
               <DYN_WA>.
"產生 I_IFC 內容的 Work Area & 動態 Table 要建立的欄位
DATA: WA_IFC TYPE LVC_S_FCAT,  
      I_IFC TYPE LVC_T_FCAT.   
"METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE 
"回傳的 Table & Line
DATA: DY_TABLE TYPE REF TO DATA,
      DY_LINE TYPE REF TO DATA.

2013年9月9日 星期一

How to export SM35 job log

有時侯在使用 SM35 執行完 JOB,需要把產生的結果匯出,但在下面的畫面並不能進行 Export 的功能。

2013年7月31日 星期三

ABAP/4 Create dropdown list in selection screen or table control

有時侯在畫面希望能自訂 Dropdown List 中的選項給 User 選擇,而不要再額外建立 DOMAIN 時,可以使用下面方法。

主要的程式
====================================================
TYPE-POOLS: VRM.

DATA: NAME TYPE VRM_ID,
LIST TYPE VRM_VALUES,
VALUE LIKE LINE OF LIST.

NAME = 'P_LIST'.

VALUE-KEY = '1'.
VALUE-TEXT = 'LINE 1'.
APPEND VALUE TO LIST.

VALUE-KEY = '2'.
VALUE-TEXT = 'LINE 2'.
APPEND VALUE TO LIST.

CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING ID = NAME VALUES = LIST.
====================================================

How to install & specified python version or distreibtuion package version in google colab

在買了 RTX 3080 要來 挖礦...  嗯~是跑機器學習後,結果發現了 GOOGLE COLAB,其實之前在「GAN 對抗式生成網路」一書就有看到,但資訊人就是什麼都想自己安裝,在本機用 Anaconda + pyCharm 弄了 GPU 環境,結果有天從新竹回家發現家裡沒...