ส่วนของกระบวนการทำรับใน E-Business Suite นั้น  ในเมนู Receipts  เท่าที่พบปัญหาบ่อยๆ
คือในขั้นตอนการทำรับ  ตอนระบุคลังจัดเก็บ Subinventory  มักจะพบความผิดพลาดระบุผิดคลัง
ทำให้สินค้าเข้าระบบผิดที่ผิดทาง  ส่งผลให้ส่วนงานที่ใช้งานต่ออาจไม่พบสินค้าในระบบได้
 
โดยปกติ ผู้ใช้งาน จะต้องเลือก Subinventory ที่ต้องจากจัดเก็บจาก List of value เหมือนในรูป
 
โดย Feature ที่สามารถนำมาช่วยลดปัญหาในการทำรับผิดคลังนี้ คือ Item Transactions Defaults
อยู่ใน Inventory Responsibility -> Setup -> Transactions -> Item Transactions Defaults

 

สิ่งที่ต้องทำคือการกำหนด item ที่ต้องการลงไป  และเลือก Default For และเลือก Subinventory
จากในรูป ความหมาย คือ  สินค้าดังกล่าว หากมีการทำรับสินค้า ให้ใช้ subinventory FGI เป็นค่าเริ่มต้น


 
 
ลองกลับมาทดสอบผลลัพธ์กัน  ลองทำรับสินค้าตัวเดิม  ผลคือช่อง Subinventory จะ default ค่าเป็น FGI ให้อัติโนมัติ
แต่หาก ไม่ต้องการใช้ค่า default  ก็สามารถเลือกเปลี่ยนได้เช่นกัน
 
 
 
โดยสรุปแล้ว  การกำหนด Item ที่จะทำรับต่อ Subinventory เช่นนี้  สามารถลดปัญหาความผิดพลาดในการทำงานได้ดีพอสมควร  อยู่ในเงื่อนไขที่ว่า Item ที่จะทำรับนั้นสามารถระบุที่จัดเก็บ (Subinventory) ได้ล่วงหน้าหรือไม่ ?

หากเป็นกรณีไม่สามารถกำหนดหรือระบุได้ล่วงหน้า  หากทำ Item Transactions Defaults ไว้  แต่ก็ต้องทำการเลือกค่าอยู่ดี  หากว่าไม่ตรงกับความต้องการจริง 
 
หรือในอีกกรณีอื่นๆ เช่น 
มีการทำรับสินค้า  ปกติสินค้านี้เก็บไว้ในคลัง A  แต่เผอิญไม่มีพื้นที่จัดเก็บแล้ว 
ต้องไปเก็บที่คลัง B แทน  เมื่อทำรับในระบบก็จะ default มาเป็นคลัง A 
แต่ทางผู้ใช้ก็ต้องทำการเปลี่ยนจาก A เป็น B แทน  เท่านั้น ครับ


....





edit @ 2 Nov 2012 09:36:45 by รักกันมิสู้รู้ใจกัน

Option ที่ 8 ของคำสั่ง ADPATCH

posted on 22 Oct 2012 08:41 by lookpranoi  in Oracle

from Oracleskill.com credit by นี่เราเป็น DBA หรือเปล่านะ

สำหรับคนที่รู้แล้วก็อย่าว่ากันนะครับ

เผอิญ ผมมีปัญหากับ adpatch ซึ่งมันรัน sql บางตัวไม่ผ่าน  error ดังด้านล่าง
ATTENTION: Please fix the above failed worker(s) so the manager can continue.

ทำไงดี มันมีแต่ให้ fix กับ restart ทำไงก็ไม่ผ่าน

ปรากฏว่า ไป search เจอใน google คือ option ที่ 8 ใน adpatch ซึ่งปกติจะมีแค่ 7 แต่ option ที่ 8 มันคือ การ skip อันที่ error

--------------------------------- start adctrl output -----------------------------

                    AD Controller Menu
     ---------------------------------------------------

     1.    Show worker status

     2.    Tell worker to restart a failed job

     3.    Tell worker to quit

     4.    Tell manager that a worker failed its job

     5.    Tell manager that a worker acknowledges quit

     6.    Restart a worker on the current machine

     7.    Exit


Enter your choice [1] : 8

Enter the worker number(s)/range(s) or 'all' for all workers,
or press [Return] to go back to the menu : 2

ตามนี้เลย ใครเคย adpatch ก็น่าจะรู้ว่ามันมีแค่ 7
โห มัน undocument จริง ๆ นะเนี่ย
ดีใจครับเลยมาแบ่งปัน

SQL Optimization

โดยปกติในการเขียนคำสั่งหรือภาษา SQL นั้น  เขียนขึ้นมาเพื่อใช้เข้าถึงข้อมูลจากในฐานข้อมูลเป็นหลัก  ซึ่งการเขียนที่แตกต่างกันเล็กน้อยก็ส่งผลกับความเร็วหรือประสิทธิภาพในการเข้าถึงข้อมูลด้วย  เลยอยากจะรวมตัวอย่างคร่าวๆ ที่มักพบกันบ่อย หรืออะไรเล็กๆ น้อยๆ แต่ส่งผลต่อความเร็วในการเข้าถึงข้อมูลอย่างมากเลย  Query ที่ให้ผลลัพธ์เหมือนกันทุกประการ  แตกต่างกันที่วิธีการเขียน SQL และเวลาที่ใช้ในการ Execute  ต่างกันระดับ millisecond  แต่หากเรากำลังจะเข้าถึงข้อมูลอันมีขนาดมหาศาลมันจะส่งผลอย่างมากเช่นกัน

 

Actual column names instead of *

คำสั่ง SQL จะทำงานได้เร็วขึ้น  ถ้าเราอ้างถึงชื่อฟิลด์ (Field) หรือ คอลัมส์ (Column) ใน  SELECT statement  แทนที่จะแทนทั้งหมดด้วยเครื่องหมาย  *     การ select เฉพาะฟิลด์ที่ต้องการใช้จริงๆ  ย่อมส่งผลให้ใช้เวลาน้อยลงนั่นเอง

 

 จากในรูปเห็นความแตกต่างเพียงเล็กน้อย Query แรกหลีกเลี่ยงการใช้ * ผลที่ได้ Execution Time น้อยกว่า Query ถัดมา

 

 

Having clause is like a filter

HAVING clause นั้นเปรียบเสมือนการกรองข้อมูล (Filter)  โดยมันจะทำการกรองข้อมูลหลังจาก select ข้อมูลมาครบทุกรายการแล้ว  ซึ่งควรหลีกเลี่ยง  และที่ควรทำคือการกรองข้อมูล (Filter) ในขณะที่ select ข้อมูลโดยใช้  WHERE  จะให้ประสิทธิภาพที่ดีกว่า

จากตัวอย่างในรูปก็จะเห็นชัดเจนในเรื่องการใช้  HAVING  ที่จะใช้เวลาในการ Query นานกว่าจริง

 

The number of subquery block in query

จำนวนของ subquery ที่อยู่ภายใต้ main query นั้นมีผลอย่างมากต่อความเร็วในการประมวลผลและเข้าถึงข้อมูล  ควรจะให้มีจำนวน subquery ให้น้อยเท่าที่สุดเท่าที่จะทำได้

 

 

Using EXISTS instead of DISTINCT

ใช้คำสั่ง EXISTS แทน DISTINCT  เมื่อมีการ join ข้อมูลกันใน table/view  ที่มีความสัมพันธ์แบบ one-to-many  โดยปกติจะได้ผลลัพธ์ที่ซ้ำๆ กันจากความสัมพันธ์ดังกล่าว   หากต้องการชุดข้อมูลที่ซ้ำแสดงเพียงรายการเดียว  โดยส่วนใหญ่ใช้คำสั่ง DISTINCT  ลองเปลี่ยนเป็น EXISTS แทนจะได้ผลลัพธ์เช่นเดียวกับคำสั่ง DISTINCT

 

 

UNION ALL in place of UNION

ใช้ UNION ALL แทนการใช้  UNION

 

 พอจะเป็นตัวอย่าง คร่าวๆ  สังเกตว่าเวลาที่ห่างกันเพียงเล็กน้อยเอง ระดับ millisecond  แต่ถ้าลองมองแล้ว  ถ้าจำนวนข้อมูลเยอะๆ  หรือ query ที่ซับซ้อนมากกว่านี้  จะส่งผลต่อเวลาอย่างมหาศาลเลย  ฉะนั้นเรื่องพื้นๆ ก็อย่ามองข้าม นะครับ

 

.

.

 

edit @ 21 Aug 2012 13:23:34 by รักกันมิสู้รู้ใจกัน


   อาจมีบ้างที่เรามีความจำเป็นต้องหยุด ยกเลิก การใช้งานสินค้า (item) บางตัวในระบบ เช่น สินค้าเลิกผลิตไปแล้วและเพื่อมีผลกับระบบ  โดยไม่ให้มีการกระทำใดๆ กับสินค้าดังกล่าวในระบบอีก  จึงต้องเข้าไปทำการ Inactive สินค้า

การ Inactive เข้าไปในส่วนของเมนู Item  จากในรูป Inactive แล้วเกิด error ในลักษณะนี้
เกิดจากมี sales order ที่ยังคงค้างและอ้างอิงกับ item code ตัวนี้อยู่, กระบวนการ order life cycle ยังไม่ครบ loop  หรือโดนจองสินค้าไว้อยู่  ด้วยเหตุผลทั้งหลายเหล่านี้  ย่อมส่งผลให้ไม่สามารถ inactive item ดังกล่าวได้




สามารถใช้ query เพื่อตรวจสอบได้   สังเกตช่อง SOURCE_LINE_ID

select * from wsh_delivery_details
where inventory_item_id =&item_id
and pickable_flag = 'Y'
and inv_interfaced_flag in ('N','P')
and released_status <> 'D'
and organization_id =&org_id;



 
 
 
 
 
 


สำหรับวิธีการแก้ไขให้จำเป็นต้องรัน script  เพื่อยกเลิกรายการคงค้างในแต่ละรายการใน sales order ที่ปรากฎ

<download script>

เปลี่ยนนามสกุลจาก .jpg เป็น .sql  และ ftp upload  ไปยัง server




telnet ไปยัง server  ด้วย user ที่มี database permission  (ORAXXXXX)
change directory ไปยังตำแหน่งของ script  และใช้ sqlplus เพื่อรัน script ดังกล่าว




โดย Parameter ที่ต้องการก็คือ ค่า SOURCE_LINE_ID จากใน query แรกนั่นเอง
สุดท้ายอย่าลืม commit;




หากว่ามีรายการ LINE_ID ที่คงค้างเยอะ  การสั่งรันซ้ำๆ ก็คงจะลำบากไม่น้อย  อาจประยุกต์ใช้โปรแกรม Dataload
ในการทำวนซ้ำในการรัน script ก็ได้


 
ซึ่งท้ายสุดเมื่อจัดการรายการทั้งหมดที่ค้างได้แล้ว   กลับมาทำการ Inactive item อีกครั้ง
ก็จะพบว่าสามารถทำได้แล้ว ครับ
 
 

@ขอขอบคุณ Oracle Support  ที่มาของ Script
...
...

edit @ 11 Jun 2012 14:30:30 by รักกันมิสู้รู้ใจกัน

edit @ 11 Jun 2012 14:31:15 by รักกันมิสู้รู้ใจกัน

edit @ 11 Jun 2012 14:33:09 by รักกันมิสู้รู้ใจกัน

edit @ 11 Jun 2012 14:37:16 by รักกันมิสู้รู้ใจกัน

Oracle E-Business Suite R12 Table/View change

posted on 14 May 2012 07:59 by lookpranoi  in Oracle
"