- Select window that you want to insert graphic object and right click. System will list object that you can create.
In the example, I have window name ’HEADER2’ and I want to insert text element in this window. - On popup menu, you will select Create -> Text
Sunday, June 20, 2010
How to insert text element in SAP Smartforms
การกำหนดให้ window ขึ้นเฉพาะในหน้าสุดท้ายใน smartforms
เพียงแค่นี้ Window นั้นก็ขึ้นเฉพาะหน้าสุดท้ายแล้ว
Monday, May 24, 2010
No Vendor Specified
MESSAGE 'No data for selection' TYPE 'S'
จึงเกิดข้อความดังกล่าวขึ้น
วิธีนี้ถ้าเราไม่ต้องการแก้ไข Message Class = '00' ก็ให้ใช้คำสั่ง MESSAGE โดยกำหนด Class ที่ต้องการใช้ไปเลยเช่น
MESSAGE ID 'PN' TYPE 'S' NUMBER 016 WITH 'No data for selection'.
Monday, April 19, 2010
Intalio Introduction
ความจริง Intalio นั้นมี product อยู่หลายตัว แต่ตัวที่เรากำลังจะแนะนำนี้เป็นตัวที่ใช้จัดการเกี่ยวกับ Workflow โดยใช้มาตรฐานของ BPM กับ BPEL และ Version ที่ดูอยู่ก็เป็น community ซึ่งเราสามารถหาข้อมูลเกี่ยวกับ Version นี้ได้ใน http://community.intalio.com/
ข้อดีของ Version นี้เลยหลักคือ ฟรี สามารถ Download มาใช้ได้เลย สำหรับการ Download นั้นจะแบ่งออกเป็น 2 ส่วน คือ
- Designer การลง Designer นั้นก็แค่เรียก .exe ที่เราโหลดมาแล้วก็คลิก Next ไปเรื่อยๆแค่นั้น ส่วน OS ที่ใช้นั้นเท่าที่ลองมา Windows XP ใช้ได้ดี ส่วน Windows 2000 นั้นไม่เหมาะ
- Server การลง Server ก็ไม่มีอะไรมากแค่ Extract ไฟลืออกมาวางที่ไหนก็ได้บนเครื่องจากนั้นก็ Set Java home จากนั้นก็เรียก startup.bat(ลงบน Windows) หรือ startup.sh(ลงบน Linux) ก็ได้
แล้วไว้วันหลังเราจะมาลองอธิบายความสามารถของ Intalio กันมั่งนะ วันนี้เอาแค่ Install ให้ได้ก่อนค่ะ
Thursday, April 8, 2010
Function Key Standard Setting in SAP
F1 Help
F2 Choose
F3 Back (One Step)
F4 Possible Entries
F9 Select
F10 Jump to menu bar
F11 Save/Generate
F12 Cancel
F13 Print
F14 Delete
F17 Open
F21 First Page
F22 Previous Page
F23 Next Page
F24 Last Page
How to Upload and Download Source Code of ABAP/4
You can do it by select Utilities -> More utilities -> Upload/download -> Upload and then enter your pc file that want to upload in your ABAP editor. Finally, select action ’Copy’.
Download Source Code from ABAP Editor to PC File
You can do it by select Utilities -> More utilities -> Upload/download -> Download and then enter your pc file that want to download from your ABAP editor. Finally, select action ’Copy’.
How to Insert or Delete Comment Block in ABAP Editor
Select the statement line as block by hi-light and select menu Utilities -> Block/buffer -> Insert comment * in table control mode) or use hot key Ctrl + < in textedit control mode.
Delete Comment
Select the statement line as block by hi-light and select menu Utilities -> Block/buffer -> Delete comment * in table control mode) or use hot key Ctrl + > in textedit control mode.
Wednesday, April 7, 2010
How to Assign Dynamic Fields using Filed-Symbols in ABAP/4
You can create field name in run time and assign the created name in your field-symbols by statement "ASSIGN ... TO ...".
Example
DATA: name(20),
lv_check(1).
DATA: BEGIN OF itab OCCURS 0,
fld1(4),
fld2(4),END OF itab.
FIELD-SYMBOLS
. ...
...
LOOP AT itab.
IF lv_check = ’X’.
name = ’ITAB-FLD1’.
ELSE.
name = ’ITAB-FLD2’.
ENDIF.
ASSIGN (name) TO
. ...
...
ENDLOOP.
Color in ABAP/4
Name Code Color
COL_BACKGROUND 0 depends on GUI
COL_HEADING 1 grayish-blue
COL_NORMAL 2 bright gray
COL_TOTAL 3 yellow
COL_KEY 4 bluish green
COL_POSITIVE 5 green
COL_NEGATIVE 6 red
COL_GROUP 7 violet
FORMAT Options of Format Statement in ABAP/4
Option Description
COLOR n Specific background colors
INTENSIFIED Intensified the background color
INVERSE Swap background and foreground color
HOTSPOT Effect when mouse pointer and click
INPUT Generate input field
RESET Reset formats. The format will be backed to default format.
System Field When Generate ABAP/4 Report (Often to use)
Field Description
COLNO the current column
LINNO the current line
LINCT Number of list lines
LINSZ Line size of list
SROWS Number of lines on screen
SCOLS Number of column on screen
TITLE Program title
PAGNO Current page in list
How to Find the Number of Entries of Internal Table in ABAP/4
We can find out how many entries of internal table by apply statement "DESCRIBE".
Example
DATA: it_tab TYPE TABLE OF BKPF WITH HEADER LINE,
tot_lines TYPE i.
...
...
DESCRIBE TABLE it_tab LINES tot_lines.
Or you can apply statement ’LOOP AT’ and count it.
Example
LOOP AT it_tab.
tot_lines = tot_lines + 1.
ENDLOOP.
Operator for comparing strings in ABAP/4
Operator Description
CO Contains Only
CN Contains Not Only
CA Contains Any
NA Contains Not Any
CS Contains String
NS Contains No String
CP Matches Pattern
NP Not Match Pattern
How to Read Table Dynamically in ABAP/4
DATA: BEGIN OF itab OCCURS 0,
fld1(2),
fld2(2),
fld3(10),
fld4 TYPE i,
END OF itab,
wa_tab LIKE itab,
gv_key1(4) TYPE C VALUE ’FLD1’,
gv_key2(4) TYPE C VALUE ’FLD2’.
...
...
...
READ TABLE itab INTO wa_tab
WITH KEY (gv_key1) = ’AA’
(gv_key2) = ’BB’.
How to Generate Value Request by ABAP/4
Example
*** Screen Flow ***
PROCESS ON VALUE-REQUEST.
FIELD scn_kokrs MODULE create_value_request.
*** ABAP Editor ***
MODULE create_value_request INPUT.
DATA: BEGIN OF itab_request OCCURS 0,
kokrs LIKE TKA01-KOKRS,
bezei LIKE TKA01-BEZEI,
END OF itab_request.
SELECT KOKRS BEZEI
FROM TKA01
INTO TABLE itab_request.
CALL FUNCTION ’F4IF_INT_TABLE_VALUE_REQUEST’
EXPORTING
retfield = ’KOKRS’
value_org = ’S’
TABLES
value_tab = itab_request
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDMODULE.
ABAP/4 Example Code: ALV List by FM 'REUSE_ALV_LIST_DISPLAY'
TYPE-POOLS: SLIS.
DATA: it_spfli TYPE TABLE OF spfli WITH HEADER LINE,
it_cat TYPE SLIS_T_FIELDCAT_ALV,
wa_cat TYPE slis_fieldcat_alv.
START-OF-SELECTION.
SELECT * FROM spfli
INTO TABLE it_spfli.
PERFORM create_field_catalog.
CALL FUNCTION ’REUSE_ALV_LIST_DISPLAY’
EXPORTING
* I_INTERFACE_CHECK = ’ ’
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE = ’ ’
* I_CALLBACK_PROGRAM = ’ ’
* I_CALLBACK_PF_STATUS_SET = ’ ’
* I_CALLBACK_USER_COMMAND = ’ ’
* I_STRUCTURE_NAME =
* IS_LAYOUT =
IT_FIELDCAT = it_cat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = ’X’
* I_SAVE = ’ ’
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IR_SALV_LIST_ADAPTER =
* IT_EXCEPT_QINFO =
* I_SUPPRESS_EMPTY_DATA = ABAP_FALSE
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = it_spfli
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*&---------------------------------------------------------------------*
*& Form create_field_catalog
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_field_catalog .
IF it_cat[] is initial.
clear wa_cat.
wa_cat-col_pos = 1.
wa_cat-fieldname = ’CARRID’.
wa_cat-datatype = ’CHAR’.
wa_cat-inttype = ’C’.
wa_cat-intlen = 3.
wa_cat-seltext_l = ’Airline Code’.
wa_cat-seltext_m = ’Airline Code’.
wa_cat-seltext_s = ’Airline Code’.
append wa_cat to it_cat.
clear wa_cat.
wa_cat-col_pos = 2.
wa_cat-fieldname = ’CONNID’.
wa_cat-datatype = ’NUMC’.
wa_cat-inttype = ’N’.
wa_cat-intlen = 4.
wa_cat-seltext_l = ’Flight Conn. No’.
wa_cat-seltext_m = ’Flight Conn. No’.
wa_cat-seltext_s = ’Flight Conn. No’.
append wa_cat to it_cat.
clear wa_cat.
wa_cat-col_pos = 3.
wa_cat-fieldname = ’CITYFROM’.
wa_cat-datatype = ’CHAR’.
wa_cat-inttype = ’C’.
wa_cat-intlen = 20.
wa_cat-seltext_l = ’Dep. city’.
wa_cat-seltext_m = ’Dep. city’.
wa_cat-seltext_s = ’Dep. city’.
append wa_cat to it_cat.
clear wa_cat.
wa_cat-col_pos = 4.
wa_cat-fieldname = ’AIRPFROM’.
wa_cat-datatype = ’CHAR’.
wa_cat-inttype = ’C’.
wa_cat-intlen = 3.
wa_cat-seltext_l = ’Dep. airport’.
wa_cat-seltext_m = ’Dep. airport’.
wa_cat-seltext_s = ’Dep. airport’.
append wa_cat to it_cat.
clear wa_cat.
wa_cat-col_pos = 5.
wa_cat-fieldname = ’CITYTO’.
wa_cat-datatype = ’CHAR’.
wa_cat-inttype = ’C’.
wa_cat-intlen = 20.
wa_cat-seltext_l = ’Arrival city’.
wa_cat-seltext_m = ’Arrival city’.
wa_cat-seltext_s = ’Arrival city’.
append wa_cat to it_cat.
clear wa_cat.
wa_cat-col_pos = 6.
wa_cat-fieldname = ’AIRPTO’.
wa_cat-datatype = ’CHAR’.
wa_cat-inttype = ’C’.
wa_cat-intlen = 3.
wa_cat-seltext_l = ’Dest. airport’.
wa_cat-seltext_m = ’Dest. airport’.
wa_cat-seltext_s = ’Dest. airport’.
append wa_cat to it_cat.
ENDIF.
ENDFORM. " create_field_catalog
The output is:
Sale and Distribution (SD) Table in SAP
Table Description
VBAK Sale Order Header
VBAP Sale Order Line Items
LIKP Delivery Order Header
LIPS Delivery Order Line Items
VEKP Shipping Unit Header
VEPO Shipping Unit Line Items
EIKP Foreign Trade: Header
EIPO Foreign Trade: Line Items
VBRK Billing Header
VBRP Billing Line Items
VBUK Sale Document Status Header
VBUP Sale Document Status Line Items
VBFA Document Flow
VBPA Sale Document Partner
KONV Pricing Condition
Tuesday, April 6, 2010
ดึงข้อมูลของ TCode: STAT โดยใช้ ABAP
CALL FUNCTION 'SAPWL_STATREC_READ_FILE'
EXPORTING
READ_CLIENT = CLIENT
READ_END_DATE = ENDDATE
READ_END_TIME = ENDTIME
READ_START_DATE = STARTDATE
READ_START_TIME = STARTTIME
TABLES
V2_NORMAL_RECORDS = V2_NORMAL_RECORDS.
จากตัวอย่างจะเห็นว่าเราดึงข้อมูลใน STAT ไฟล์โดยกำหนดข้อมูลเกี่ยวกับ Client, End Date, End Time, Start Date และ Start Time เป็นเงื่อนไขในการเลือกข้อมูล และหลังจากเรียกฟังก์ชั่นนี้ทำงาน ข้อมูลจะถูกกลับมาที่ Internal Table: V2_NORMAL_RECORDS
Monday, April 5, 2010
วิธีการแก้ไข User Status ในใบสั่งผลิต โดยใช้ ABAP
ตัวอย่างการใช้ Function มีดังนี้
CALL FUNCTION 'I_CHANGE_STATUS'
EXPORTING
OBJNR = PA_OBJNR "Object Number
ESTAT_INACTIVE = lv_inactive "สถานะที่ Active อยู่ ณ ปัจจุบัน ซึ่งหลังจากรันแล้วจะถูกเปลี่ยนเป็นไม่ Active
ESTAT_ACTIVE = lv_active "สถานะที่ต้องการเซ็ตให้ Active
EXCEPTIONS
CANNOT_UPDATE = 1
OTHERS = 2 .
เรียก BAPI_GOODSMVT_CREATE โดยใช้ PHP
และทุกครั้งหลังจากเรียนก BAPI ที่กล่าวข้างต้นทำงานแล้ว ไม่พบข้อความผิดพลาด เราจะต้องเรียก BAPI_TRANSACTION_COMMIT เพื่อบันทึกข้อมูลเข้าสู่ระบบจริง แต่หากผลข้อผิดพลาด เราก็สามารถเรียก BAPI_TRANSACTION_ROLLBACK เพื่อดึงข้อมูลย้อนกลับ มาดูตัวอย่างกันดีกว่า
// This function receive refdoc and array of goods movement details
// and return data of material doc, material year and return message
function callissuesap($refdoc, $gmm_detail){
$return = array();
// Create saprfc-instance
$sap = create_connection();
// Import Parameters
$today = date("Ymd");
$header = array();
$header["PSTNG_DATE"] = $today;
$header["DOC_DATE"] = $today;
$header["REF_DOC_NO"] = $refdoc;
$header["HEADER_TXT"] = "";
$code = array();
$code["GM_CODE"] = "03";
$item = array();
$lineitem = array();
foreach ($gmm_detail as $gmm_line) {
$lineitem["ORDERID"] = $gmm_line["orderId"];
$lineitem["MATERIAL"] = $gmm_line["material"];
$lineitem["PLANT"] = $gmm_line["plant"];
$lineitem["STGE_LOC"] = $gmm_line["loc"];
$lineitem["BATCH"] = $gmm_line["batch"];
$lineitem["MOVE_TYPE"] = "261";
$lineitem["ENTRY_QNT"] = $gmm_line["qty"];
$lineitem["ENTRY_UOM"] = $gmm_line["une"];
$item[] = $lineitem;
}
// Call-Function
$result=$sap->callFunction("BAPI_GOODSMVT_CREATE",
array(
array("IMPORT","GOODSMVT_HEADER",$header),
array("IMPORT","GOODSMVT_CODE",$code),
array("EXPORT","MATERIALDOCUMENT",""),
array("EXPORT","MATDOCUMENTYEAR",""),
array("TABLE","GOODSMVT_ITEM",$item),
array("TABLE","RETURN",array())
));
// Call successfull?
if ($sap->getStatus() == SAPRFC_OK) {
$sap->callFunction("BAPI_TRANSACTION_COMMIT",array());
$return["MAT_DOC"] = $result["MATERIALDOCUMENT"];
$return["MAT_DOC_YEAR"] = $result["MATDOCUMENTYEAR"];
$return["RETURN"] = $result["RETURN"];
}
else {
$mess = array();
$messline = array();
$messline["TYPE"] = "E";
$messline["MESSAGE"] = $sap->getStatusTextLong();
$mess[] = $messline;
// $sap->printStatus();
$sap->callFunction("BAPI_TRANSACTION_ROLLBACK",array());
$return["MAT_DOC"] = "";
$return["MAT_DOC_YEAR"] = "";
$return["RETURN"] = $mess;
}
$sap->logoff();
return $return;
}
function create_connection() {
return $sap = new saprfc(array(
"logindata"=>array(
"ASHOST"=>"xxx.xxx.xxx.xxx" // application server
,"SYSNR"=>"xx" // system number
,"CLIENT"=>"xxx" // client
,"USER"=>"xxxxxxxxx" // user
,"PASSWD"=>"xxxxxxxxx" // password
)
,"show_errors"=>false // let class printout errors
,"debug"=>false)) ; // detailed debugging information
}
Information about GM_CODE
GM_Code 01: Goods receipt for purchase order
GM_Code 02: Goods receipt for production order
GM_Code 03: Goods issue
GM_Code 04: Transfer posting
GM_Code 05: Other goods receipts
GM_Code 06: Reversal of goods movements
คุณสามารถอ่านข้อมูลเพิ่มเติมได้ โดยไปที่ TCode: BAPI -> Materials Management -> Inventory Management, Goods Movement, CreateFromData -> Tab Documentation
How to apply BAPI_GOODSMVT_CREATE by PHP
Example
// This function receive refdoc and array of goods movement details
// and return data of material doc, material year and return message
function callissuesap($refdoc, $gmm_detail){
$return = array();
// Create saprfc-instance
$sap = create_connection();
// Import Parameters
$today = date("Ymd");
$header = array();
$header["PSTNG_DATE"] = $today;
$header["DOC_DATE"] = $today;
$header["REF_DOC_NO"] = $refdoc;
$header["HEADER_TXT"] = "";
$code = array();
$code["GM_CODE"] = "03";
$item = array();
$lineitem = array();
foreach ($gmm_detail as $gmm_line) {
$lineitem["ORDERID"] = $gmm_line["orderId"];
$lineitem["MATERIAL"] = $gmm_line["material"];
$lineitem["PLANT"] = $gmm_line["plant"];
$lineitem["STGE_LOC"] = $gmm_line["loc"];
$lineitem["BATCH"] = $gmm_line["batch"];
$lineitem["MOVE_TYPE"] = "261";
$lineitem["ENTRY_QNT"] = $gmm_line["qty"];
$lineitem["ENTRY_UOM"] = $gmm_line["une"];
$item[] = $lineitem;
}
// Call-Function
$result=$sap->callFunction("BAPI_GOODSMVT_CREATE",
array(
array("IMPORT","GOODSMVT_HEADER",$header),
array("IMPORT","GOODSMVT_CODE",$code),
array("EXPORT","MATERIALDOCUMENT",""),
array("EXPORT","MATDOCUMENTYEAR",""),
array("TABLE","GOODSMVT_ITEM",$item),
array("TABLE","RETURN",array())
));
// Call successfull?
if ($sap->getStatus() == SAPRFC_OK) {
$sap->callFunction("BAPI_TRANSACTION_COMMIT",array());
$return["MAT_DOC"] = $result["MATERIALDOCUMENT"];
$return["MAT_DOC_YEAR"] = $result["MATDOCUMENTYEAR"];
$return["RETURN"] = $result["RETURN"];
}
else {
$mess = array();
$messline = array();
$messline["TYPE"] = "E";
$messline["MESSAGE"] = $sap->getStatusTextLong();
$mess[] = $messline;
// $sap->printStatus();
$sap->callFunction("BAPI_TRANSACTION_ROLLBACK",array());
$return["MAT_DOC"] = "";
$return["MAT_DOC_YEAR"] = "";
$return["RETURN"] = $mess;
}
$sap->logoff();
return $return;
}
function create_connection() {
return $sap = new saprfc(array(
"logindata"=>array(
"ASHOST"=>"xxx.xxx.xxx.xxx" // application server
,"SYSNR"=>"xx" // system number
,"CLIENT"=>"xxx" // client
,"USER"=>"xxxxxxxxx" // user
,"PASSWD"=>"xxxxxxxxx" // password
)
,"show_errors"=>false // let class printout errors
,"debug"=>false)) ; // detailed debugging information
}
Information about GM_CODE
GM_Code 01: Goods receipt for purchase order
GM_Code 02: Goods receipt for production order
GM_Code 03: Goods issue
GM_Code 04: Transfer posting
GM_Code 05: Other goods receipts
GM_Code 06: Reversal of goods movements
You can read the further informations in tcode
How to retrieve data from transaction STAT
Example
CALL FUNCTION 'SAPWL_STATREC_READ_FILE'
EXPORTING
READ_CLIENT = CLIENT
READ_END_DATE = ENDDATE
READ_END_TIME = ENDTIME
READ_START_DATE = STARTDATE
READ_START_TIME = STARTTIME
TABLES
V2_NORMAL_RECORDS = V2_NORMAL_RECORDS.
In above example, i want to retreive stat data by client, enddate, endtime, startdate and starttime. After i call this function, the retreived data will be returned in internal table V2_NORMAL_RECORDS.
How to change user status by ABAP
Example:
CALL FUNCTION 'I_CHANGE_STATUS'
EXPORTING
OBJNR = PA_OBJNR
ESTAT_INACTIVE = lv_inactive
ESTAT_ACTIVE = lv_active
EXCEPTIONS
CANNOT_UPDATE = 1
OTHERS = 2 .
Saturday, April 3, 2010
How to get status by ABAP
This function require only object no. of production order.
Example
CALL FUNCTION 'STATUS_READ'
EXPORTING
* CLIENT = SY-MANDT
OBJNR = PA_OBJNR
* ONLY_ACTIVE = ' '
* IMPORTING
* OBTYP =
* STSMA =
* STONR =
* TABLES
* STATUS =
* EXCEPTIONS
* OBJECT_NOT_FOUND = 1
* OTHERS = 2 .
If we want to know only active status, we can mark 'X' in export parameter 'ONLY_ACTIVE'. This function will return all status in term of internal table and return active user status in import parameters.
Create Dynamic Select in ABAP/4
Example
TABLES: VBAK.
DATA: it_vbak TYPE TABLE OF vbak WITH HEADER LINE,
wa_fld(72) TYPE C,
it_fldtab LIKE TABLE OF wa_fld.
wa_fld = 'VBELN'.
APPEND wa_fld TO it_fldtab.
wa_fld = 'VBTYP'.
APPEND wa_fld TO it_fldtab.
wa_fld = 'AUDAT'.
APPEND wa_fld TO it_fldtab.
SELECT (it_fldtab) INTO CORRESPONDING FIELDS OF TABLE it_vbak
FROM VBAK
WHERE ERDAT = '20050105'.
IF SY-SUBRC = 0.
LOOP AT it_vbak.
write:/ it_vbak-vbeln,
it_vbak-vbtyp,
it_vbak-audat.
ENDLOOP.
ENDIF.
ท้าวความเรื่องการทำ Blog เกี่ยวกับ Programming
ยิ่งพูดมากเหมือนจะกลายเป็นเริ่มบ่นแล้ว วันนี้ท้าวความแค่นี้ก่อนดีกว่า ถ้าใครอยากโทรมาถามก็ได้นะ ที่เบอร์ 0863004260 ให้เบอร์ด้วย :) แต่อย่ามาขายของ หรือยืมเงินนะ ไม่มีหรอก หรือไงก็ Mail มาที่ thitimap@gmail.com ก็ได้
อ้อ เรามีอีก Blog นึงไว้เขียนนู่นนี่ที่ไม่เกี่ยวกับ programming นะ คือ http://nootid.blogspot.com/ ยังไงถ้าอยากรู้จักเราให้มากกว่านี้ในมุมอื่นนอกจากการเขียนโปรแกรมก็เชิญที่ blog นั้นได้นะ
Friday, April 2, 2010
วิธี การดึงข้อมูล System Status ของ Production Order โดยใช้ ABAP [2]
วิธีที่สองที่จะกล่าวถึงนี้เราจะเขียนวิธีการดึง System Status เองเลย ซึ่งความจริงก็ไม่ยาก เพราะ System Status นั้นจะเก็บอยู่ในตาราง JEST ซึ่งเราก็จะเอา เลขที่ OBJNR ที่เราหาได้จากตาราง AUFK เข้าไปทำการ Query เหมือนกัน
SELECT STAT INACT INTO TABLE it_stat
FROM jest
WHERE OBJNR = wa_aufk-objnr.
ถ้าเราต้องการเฉพาะสถานะที่ Active ก็ให้เราใส่เงื่อนไขดังนี้ เ้ข้าไปตอน Query
INACT = ' '
Completed Code:
DATA: it_stat TYPE TABLE OF JSTAT WITH HEADER LINE,
wa_aufk LIKE aufk.
SELECT SINGLE * FROM AUFK INTO wa_aufk
WHERE AUFNR = 'TEST54'.
IF SY-SUBRC = 0.
SELECT STAT INACT INTO TABLE it_stat
FROM jest
WHERE OBJNR = wa_aufk-objnr.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
LOOP AT it_stat.
WRITE:/ it_stat-STAT,
it_stat-INACT.
ENDLOOP.
ENDIF.
ENDIF.
ผลลัพธ์ที่ได้
E0001 X
E0010
I0001 X
I0002
I0010
I0016
I0028
I0115
I0118 X
I0215
I0340 X
I0361
I0369
I0420
จะเห็นว่าผลลัพธ์ที่ได้เหมือนกับวิธีแรกเลย
วิธีการดึงข้อมูล System Status ของ Production Order โดยใช้ ABAP [1]
CALL FUNCTION 'STATUS_READ'
EXPORTING
* CLIENT = SY-MANDT
objnr = wa_aufk-objnr
* ONLY_ACTIVE = ' '
* IMPORTING
* OBTYP =
* STSMA =
* STONR =
TABLES
STATUS = it_stat
EXCEPTIONS
OBJECT_NOT_FOUND = 1
OTHERS = 2
.
ฟังก์ชั่นนี้ใช้ง่ายมาก ขอเพียงรู้เลขที่ OBJNR ที่เราหาได้จากตาราง AUFK ที่นำ Production Order เข้าไป Query
ผลลัพธ์ที่ได้จะออกมาในรูปของ Internal Table ซึ่งมีโครงสร้างประกอบได้ด้วย STAT: รหัสสถานะ และ INACT: Inactive Flag
ในกรณีที่เราต้องการเฉพาะสถานะที่ Active ให้เราเอา Comment ของ ONLY_ACTIVE ออก และ Assign ค่า "X" ให้
ONLY_ACTIVE = ' X'
Completed Code:
DATA: it_stat TYPE TABLE OF JSTAT WITH HEADER LINE,
wa_aufk LIKE aufk.
SELECT SINGLE * FROM AUFK INTO wa_aufk
WHERE AUFNR = 'TEST54'.
IF SY-SUBRC = 0.
CALL FUNCTION 'STATUS_READ'
EXPORTING
* CLIENT = SY-MANDT
objnr = wa_aufk-objnr
* ONLY_ACTIVE = ' '
* IMPORTING
* OBTYP =
* STSMA =
* STONR =
TABLES
STATUS = it_stat
EXCEPTIONS
OBJECT_NOT_FOUND = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
LOOP AT it_stat.
WRITE:/ it_stat-STAT,
it_stat-INACT.
ENDLOOP.
ENDIF.
ENDIF.
ผลลัพธ์ที่ได้
E0001 X
E0010
I0001 X
I0002
I0010
I0016
I0028
I0115
I0118 X
I0215
I0340 X
I0361
I0369
I0420
วิธีการสร้าง Dynamic Selected ตอนทำ Query
วิธีการประกาศ Internal Table it_fldtab เป็นดังนี้
DATA: wa_fld(72) TYPE C,
it_fldtab LIKE TABLE OF wa_fld.
จากนั้นให้นำชื่อ Column ที่ต้องการ Select ใส่เข้าไปใน it_fldtab ดังนี้
wa_fld = 'VBELN'.
APPEND wa_fld TO it_fldtab.
wa_fld = 'VBTYP'.
APPEND wa_fld TO it_fldtab.
wa_fld = 'AUDAT'.
APPEND wa_fld TO it_fldtab.
จาก Code ข้างต้น เราเลือก Column ที่ชื่อ VBELN คือ เลขที่ Sale Order, VBTYP คือ ประเภทของเอกสาร, AUDAT คือ วันที่ของเอกสาร
จากนั้นก็ Query ข้อมูลตามเงื่อนไขที่ได้กำหนด
SELECT (it_fldtab) INTO CORRESPONDING FIELDS OF TABLE it_vbak
FROM VBAK WHERE ERDAT = '20050105'.
เมื่อ Query ข้อมูลเสร็จก็ทำการเขียนข้อมูลออกมา
IF SY-SUBRC = 0.
LOOP AT it_vbak.
write:/ it_vbak-vbeln, it_vbak-vbtyp, it_vbak-audat.
ENDLOOP.
ENDIF.
Completed Code:
TABLES: VBAK.
DATA: it_vbak TYPE TABLE OF vbak WITH HEADER LINE,
wa_fld(72) TYPE C,
it_fldtab LIKE TABLE OF wa_fld.
wa_fld = 'VBELN'.
APPEND wa_fld TO it_fldtab.
wa_fld = 'VBTYP'.
APPEND wa_fld TO it_fldtab.
wa_fld = 'AUDAT'.
APPEND wa_fld TO it_fldtab.
SELECT (it_fldtab) INTO CORRESPONDING FIELDS OF TABLE it_vbak
FROM VBAK WHERE ERDAT = '20050105'.
IF SY-SUBRC = 0.
LOOP AT it_vbak.
write:/ it_vbak-vbeln, it_vbak-vbtyp, it_vbak-audat.
ENDLOOP.
ENDIF.
วิธีการเรียกหน้าจอ Standard จาก ABAP Report
ขั้นตอนเป็นดังนี้
1. ให้ Select ข้อมูลที่เราต้องการแสดงในหน้าแรกก่อน ในตัวอย่างนี้ขอแสดงข้อมูลเลขที่ Sale Order โดยมีการรับค่าจากหน้าจอเป็น select-options และนำมา Query ในตาราง VBAK จากนั้นให้นำข้อมูลที่ Query ได้มาเขียนออกหน้าจอ
SELECT-OPTIONS s_vbeln for vbak-vbeln.
START-OF-SELECTION.
SELECT * FROM vbak INTO TABLE it_vbak
WHERE vbeln in s_vbeln.
LOOP AT it_vbak.
WRITE:/ it_vbak-vbeln.
HIDE it_vbak.
ENDLOOP.
จะสังเกตเห็นว่าตอนที่เรา WRITE ข้อมูลออกหน้าจอนั้นได้เรียกคำสั่ง HIDE ด้วย ซึ่งคำสั่งนี้จะมีผลเมื่อต้องการให้รายงานของเราสามารถ Drill-Down ได้ โดยใช้คู่กับ Event: AT LINE-SELECTION
2. เราจะใช้ Event: AT LINE-SELECTION. เพื่อให้สามารถ Double Click ได้ จากนั้นให้เรียกคำสั่ง CALL TRANSACTION เพื่อใช้ในการเปิดหน้าจอ Standard
AT LINE-SELECTION.
IF sy-lsind = 1.
SET PARAMETER ID 'AUN' FIELD it_vbak-vbeln.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDIF.
จากตัวอย่างเราได้มีการเปิดหน้าจอ
Completed Code:
TABLES vbak.
DATA: it_vbak TYPE TABLE OF vbak WITH HEADER LINE.
SELECT-OPTIONS s_vbeln for vbak-vbeln.
START-OF-SELECTION.
SELECT * FROM vbak INTO TABLE it_vbak
WHERE vbeln in s_vbeln.
LOOP AT it_vbak.
WRITE:/ it_vbak-vbeln.
HIDE it_vbak.
ENDLOOP.
AT LINE-SELECTION.
IF sy-lsind = 1.
SET PARAMETER ID 'AUN' FIELD it_vbak-vbeln.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDIF.