Oracle EBS with Chrome - Try again with ThinForms

posted on 14 Feb 2017 15:49 by lookpranoi in Oracle


     จากที่เคยได้เขียนวิธีใช้ Chrome ในการเข้าใช้งาน Oracle EBS เอาไว้ตามบทความเก่านี้ ... 
http://lookpranoi.exteen.com/20130826/frm-92129-error-chrome  

The Source code please visit
https://github.com/zorrofox/ebs-chrome-enablement
PLEASE NOTE THIS PLUGIN MAY NOT WORK ON EBS 12.0.X VERSION, BUT 12.1.X IS OK. AND I WILL WORK ON IT.

 

สำหรับ EBS 11i นั้นใช้งานได้ดี  แต่พอเป็น EBS Version ใหม่ ตัว Extension นี้ก็ใช้งานไม่ได้ 

   วันนี้ผมบังเอิญได้ทดลองตัว extension ใหม่ ที่ชื่อว่า "ThiForms" ซึ่งเมื่อติดตั้งแล้วสามารถใช้งาน Oracle EBS ด้วย Chrome ได้   (Version ที่ทดสอบ  Oracle Applications : 12.2.5)

 

เข้าไปใน Chrome Web Store : ค้นคำว่า Oracle หรือ ThinForm 

 

 

ตัวนี้ทำมาเพื่อใช้รัน Form บน Chrome โดยเฉพาะ

 

เมื่อ Add extionsion แล้วให้เข้าหน้า Oracle EBS ปกติ login แล้วเข้าไปในหน้า Form ใดๆ 
ตัว ThinForms Plugin จะทำงานทันที   โดยครั้งแรกที่เข้าเราจะต้อง download ตัว install ก่อนใช้งาน

 

ให้แตกไฟล์ zip "ThinForms_JavaHost_installer"  แล้ว double click เพื่อ install ตามรูป
ใส่ License Key และ Company Name ไม่ต้องใส่

 

หลังจากนั้นให้เข้า Oracle EBS ใหม่อีกครั้งจะปรากฎ ThinForms Extestion ขึ้นมาเหมือนในรูป

 

หน้า Form Application R12 สามารถเปิดได้แล้วด้วย Chrome

ทั้งนี้ทั้งนั้น มันเป็น Trial Version นะครับ  ทดลองใช้ฟรีแค่ 60 วัน

 

NOTE: This is a TRIAL version. You can run this free trial version for 60 days. Please contact sales@talkingbyte.com if you require an extension to your trial period.

http://www.talkingbyte.com

 

 

    ปกติในการทำรายงานเพื่อดึงข้อมูลจาก Oracle EBS นอกจากจะใช้ Oracle Report, Oracle Discoverer หรือ Tool อื่นๆ ของ Oracle แล้ว   ตัว Reporting Product (SSRS) ของ Microsoft ก็ดูน่าสนใจไม่น้อย  ยิ่ง version ใหม่มีฟีเจอร์ที่น่าใช้หน้าตาดูดีขึ้นมากเลยทีเดียว

ซึ่งปกติทั่วไป หากใครเคยใช้งาน SSRS มาบ้าง หลักการก็คือสร้าง DataSource เพื่อเป็นตัว Connect เข้ากับ Database ชนิดต่างๆ ขึ้นมา   ในตัวรายงานก็อ้างถึง DataSource ตัวนั้น  แล้วสร้าง DataSet ที่มีคำสั่ง Select statement ตามเงื่อนไขต่างๆ  แล้วลาก Field มาแปะวางบนรายงาน แบบที่เราเข้าใจกันดีอยู่แล้ว

สำหรับวันนี้ที่จะพูดถึง คือ หากเราเขียน Query เพื่อดึงข้อมูลจาก Oracle EBS มักจะพบว่าการดึงข้อมูลจาก View บางตัว จะไม่สามารถ Select ได้ข้อมูลออกมาได้ตรงๆ  จะต้องมีการรันคำสั่ง PL/SQL เพิ่มเติมเล็กน้อย เพื่อให้สามารถเข้าถึงข้อมูลใน view เหล่านั้นได้


begin
  mo_global.set_policy_context('S', 81);         -- Org ID
  fnd_global.apps_initialize(0,20639,200);       -- User id, Response id, Application id
end;

เช่นเมื่อเรา select * from ar_cash_receipts_v  จาก view ดังกล่าวจะไม่พบข้อมูลใดๆ  
ให้เรารันคำสั่งด้านบนก่อน แล้วค่อยทำการ select จะสามารถเข้าถึงข้อมูลได้ปกติ

คราวนี้ในการทำรายงานด้วย SSRS จะทำอย่างไร หากต้องการ select ข้อมูลจาก view ดังกล่าวตรงๆ
จะไม่พบข้อมูลใดๆ เลย  จึงจำเป็นต้องรันคำสั่งดังกล่าวก่อนเช่นกัน โดยสามารถทำได้ดังนี้

 

สร้างรายงานขึ้นมา ในส่วนของ Datasets ให้ใส่คำสั่ง apps_initialize ลงไปตามในรูป (Name อะไรก็ได้ที่สื่อ)




หลังจากนั้น สร้าง Datasets ที่จะใช้งานขึ้นมา  จากในรูป query ดึงข้อมูลจาก view AR_CASH_RECEIPTS_V ซึ่งหาก run sql เพื่อดูผลลัพธ์จะไม่พบข้อมูลอะไรดังรูป

 


ดึง Field เพื่อไปวางลงบนรายงาน

 

* ที่สำคัญในส่วนของ Data Sources  ที่ตัวรายงานอ้างถึง (ที่เชื่อมต่อกับ EBS)
ให้เลือก Use single transaction when processing the queries  เพื่อเป็นแบบ transaction เดียวกัน (ปกติเป็นแบบ pararell transaction) คือ ทำงานไล่ลำดับกันไป ไม่ให้ทำงานพร้อมกันต่างคนต่างทำ  เพราะเราต้องการให้รายงานทำคำสั่ง app_initialize ก่อนนั่นเอง 

 

ทดสอบรันรายงาน จะพบว่าสามารถแสดงผลข้อมูลจากใน View ได้แล้ว :)

 

 

  *ส่วนนี้ยังมีเทคนิคบางอย่างอยู่ คือ ลำดับของ Datasets นั้นก็มีผลกับผลลัพธ์ โดยคำสั่ง apps_initialize นั้นจำเป็นต้องรันก่อนเป็นลำดับแรก ถึงจะไป select ข้อมูลจาก view ได้  ดังนั้น Datasets คำสั่ง apps_initialize ก็ควรจะอยู่บนสุดเป็นลำดับแรก เช่นกัน  เพื่อให้ตัวรายงานทำคำสั่งดังกล่าวก่อน  

 

 

จึงไม่แปลกหากในบางครั้ง เรารันรายงานแล้วไม่พบข้อมูล แต่หากรันซ้ำจะได้ข้อมูล เพราะไม่ได้กำหนด apps_initialize เป็นลำดับแรก  

แต่ถ้ารายงานเราในส่วนของ Datasets หลักมีการระบุ parameter เอาไว้ โดย user ต้องเลือกก่อนกดปุ่ม View Report  ก็ไม่จำเป็นให้ apps_initialize เป็นลำดับแรกก็ได้  เพราะว่ายังไง Datasets ตัวหลักที่มี parameter จะถูกรันเป็นตัวสุดท้ายอยู่แล้ว เพราะต้องรอ user ระบุค่าให้ครบแล้วกดปุ่ม ซึ่งกว่า user จะทำเสร็จ apps_initialize ก็ทำเสร็จไปนานแล้ว นั่นเอง ครับ

 

 

AP Invoice cancelled not completed

posted on 07 Nov 2016 17:57 by lookpranoi in Oracle

 

ในบางครั้งการ Cancelled AP Invoice  ทำแล้วไม่สมบูรณ์ อย่างเช่น  ยังสามารถคีย์ข้อมูลหรือแก้ไขได้ใน Distribution,  รายการ Accounting ไม่เกิด เป็นต้น




ให้ทำการ Examine เพื่อดูค่า INVOICE_ID และใช้ Script ดังนี้ เพื่ออัพเดทข้อมูล

copy ข้อมูล invoice ที่จะแก้ไปเก็บไว้ใน table ใหม่ก่อน

create table AP_INVOICES_XCX as
select * from AP_INVOICES_ALL
where invoice_id = :p_invoice_id
and org_id = :p_org_id;

ตรวจสอบข้อมูลเพื่อให้แน่ใจก่อนว่าได้ copy ไปแล้วจริง

select * from AP_INVOICES_XCX


อัพเดทข้อมูลใน table ตามนี้

update AP_INVOICES_ALL
set CANCELLED_DATE='',
cancelled_by='',
cancelled_amount='',
temp_cancelled_amount=''
where invoice_id = :p_invoice_id
and org_id = :p_org_id;

อย่าลืม COMMIT  แล้วลองกลับไปหน้า App  เพื่อทำการ Cancel Invoice และ Create Accounting อีกครั้ง   หากไม่มีปัญหาจะสามารถ Cancel ได้


ปล. แนะนำให้ทำในตัว Test Instance ก่อน หรือหากทำใน Production ก็ควรจะทำตาม step มีการ copy ข้อมูลเดิมเก็บไว้ก่อน  เผื่อไม่สำเร็จจะได้คืนค่ากลับไปเป็นค่าเดิมได้ ครับ




APP-SQLAP-10771: Could not reserve record

posted on 29 Dec 2015 08:01 by lookpranoi in Oracle


Solution การแก้ปัญหา APP-SQLAP-10771 : Could not reserve record. อ่านจาก message เข้าใจว่าเกิด session lock  แต่พอเข้าไป monitor session กลับไม่เจอ  ใช้ solution นี้หากพอจะรู้ว่า table ที่มันน่าจะโดน lock ไว้เพือ่หา SID ตัวที่มีปัญหา แล้ว kill session ทิ้งซะ

Credit http://oracler12applicationfunctional.blogspot.com/2015/02/app-sqlap-10771-could-not-reserve-record.html

 

APP-SQLAP-10771: Could not reserve record.

Error:

APP-SQLAP-10771: Could not reserve record.

Unable to pay the AP invoice in full, Got above error while performing the action –> pay in full

Solution:

Database lock from another session is present on the table AP_INVOICES_ALL, AP_INVOICE_LINES_ALL, AP_INVOICE_DISTRIBUTIONS_ALL for the same record that user was trying to modify from application.

1) To determine what session has a lock on this record, please execute the following steps:
         a) Run the following to determine what tables are locked:
                --- --- ---
                SELECT a.object_id, a.session_id, substr(b.object_name, 1, 40)
                FROM v$locked_object a, dba_objects b
                WHERE a.object_id = b.object_id
                AND b.object_name like 'AP_%'
                ORDER BY b.object_name;
                --- --- ---
         b) Look at the results and insert whatever AP_% tables are returned from a) into the script below:
                --- --- ---
                SELECT l.*, o.owner object_owner, o.object_name
                FROM SYS.all_objects o, v$lock l
                WHERE l.TYPE = 'TM'
                AND o.object_id = l.id1
                AND o.object_name in ('AP_INVOICES_ALL', 'AP_INVOICE_LINES_ALL', 'AP_INVOICE_DISTRIBUTIONS_ALL');
                --- ---
                SELECT SID, SERIAL#
                FROM v$session
                WHERE SID = <SID from b)>;
                --- --- ---
  2) Once the locking sessions have been identified, please use the below command to kill such sessions.
            --- --- ---
            ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
            ---
            Note: SID and serial# to be taken from the output from 1c).
            --- --- ---


Alternative Solution
==============

If there are many items locked you may find it easier to follow this alternative solution:
   a) Ensure no-one is working and no processes are running in the system.
   b) Bounce the database.
   c) Retest the issue.

เทคนิคการ custom folder บน Oracle EBS

posted on 29 Oct 2015 10:41 by lookpranoi in Oracle

ว่าด้วยเรื่องการ custom Folder ในหน้า Form ของ Oracle EBS  นั้นสามารถทำได้ดังนี้

เปิดหน้า Form ที่ต้องการขึ้น ไปที่เมนู Folder -> Folder Tool


 

หน้าตาของ Folder Tool ดังรูป

เม้าส์คลิกใน field ที่ต้องการทำรายการ  ลองกดลูกศรเลื่อนซ้าย เพื่อขยับ Field ใน Form ไปยังตำแหน่งที่ต้องการ  ใช้สำหรับในการจัดตำแหน่งของข้อมูลตามความต้องการของผู้ใช้งาน

 

เมนูการเลือก Show Field และ Hide Field  เพื่อแสดงหรือซ่อน ข้อมูลเพิ่มเติม

 


ตัวอย่าง เทคนิค Custom Folder 
จากในรูป Show Field ที่ชื่อว่า Approval Status เพิ่มเข้ามาใน Form

 

หลังจากนั้นเข้าสู่โหมด enter query เพื่อต้องการ filter ข้อมูลที่ต้องการ  และทำการ Ctrl + F11 เพื่อ Query ข้อมูล

 

สังเกตว่าเมื่อได้ข้อมูลที่ต้องการแล้ว  ให้เข้าไป Folder -> View Query จะปรากฎเงื่อนไขของ Query ที่ได้มาของข้อมูลบนหน้าจอ

 

เลือกเมนู Folder -> Save As เพื่อบันทึก Folder นี้ โดยจะมี option ต่างๆ ดังนี้

Folder : กำหนดชื่อ Folder   จากในตัวอย่างต้องการแสดงข้อมูล JV ที่สถานะอนุมัติแล้ว และเป็นของปี 2015 เดือน 3  โดยตั้งชื่อ JV_ApproveMAR2015 เพื่อให้สื่อ เป็นต้น

Autoquery : Always เรียกข้อมูลอัติโนมัติที่เปิด Form , Never ไม่ทำการเรียกข้อมูล , Asl each time ถามก่อนทุกครั้งที่จะเรียกข้อมูล

Open as default : หากเลือกจะเป็นการกำหนด folder นี้เป็น default ทุกครั้งที่เปิด form

Public : หากเลือก Folder นี้ user อื่นๆ จะสามารถเห็นและใช้งานได้

Include Query : ให้เลือกด้วยหากต้องการให้ folder นี้แสดงข้อมูลแบบมีเงื่อนไข

 

 

 

เมื่อเปิด Form จะเป็นไปตามเงื่อนไขที่กำหนด คือ default folder ไปที่ JV_ApproveMAR2015 พร้อมทั้งแสดงข้อมูลให้โดยอัติโนมัติ

 

 

การแก้ไข Folder สามารถทำได้โดยการไปที่เมนู Folder -> Save As  ในรูปลองเอา Open As Default ออกและ Save

 

เมื่อเข้ามาใน Form อีกครั้งจะพบว่า Folder ดังกล่าวไม่ได้ถูกโหลดขึ้นมา  โดยหากต้องการใช้ต้องเลือกจากเมนู Folder ดังในรูป


จากตัวอย่าง เป็นการประยุกต์ใช้งาน Folder เพื่อรองรับการแสดงผลที่หลากหลายขึ้นตามกลุ่มผู้ใช้ เช่น สำหรับกลุ่มผู้ใช้นี้ต้องการให้เห็นข้อมูลบางประเภท , กลุ่มผู้ใช้นี้เห็นข้อมูลบาง Field หรือเห็นเท่าที่ใช้  ลองนำไปประยุกต์ใช้ดู นะครับ

 

 

edit @ 29 Oct 2015 10:47:24 by Lookpranoi

begin
      dbms_application_info.set_client_info(org_id);
end;
 
หรือ
 
begin
      fnd_global.apps_initialize ( user_id      => i_user_id,                                   
                                               resp_id      => g_respon_id,
                                               resp_appl_id => g_appl_id);
end;
 
 

Building an Oracle Report with a Barcode

posted on 19 Nov 2014 08:56 by lookpranoi in Oracle
Before building a report which contains barcode, follow all the required setup steps. These are detailed in the post: 
 
 

ปกติ code_combination_id จะถูกฝังไว้ในแต่ละ transaction อยู่แล้วเมื่อเกิดการเดินรายการทางบัญชี
หากจะดูในรายงานก็ต้องหาให้ได้ว่า code เหล่านั้น ตรงกับชื่อบัญชีอะไร

CODE_COMBINATION_ID |  ACCOUNT NAME   | ACCOUNT DESC
                             1001 | 01.10.1234.000.00 | บริษัทA.แผนกไอที.โบนัสพนง.NA.NA


ใช้ script ดังนี้ในการหา หรือทำเป็น view ไว้เลย เพื่อความสะดวกในการใช้งาน

* ส่วนของ segment เพิ่มเติมเข้าไป เช่น ในระบบใช้ตั้งแต่ segment1 ถึง segment5 ให้เพิ่มเข้าไปใน script 
Credit by http://jayantaapps.blogspot.com/2013/06/gl-code-combination-id-description.html


GL Code Combination Id & Description
 
1) 
select
gcc.segment1||'.'||gcc.segment2||'.'||gcc.segment3
 ACCOUNT,
A1.DESCRIPTION||'-'||A2.DESCRIPTION ||'-'|| A3.DESCRIPTION  DECS
from
fnd_flex_values_vl A1,
fnd_flex_values_vl A2,
fnd_flex_values_vl A3,
gl_code_combinations gcc
WHERE
a1.flex_value=gcc.segment1 
And a1.FLEX_VALUE_SET_ID in ( select FLEX_VALUE_SET_ID
                            from fnd_id_flex_segments
                           WHERE application_id = 101 AND id_flex_code = 'GL#' and enabled_flag = 'Y' 
                           and application_column_name='SEGMENT1' )
and a2.flex_value=gcc.segment2
And a2.FLEX_VALUE_SET_ID in ( select FLEX_VALUE_SET_ID
                            from fnd_id_flex_segments
                           WHERE application_id = 101 AND id_flex_code = 'GL#' and enabled_flag = 'Y' 
                           and application_column_name='SEGMENT2' )
and a3.flex_value=gcc.segment3
And a3.FLEX_VALUE_SET_ID in ( select FLEX_VALUE_SET_ID
                            from fnd_id_flex_segments
                           WHERE application_id = 101 AND id_flex_code = 'GL#' and enabled_flag = 'Y' 
                           and application_column_name='SEGMENT3' )


2)  ---Only in R12----
select gcc.CONCATENATED_SEGMENTS,
GL_FLEXFIELDS_PKG.get_concat_description( gcc.chart_of_accounts_id, gcc.code_combination_id) acc_description
FROM gl_code_combinations_kfv gcc
 

edit @ 25 Sep 2014 16:06:53 by Lookpranoi

Basic Tables and Programs involved in Conversions

posted on 02 Oct 2013 09:54 by lookpranoi in Oracle
 


Order Import Interface (Sales Order Conversion)

Interface Tables

OE_HEADERS_IFACE_ALL
OE_LINES_IFACE_ALL
OE_ACTIONS_IFACE_ALL
OE_ORDERS_CUST_IFACE_ALL
OE_PRICE_ADJS_IFACE_ALL
OE_PRICE_ATTS_IFACE_ALL

Base Tables

OE_ORDER_HEADERS_ALL
OE_ORDER_LINES_ALL
QP_PRICING_ATTRIBUTES

Concurrent Program:

Order Import

API

OE_ORDER_PUB.GET_ORDER and OE_ORDER_PUB.PROCESS_ORDER

Item Import

Interface Tables

MTL_SYSTEM_ITEMS_INTERFACE
MTL_ITEM_REVISIONS_INTERFACE
MTL_ITEM_CATEGORIES_INTERFACE
MTL_INTERFACE_ERRORS

Concurrent program:

Item Import

Base Tables:

MTL_SYSTEM_ITEMS_B
MTL_ITEM_REVISIONS_B
MTL_CATEGORIES_B
MTL_CATEGORY_SETS_B
MTL_ITEM_STATUS
MTL_ITEM_TEMPLATES

Inventory Onhand Quantity

Interface Tables

MTL_TRANSACTION_INTERFACE
MTL_TRANSACTION_LOTS_INTERFACE
MTL_SERIAL_NUMBERS_INTERFACE

Concurrent Program:

Can be submitted in Transaction Manager through Interface Manager

API

INV_TXN_MANAGER_PUB.PROCESS_TRANSACTIONS

Base Tables:

MTL_ONHAND_QUANTITIES
MTL_LOT_NUMBERS
MTL_SERIAL_NUMBERS

Customer Conversions

Interface Tables

RA_CUSTOMERS_INTERFACE_ALL
RA_CUSTOMER_PROFILE_INT_ALL
RA_CONTACT_PHONES_INT_ALL
RA_CUSTOMER_BANK_INT_ALL
RA_CUST_PAY_METHOD_INT_ALL

Base Tables

RA_CUSTOMERS
RA_ADDRESSES_ALL
RA_CUSTOMER_RELATIONSHIPS_ALL
RA_SITE_USES_ALL

Concurrent Program

Customer Interface

API

Trading Community Architecture uses the APIs to create the customers too
APIs are

Set the organization id

Exec dbms_application_info.set_client_info();

Create a party and an account

HZ_CUST_ACCOUNT_V2PUB.CREATE_CUST_ACCOUNT
HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE
HZ_PARTY_V2PUB.ORGANIZATION_REC_TYPE
HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE

Create a physical location

HZ_LOCATION_V2PUB.CREATE_LOCATION()
HZ_LOCATION_V2PUB.LOCATION_REC_TYPE

Create a party site

HZ_PARTY_SITE_V2PUB.CREATE_PARTY_SITE()
HZ_PARTY_SITE_V2PUB.PARTY_SITE_REC_TYPE

Create an account site

HZ_CUST_ACCOUNT_SITE_V2PUB.CREATE_CUST_ACCT_SITE()
HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_ACCT_SITE_REC_TYPE

Create an account site use

HZ_CUST_ACCOUNT_SITE_V2PUB.CREATE_CUST_SITE_USE()
HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE
HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE

Base Tables

HZ_PARTIES
HZ_PARTY_SITES
HZ_LOCATIONS
HZ_CUST_ACCOUNTS
HZ_CUST_SITE_USES_ALL
HZ_CUST_ACCT_SITES_ALL
HZ_PARTY_SITE_USES

Auto Invoice Interface

Interface Tables

RA_INTERFACE_LINES_ALL
RA_INTERFACE_SALESCREDITS
RA_INTERFACE_DISTRIBUTIONS
RA_INTERFACE_ERRORS

Base Tables

RA_BATCHES
RA_CUSTOMER_TRX_ALL
RA_CUSTOMER_TRX_LINES_ALL
AR_PAYMENT_SCHEDULES_ALL
RA_CUSTOMER_TRX_LINE_SALESREPS
RA_CUST_TRX_GL_DIST_ALL
RA_CUSTOMER_TRX_TYPES_ALL

Concurrent Program

Auto invoice master program

Requisition Import

Interface Tables

PO_REQUISITIONS_INTERFACE_ALL
PO_REQ_DIST_INTERFACE_ALL

Base Tables:

PO_REQUISITIONS_HEADERS_ALL
PO_REQUISITION_LINES_ALL
PO_REQ_DISTRIBUTIONS_ALL

Concurrent Program:

Requisition Import

Purchase Order Conversions

Interface Tables:

PO_HEADERS_INTERFACE
PO_LINES_INTERFACE
PO_DISTRIBUTIONS_INTERACE
PO_INTERCAE_ERRORS

Concurrent Interface Program:

Import Standard Purchase Orders

Base Tables:

PO_HEADERS_ALL
PO_LINES_ALL
PO_DISTRIBUTIONS_ALL
PO_LINE_LOCATIONS_ALL

edit @ 2 Oct 2013 09:55:38 by รักกันมิสู้รู้ใจกัน

 
แก้ปัญหาในการใช้ Chrome ในการ log in เข้า e-business suite แล้วฟ้อง FRM-92129 error
ใน Chrome web store มี extension ในการแก้ไขปัญหานี้ให้โหลดด้วย
https://chrome.google.com/webstore/detail/oracle-ebs-r1211i-enablem/ekkagabmggbmpmncofhgkfigmeldifnc


สะดวก เสียจริง ๆ :-)


edit @ 26 Aug 2013 21:41:12 by รักกันมิสู้รู้ใจกัน