วันนี้เจอปัญหาในการแก้ไขข้อมูลในหน้า Supplier Sites  เมื่อมีการแก้ไขข้อมูล จะขึ้น error ดังในรูป

 
 


โดยเมื่อมีการแก้ไขใดๆ ไปแล้วข้อมูลจะคืนกลับเป็นข้อมูลเดิม (แก้ไม่ได้นั่นเอง)  วิธีแก้ไขลองแก้ตาม link นี้
http://greenebizsolutions.blogspot.com/2009/10/frm-40654-record-has-been-updated.html
  
สาเหตุเกิดจากการเว้นวรรคช่องว่าง  ในแต่ละ column ข้อมูลที่เรียกว่า trailing spaces มากเกินไป
Solution The update you need to run is as follows:

Update po_vendor_sites_all
set VENDOR_SITE_CODE = rtrim(VENDOR_SITE_CODE)
where VENDOR_SITE_CODE != rtrim(VENDOR_SITE_CODE);

Update po_vendor_sites_all
set VENDOR_SITE_CODE = ltrim(VENDOR_SITE_CODE)
where VENDOR_SITE_CODE !=ltrim(VENDOR_SITE_CODE);

Commit;

ตาม script คือให้ update ตัดช่องว่างทางซ้าย-ขวา ใน column ต่างๆ ในหน้า supplier site ทิ้งไป
โดยให้ update column ต่างๆ เหล่านี้

VENDOR_SITE_CODE
ADDRESS_LINE1
ADDRESS_LINE2
ADDRESS_LINE3
ADDRESS_LINE4
CITY
STATE
PROVINCE
COUNTY
AREA_CODE
PHONE
FAX
VAT_REGISTRATION_NUMR
EMITTANCE_EMAIL
 

จากลอง แก้ไขข้อมูล ก็จะสามารถแก้ไขได้ปกติ แล้วครับ

.. 

Below is an example of DBMS_XMLGEN.getxml to generate XML tags directly out of the query

SELECT DBMS_XMLGEN.getxml(
'SELECT CURSOR(SELECT oha.order_number,
ola.ordered_item,
ola.ordered_quantity
FROM ont.oe_order_headers_all oha,
ont.oe_order_lines_all ola
WHERE oha.header_id = ola.header_id
and oha.order_number in (&order_number) order by ola.line_id) as order_detail,
CURSOR(SELECT ohd.name, ohs.hold_comment
FROM ont.oe_hold_sources_all ohs,
ont.oe_order_holds_all ohld,
ont.oe_hold_definitions ohd,
ont.oe_order_headers_all oha,
ont.oe_order_lines_all ola
WHERE oha.header_id = ola.header_id
AND ola.line_id = ohld.line_id
and ohld.hold_release_id is null
AND ohld.hold_source_id = ohs.hold_source_id
AND ohs.hold_id = ohd.hold_id
AND oha.order_number = &&order_number) as holds_detail
FROM DUAL')
FROM DUAL

Output
 
ที่มา .....
http://sureshvaishya.blogspot.com/2010/04/example-of-dbmsxmlgengetxml-to-generate.html
 
    สำหรับผู้ที่ใช้งาน E-Business  คงจะต้องเคยทำ Miscellaneous Transaction กันบ้าง  
ปกติหน้าจอก็จะเป็นคล้ายๆ กับในรูปด้านล่างนี้   โดยต้องกำหนด transaction type ที่จะทำ
และกำหนดรายการที่จะทำ item, subinventory, uom, quantity, account code เยอะเชียว..
 
 
 
 
 
หากข้อมูลที่ต้องการทำรายการมีเป็นพันรายการ, วันที่แตกต่างกัน หรือ เลขที่บัญชีแตกต่างกัน ล่ะ 
คงจะเพิ่มความยากลำบากในการป้อนข้อมูลรายการ  มากเลยทีเดียว
 
 
ทางออก คือ การใช้ API ของ Miscellaneous Transaction Interface  โดยพระเอกของเราคือตารางที่ชื่อว่า
"MTL_TRANSACTIONS_INTERFACE"   หลักการคือ insert ข้อมูลที่ต้องการลงไป และรอให้
concurrent กวาดข้อมูลเข้าไปลงรายการให้อัติโนมัติ
 
สำหรับ field ที่จะใช้และค่าที่ระบุมีดังต่อไปนี้  (สำหรับ Misc Receipt)
 
 
 
ค่าต่างๆ ที่จะต้องใช้หาได้จากเมนูในหน้า App ดังนี้

transaction_type_id
 
 
distribution_account_id
 
 
user_id, created_by
 

ใช้ SQL Insert ค่าลงไปตาม field ที่ระบุไว้   กรณีมีหลายๆ รายการก็เอาคำสั่งมาต่อๆ กันแล้วสั่งรันแบบ Execute Script



หลังจาก insert ค่าเข้าไปในตาราง   จากนี้ก็รอสักพัก  รอให้ concurrent มากวาดข้อมูลไปทำรายการ
เมื่อรายการโดนทำไปแล้ว  ข้อมูลชุดนี้จะหายไปจากตารางนี้เอง ครับ
 
 
 
 
เปรียบเทียบ ON HAND ก่อนหลัง  ใส่เพิ่มเข้าไปอีก 10,000 KG  ถูกต้องไม่มีปัญหาอะไร
 
 
 
 
ตัว Transaction Date ที่ระบุเข้าไปคือวันที่ 15/05/2011   ลองเรียกรายงาน Transaction Register ตาม item และวันที่
 
 
 
 
ได้ผลลัพธ์ ออกมาถูกต้องเช่นเดียวกัน   เสร็จแล้วครับ  สำหรับการ Interface ข้อมูลรายการแบบ Misc Receipt
 
ปล. การนำไปใช้งาน  ข้อมูลอาจให้ user กรอกลงไฟล์ excel ตามรูปแบบที่เรากำหนดไว้ 
แล้วค่อยทำสูตรรวมแต่ละคอลัมแล้ว gen ออกมาเป็น SQL Command  แล้วนำไปรันอีกที ก็ได้  
จะทำให้ลดเวลาในการคีย์ไปได้เยอะเลยครับ ....
 
 
.
.
 
 
 

edit @ 20 May 2011 11:58:08 by ว า ต ะ เ ม ฆ า ส ะ ท้ า น ภ พ

 
วันนี้มาลองไล่ลำดับสถานะใน Sale order กันดูครับ  เพื่อทำความเข้าใจสถานะการทำงานของระบบ
โดยสิ่งที่เราสนใจ ได้แก่ 
- สถานะใน Sale order ในแต่ละ line
- สถานะใน Sale order ในหน้า Shipping Transaction
- Released_status ในตาราง WSH_DELIVERY_DETAILS


เริ่มต้นเปิด Sale order สักใบ แล้วกด Book  สังเกตว่า sale order สถานะจะเป็น "Awaiting Shipping"




ถัดมาลองเอาเลขที่ SO ไปค้นในหน้า Shipping Transaction




จะเห็นว่า Status จะเป็น Ready to Release




รัน script ด้านล่างนี้เพื่อดูตัวย่อของ RELEASED_STATUS จะเห็นเป็นตัว "R"
สำหรับค่า Delivery_detail_id ก็มาจากหน้า Shipping transaction นั่นเอง





จากนั้นทำการ Released Sale Order ปกติ




ย้อนกลับมาดูสถานะต่างๆ ใหม่อีกครั้ง
ใน Sale order เปลี่ยนจาก Awaiting Shipping -> Picked




ส่วน Shipping Transaction สถานะจะเปลี่ยน Ready to Release  ->  Staged/Pick Confirm




รัน Script ตรวจสอบค่า Released_status จะเปลี่ยนจาก  R -->  Y




จากนั้นหน้า Shipping Transaction ใน Delivery ให้ทำการ Ship Confirm เพื่อตัดของ




สถานะของ Sale order เปลี่ยนจาก Picked --> Shipped   หน้า Shipping Transaction ก็เช่นเดียวกัน






สถานะตัวย่อเปลี่ยนจาก Y --> C แล้ว




รอสักพัก สถานะ Sale order ในหน้า Shipping Transaction จะเปลี่ยนจาก Shipped --> Interfaced




เมื่อ line status เป็น Interfaced แล้ว  เราก็จะเห็นข้อมูลใน AR Interface Lines
ซึ่งเป็นข้อมูลที่พร้อมจะนำไปรัน Auto Invoice ต่อไป

 
 
สถานะต่างๆ นี้จะมีประโยชน์กับเรามากในกรณี ที่ต้องแก้ไขปัญหาต่างๆ ในระบบโดยการใช้ script update
เราจึงจำเป็นต้องรู้ลำดับการทำงาน  ตัวย่อของสถานะต่างๆ ว่าหมายถึงอะไร  หากต้องการถอยกลับไปสถานะ
ก่อนหน้าจะต้องแก้เป็นค่าอะไร เป็นต้น ครับ ...
 

edit @ 29 Apr 2011 09:56:57 by ว า ต ะ เ ม ฆ า ส ะ ท้ า น ภ พ

edit @ 29 Apr 2011 09:58:39 by ว า ต ะ เ ม ฆ า ส ะ ท้ า น ภ พ

How to check Patch number already install?

posted on 19 Jan 2011 09:38 by lookpranoi  in Oracle

สำหรับการ Apply Patch เพื่อ Fix bug ต่างๆ ที่เกิดขึ้นใน Oracle Application หลายๆ ครั้งในการที่
จะ Apply Patch แต่ละเบอร์นั้น  อาจจะต้องมี Patch ที่ต้อง Apply ก่อนหน้า (pre-requisite patches)


=== ODM Solution / Action Plan ===

1. Please download and review the README and pre-requisites for Patch 9974826
2. Ensure that you have taken a backup of your system before applying the recommended patch.
3. Apply the patch AND the pre-requisite patches in a TEST environment. Please note the following from the README file:
Patch must be applied over: Dec 2008 Assets 11i Consolidated RUP patch 7427746


จากตัว Action Plan ข้างบน เค้าต้องการให้เราลง Patch แต่คราวนี้ เราจะเช็คได้ยังไงว่าเคยลง Patch อะไรไว้บ้าง
อย่างในตัวอย่างก่อนลง Patch 9974826 จะต้องลง Patch 7427746 ก่อน  เช็คได้โดย ...

SELECT app.application_name, apt.*
  FROM applsys.ad_bugs apt, fnd_application_vl app
 WHERE UPPER(app.application_short_name) = UPPER (apt.application_short_name)
   AND apt.bug_number IN ('7427746')

ถ้าเจอ record return ก็แสดงว่า Patch นี้ได้ลงไว้แล้ว  เช็คง่ายๆ ครับ

.
.
.
 

edit @ 19 Jan 2011 09:47:54 by ว า ต ะ เ ม ฆ า ส ะ ท้ า น ภ พ

 

    วันนี้จะนำเสนอวิธีการอาจจะโกงๆ สักนิด  กรณีที่มีการทำกระบวนการ Order Process
ไปแล้ว  ข้อมูลถูกส่งไปเพื่อรอออก Invoice ใน AR Interface Line แล้วแต่บังเอิญข้อมูลผิดพลาด
  
คือผ่านกระบวนการตั้งแต่ Enter->Book Order->Pick Release->Ship Confirm ไปแล้ว
ข้อมูลกำลังจะถูกทำให้เป็น Invoice โดยการ AutoInvoice (ข้อมูลรออยู่ใน AR Interface Line)
  
  
จะด้วยเหตุผลอะไรก็ตาม เช่น รัน Auto Invoice แล้วไม่ผ่าน, หรือตรวจเจอว่าข้อมูลผิดพลาด
Ship ผิดวันที่ ผิดจำนวน ต่างๆ    โดยวิธีที่ง่ายที่สุดให้เป็นไปตามระบบ คือ รัน Auto Invoice
ให้เกิด Invoice ที่ผิดๆ ขึ้นมาในระบบไปก่อน  แล้วค่อยไปทำ RMA คืนของกลับไปและไปหักล้าง
จำนวนเงินใน Invoice   วิธีนี้เป็นแบบทั่วๆ ไป ครับ
  
แต่ถ้าหากว่าไม่อยากจะทำวิธีนี้  ก็สามารถทำวิธี Reverse ข้อมูลกลับแบบ Manual เองก็ได้
 
 ขออธิบายสิ่งที่เกิดขึ้นตามลำดับก่อน

 1. Enter ->Book สินค้าจะถูกจองเอาไว้ เช่นของมี 100 เปิดขาย 80 ส่วนของ 80 จะโดนจองไว้
     ของที่เหลือไว้ขายมีอีก 20 เท่านั้น  จองเท่านั้นของยังไม่ได้โดนตัด
 2. Pick Release  ขั้นตอนนี้ก็คือ pick เพื่อไปหยิบของ สถานะที่โดนจองไว้ก็จะเปลี่ยน
     จากจองไว้ Not Pick เป็น Pick Release
 3. Ship Confirm  ถึงขั้นตอนนี้เป็นการสั่งตัดของออกจากคลังแล้ว
     โดยรายการจะถูกส่งไปรอตัดใน table interface ส่วนของ inventory   หากวันที่ตัดเป็นวันเวลาปัจจุบัน
     ของจะตัดออกจากระบบได้ทันที   แต่หากเป็นวันที่อนาคต (Future Date) ระบบจะตัดไม่ได้
     ต้องรอให้ถึงเวลาดังกล่าวก่อน
 4. Auto Invoice หลังจาก Ship Confirm ไปแล้ว  รอสักพักสถานะจะเปลี่ยนจาก Shipped เป็น Interfaced
     นั่นคือรายการพร้อมที่จะถูกส่งไป Generate เป็น Invoice ใน AR แล้ว  เพียงแค่ไปรัน Auto Invoice
  
นี่ก็จะเป็นสิ่งต่างๆ ที่เกิดขึ้นตามลำดับ  ฉะนั้น หากต้องการแก้ไขสิ่งที่ผิดพลาดในข้อ 4 ก็ต้องทำไล่ย้อนกลับไป ดังนี้
  
ขั้นตอนการ Reverse transaction
 
1. ลบข้อมูลใน Interface Lines นี้ทิ้งโดยกดปุ่มกากบาท Delete จากหน้า App ได้เลย
   (แนะนำว่าให้ Export ข้อมูลออกมาก่อน เผื่อไว้ดูในตอนหลัง table : ar.RA_INTERFACE_LINES_all)
  
  
2. ตามไปลบข้อมูลการตัด stock จากขั้นตอนการ Ship Confirm 
โดยข้อมูลจะอยู่ที่ตาราง INV.MTL_TRANSACTIONS_INTERFACE  อยู่ในเงื่อนไขของยังไม่ได้โดนตัดนะครับ
 หาข้อมูลที่ตรงกับใน AR Interface Line ให้เจอและทำการลบออกไปจาก table
 
Link กลับไปด้วย transaction_header_id, transaction_line_id หรือ interface_attribute1 เป็นต้น
  
 
3. จากนั้นก็ตามไปลบข้อมูลการจองสินค้า  โดยให้ตรวจสอบการจองจากหน้า Item Reservation ก่อน สังเกตว่า
รายการที่เราต้องการ reverse นั้นจะเป็น Pick Released ไปแล้ว  ซึ่งไม่สามารถลบได้เองจากหน้านี้
ต้องใช้ script ในการลบ  โดยให้ทำดังนี้
 
- ทำการ Examine เพื่อดูค่า RESERVATION_ID
- นำค่าที่ได้ไปใส่ใน script นี้ 
 DELETE FROM inv.mtl_reservations mr
 WHERE mr.RESERVATION_ID = :pReservID;
 
 
4. ลองเช็ค Item Onhand ก่อนและหลังดู จะพบว่าของที่โดนจองไว้ ได้ถูกคืนกลับมาแล้ว
 
จบแล้ว ครับ  เมื่อรายการส่งไปเป็น Invoice ใน AR Interface ถูกเคลียร์, รายการตัด Stock ถูกเคลียร์,
รายการจองสินค้าโดนยกเลิก จำนวนสินค้าก็จะคืนกลับมาดังเดิม  
ถึงขั้นตอนนี้แล้วก็คือการ Reverse transaction กลับไปโดยสมบูรณ์แล้ว  แต่มีนิดนึงคือใน line ของ sale order นั้นๆ
จะต้องเสียไป (โดน closed) ก็ให้ enter line ใหม่ที่ข้อมูลใหม่ถูกต้องแล้วก็ทำตามกระบวนการปกติต่อไป
 
จุดประสงค์ที่เขียนวิธีทั้งหมดนี้ขึ้นมา  ไม่ได้ต้องการให้ Reverse โดยแบบนี้ทุกๆ ครั้งครับ 
อย่างที่ได้บอกไว้วิธีที่ง่ายที่สุด การทำ RMA โดยยอมให้เกิด Invoice ผิดๆ ออกมาก่อน    
 
แต่การ Reserve แบบ Manual แบบนี้คงไม่ได้ใช้บ่อยครั้งนัก เพราะว่าค่อนข้างยุ่งยาก ซับซ้อน 
และไม่รับประกันนะครับ  ในส่วนนี้ผมเคยลองเคยทำแล้ว ยังไม่พบปัญหาใดๆ    
แต่ว่ารู้ไว้ดีกว่าไม่รู้ เพราะว่ามันจะทำให้เราเข้าใจกระบวนการและลำดับการทำงานของระบบได้ดียิ่งขึ้น ครับ ...
 
 
..................................................................................

   สวัสดีปีใหม่ 2554 คร้าบบบบบบบบบบบบบบบบบบบบบบบบ
..................................................................................
 
 

edit @ 30 Dec 2010 12:17:03 by ว า ต ะ เ ม ฆ า ส ะ ท้ า น ภ พ

 

ใกล้สิ้นปีเต็มทีแล้ว  1 ในงานที่ต้องทำในช่วงก่อนสิ้นปี นั่นก็คือ การกำหนดเลขที่เอกสารต่างๆ ในระบบ
 
ถามว่าทำไมต้องกำหนด ?
ทุกๆ เอกสารในระบบ หากว่าเราต้องการจำแนกเลขที่เอกสารตามปี ตามเดือน 
เช่น ปี ตามด้วย เดือน และเลขที่เอกสาร 4 หลัก   2554-01-0001  เป็นต้น
 
เพื่อง่ายต่อการค้นหา และเพื่อตอบโจทย์ในเรื่องของ ISO  ส่วนนี้จึงจำเป็นที่จะต้องทำ !!
สำหรับการ setup นั้นสามารถหาอ่านเองได้จากคู่มือ หรือดูได้จาก link ท้ายบทความ
ประเด็นของบทความนี้ ไม่ได้อยากเน้นวิธีการกำหนดเลขที่เอกสาร เพียงแต่อยากรู้ว่าเบื้องหลังของระบบ
ใช้วิธีการเก็บอย่างไร และเก็บไว้ที่ไหน   และพระเอกของเลขที่เอกสาร นั่นก็คือ Sequence นั่นเอง
 
ลองดูตัวอย่าง  ส่วนนี้เป็นหน้าจอในการกำหนดเลขที่เอกสารของใบแจ้งหนี้ (Invoice)  โดยในหน้าจอนี้
จะเป็นการกำหนดว่า Domestic Invoice จะให้รันเลขที่เอกสาร อย่างไร
 
ตั้งชื่อ Sources นี้ว่า 54-Domestic Invoice โดยเลขที่เอกสารในช่อง Last number เป็นเลขที่เริ่มต้นในระบบ
อย่างในรูปกำหนดเป็น 11100000   หากมีการเปิด Invoice ใหม่ 1 ใบ เลขที่ถัดไปที่จะได้คือ  11100001 นั่นเอง

 
 
แล้ว Sequence เก็บไว้ที่ไหน ?   ให้ลองเอาชื่อเลขที่เอกสารที่ตั้งไว้มาหาใน  AR.RA_BATCH_SOURCES_ALL
 
 
 
เปิด Sequence ในระบบจาก Schema 'AR' สังเกตตัว BATCH_SOURCE_ID  (1248)
จะเห็นว่ามี sequence ที่ชื่อว่า 'RA_TRX_NUMBER_1248_81_S'  ซึ่งก็คือ sequence ที่เราหานี่เอง
 
* RA_TRX_NUMBER  เป็นชื่อที่สร้างโดยอัติโนมัติจากระบบ
* 1248  ก็อิงมาจาก BATCH_SOURCE_ID
* 81  เป็นเลข ORG_ID ของระบบ
* S  คาดว่าย่อมาจาก Sequence
 
 
 
เอ้.... รู้แล้ว ว่าอยู่ที่นี่ หาเจอแล้วยังไงล่ะ ???    จริงๆ แล้วมีประโยชน์มากในกรณีที่เราต้องการจะทำอะไร
สักอย่างกับเลขที่เอกสาร  อย่างเช่น ต้องการให้เลขที่กระโดดข้ามไปจากช่วงหนึ่ง ถึงอีกช่วงหนึ่ง, ต้องการ 
ใช้เลขที่เอกสารเก่า ที่เคยใช้ไปแล้ว กรณีใช้ผิดแบบไม่ได้ตั้งใจ หรือเหตุผลอะไรก็ตาม  ที่ต้องการเปลี่ยน
ลำดับการรันเลขที่เอกสาร  ก็เข้ามาแก้ไขใน sequence ได้ตรงๆ  ครับ
  
 
 
ข้อมูลเพิ่มเติมเกี่ยวกับ Document Sequence
What's Document Sequence?

 
 
 

edit @ 28 Dec 2010 15:17:15 by ว า ต ะ เ ม ฆ า ส ะ ท้ า น ภ พ