Featured post

General Ledger Revaluation

General Ledger Revaluation Account balances denominated in foreign currencies are adjusted through the revaluation procedure. Revaluat...

Tuesday, 30 July 2024

General Ledger Revaluation

General Ledger Revaluation

Account balances denominated in foreign currencies are adjusted through the revaluation procedure. Revaluation adjustments show how the dates of the original journal and the revaluation differ in terms of account balances because of variations in exchange rates.

Create a Manual Journals

1.      From General Accounting click on Journals.



2.      Enter the Journal Batch, Description, and Accounting Period in the Journal Batch section.

3.      Enter the Journal, Description, Ledger, Accounting Date, category, Conversion Rate, and currency in the Journal section.


 

4.      Enter the Account combination and amount on the Debit and Credit sides.



5.      Click on Save, Complete, and Post.


Revaluate Balances


6.      From General Accounting click on General Accounting Dashboard.



7.      From the Task list click on Revaluate Balances.


 


8.      Click on the Plus sign.



9.      Enter the Name, Description, Chart of Accounts, Currency, and Conversion Name.

10.   Enter the Unrealized Gain Account and the Unrealized Loss Account.


 


11.   Click on the Plus sign.



12.   Click on the Account Filter sign.


 


13.   Click on the Add fields.

14.   Select the Account.



15.   Select Equals and choose the Account Number.

16.   Click on OK.


 


17.   Click on the Plus sign.



18.   Click on the Account Filter sign.


 


19.   Click on the Add fields.

20.   Select the Account.

21.   Select Equals and choose the Account Number.

22.   Click on OK.


z

23.   Click on Save.



24.   Click on Generate.


 


25.   Select the Ledger, Revaluation Name, Accounting Period, Accounting Date, and

Rate Date.

26.   Click on Submit.




Scheduled processes

27.   From Tools click on Schedule Processes.



28.   The status for the request became Succeeded”.


Manage Journals


29.   From General Accounting click on Journals.



30.   Click on Manage Journals.


 


31.   In the search tab select the Accounting period.

32.   Click on Search.



33.   Click on the Journal that starts withRevaluate”.


 


34.   The Journal has been automatically created according to our setup.


Sunday, 9 July 2023

Functionality of Segment Value Inheritance ESS Process

 


The Segment Value Inheritance process simplifies the maintenance of the chart of accounts. When the characteristics of values in the value sets are updated then all previously created account code combinations that referenced such values are not automatically updated by these changes.

This process is run to automatically propagate the following attributes of a segment value to all account code combinations which contain that segment value.

- Enable/disable flag
- Effective dates
- Allow budgeting flag
- Allow posting flag

The Segment Value Inheritance process allows you to run a controlled process to update such existing account code combinations. This process maintains and corrects the current attribute settings for those account code combinations that contain the account values that were changed.

For account code combinations where the present settings need to be retained and not impacted by account attribute changes, activate the flag to preserve the account code combination's attribute. Activating the flag prevents those account code combination's attributes from being update when the Segment Value Inheritance process is run.

Note:


  • Use the Segment Value Inheritance Exception Report to view the account combinations that have been changed.
  • Individual segment value attributes override account combination attributes.
  • Conflicting settings for Enabled, Allow Posting, From Date, or To Date are resolved by using the most restrictive of the settings of the individual segment values.
  • Disabling a segment value disables the combinations containing that value, even if the Preserve Attributes check box is selected

Monday, 5 December 2022

How to remove access for "Complete" action for AR Transactions for few end users Sandbox

 1) Remove "Complete" action button on AR Transactions for few user on the basis of assigned Roles

2) Provide access to few users to "complete" action for  AR Transactions .

================

I have used below Edit Page component through Sandbox >>EL but "Complete" Button is getting disabled for all users  

#{securityContext.userInRole['AZM_LOG_COM_ACTION']}

AZM_LOG_COM_ACTION - this is dummy role assigned to 2 users only.

Tuesday, 4 October 2022

Fusion Role Types

 Oracle FAW provides four role types:

Duty roles => Define the duties of a job as an entitlement to perform a particular action, such as access to an AP Transactions subject area.

Data roles => Provide access to the transactional data in the tables. Data roles group the users based on the functional access they have through a particular job role and a particular dimension of data. For example, a group of users based on invoices relevant only to their business unit.

System roles => Provide a set of privileges that allows users to perform system tasks after signing into Oracle Fusion Analytics Warehouse, such as administering system settings, performing functional setup, managing security, and modeling data.

Job roles => Inherit duty roles, data roles, and application roles that are assigned to users. A job role defines a user business function such as Vice President of Sales, Human Resources Analyst, and Procurement Buyer. Job roles and users are synchronized from Oracle Applications Cloud to Oracle Identity Cloud Service. The job roles are mapped as groups in Oracle Identity Cloud Service. You can also create custom job roles based on your business requirements





Monday, 26 September 2022

User Cannot Manually Create Tax For A Credit Memo Yet They Are Able To Create Tax For An Invoice

To implement the solution, please execute the following steps:


1. Navigate to Setup and Maintenance > Setup: Financials > Functional Area: Transaction Tax

2. Task "Manage Configuration Owner Tax Options"

3. Search by the Configuration Owner (Business Unit or Legal Entity depending on your setup) and Event Class as "Credit Memo". If not present create a new entry for the Configuration Owner/Event Class.

4. Verify if the checkbox "Allow entry of manual tax lines" is checked. If not, user will need to end date the current record and create a new one with this checkbox as checked.

5. Retest the issue

How to Default Input VAT tax or any tax from Receivable Transaction Fusion Cloud

How to Default Input VAT tax or any tax from Receivable Transaction 

 

The Manage Application Tax Option is set for product Receivables, for this specific BU, to default the tax classification code S4, based on Receivable system options.

But the setup is not complete: in Manage Receivables System options the Item Validation Organization is snot set.

However, the Tax Classification information is changed and it is trying to default a new one when the transaction line Item/Memo Line/ Description is changed, because the used Transaction Type is checked the Default Tax Classification Code option.

If the business requirement is to not default the Tax Classification code for transaction line, then please uncheck this option for used transaction type:

1. Got to Setup and Maintenance > Financials Setup > Customer billing

2. Manage transaction types task > Search by issue transaction type name

3. Ensure the flag - Default tax classification code is disabled

4. Retest the issue

Tuesday, 13 September 2022

AR Invoice Image Upload Using SOAP Request – Oracle Fusion

 During fusion implementation, Business requirement original receivable invoice image in Oracle Fusion Applications. In such cases, we can use Attachment field option in AR invoices.

The challenge here is, we would do the AR invoice date conversion using FBDI process, but FBDI template doesn’t support image files/Image URL to get uploaded to Fusion Application.

In such cases, the workaround would be to go with REST/SOAP webservices. The below example shows the sample payload of SOAP call to upload images to AR invoices.

End Point URL:
———————
https://serverurl/fscmService/ErpObjectAttachmentService?WSDL

Sample Payload:
———————-
<soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:typ=”http://xmlns.oracle.com/apps/financials/commonModules/shared/model/erpIntegrationService/types/” xmlns:erp=”http://xmlns.oracle.com/apps/financials/commonModules/shared/model/erpIntegrationService/”>
<soapenv:Header/>
<soapenv:Body>
<typ:uploadAttachment>
<typ:entityName>RA_CUSTOMER_TRX_ALL</typ:entityName>
<typ:categoryName>CUSTOMER_TRX</typ:categoryName>
<typ:allowDuplicate>Yes</typ:allowDuplicate>
<!–Zero or more repetitions:–>
<typ:attachmentRows>
<!–Business Unit:–>
<erp:UserKeyA>BU Name</erp:UserKeyA>
<!–Transaction Number:–>
<erp:UserKeyB>1000</erp:UserKeyB>
<!–Transaction Source:–>
<erp:UserKeyC>Trx Source</erp:UserKeyC>
<!–CUSTOMER_TRX_ID:–>
<erp:UserKeyD>1</erp:UserKeyD>
<!–AttachmentType:–>
<erp:AttachmentType>FILE</erp:AttachmentType>
<!–File Name:–>
<erp:Title>TESTIMAGE.JPG</erp:Title>
<!–Content: convert the image file to base64 format and input the content below–>
<erp:Content>/9j/4AAQSkZJRgABAQEAYABgAAD/4RCcRXhpZgAATU0AKgAAAAgABAE7AAIAAAAOAAAISodpAAQAAAABAAAIWJydAUUAFFFFABRRRQB/9k=</erp:Content>
</typ:attachmentRows>
</typ:uploadAttachment>
</soapenv:Body>
</soapenv:Envelope>

Thursday, 8 September 2022

Detail SQL Query Using Workflow/BPM tables in oracle fusion


Query to extract information related to the PR Purchase requisition BPM approval rules.


select par.rule_id,

par.rule_number,

par.rule_name,

par.DISPLAY_RULE_NAME,

par.description,

par.CONDITIONS_STRING,

par.PRIORITY,

par.active_flag,

pat.LOOKUP_CODE pat_LOOKUP_CODE,

pap.PARTICIPANT_KEY,

paa.ACTION_CODE,

paa.APPROVAL_GROUP_NAME,

pac.condition_number,

pac.attribute_key cond_key,

pac.dimension_key,

pac.operator,

pac.condition_string

from POR_AMX_RULES PAR,

POR_AMX_PARTICIPANTS pap,

POR_AMX_DIMENSIONS   PAD,

POR_AMX_TASKS PAT,

(select RULE_NAME max_rul_name, max(OBJECT_VERSION_NUMBER) max_obj from POR_AMX_RULES group by RULE_NAME) rul_max,

POR_AMX_STAGES   PAS,

POR_AMX_ACTIONS PAA,

POR_AMX_CONDITIONS PAC

where par.active_flag = 'Y'

and par.PARTICIPANT_ID = pap.PARTICIPANT_ID

and par.task_id = pap.task_id

and pas.STAGE_ID = pap.STAGE_ID

and pas.task_id = pap.task_id

and pas.stage_id = pap.stage_id

--and pap.DIMENSION_ID = pad.DIMENSION_ID

and PAT.task_id = pad.task_id

and rul_max.max_obj = par.OBJECT_VERSION_NUMBER

and rul_max.max_rul_name = par.rule_name

and paa.rule_id = par.rule_id

and paa.task_id = par.task_id

and pac.rule_id = paa.rule_id

and pac.task_id = paa.task_id

and pat.task_key = 'ReqApproval'

and pad.TABLE_NAME  = 'POR_REQUISITION_HEADERS_ALL'

BPM Approval (Workflow) Table list in Oracle Fusion

BPM(Workflow) Table list in Oracle Fusion

  1. POR_AMX_RULES
  2. POR_AMX_PARTICIPANTS
  3. POR_AMX_DIMENSIONS
  4. POR_AMX_TASKS
  5. POR_AMX_STAGES
  6. POR_AMX_ACTIONS
  7. POR_AMX_CONDITIONS
SQL Query

The sql query below extracts information about the BPM approval rules for Purchase requisitions data

SELECT par.rule_id,
       par.rule_number,
       par.rule_name,
       par.DISPLAY_RULE_NAME,
       par.description,
       par.CONDITIONS_STRING,
       par.PRIORITY,
       par.active_flag,
       pat.LOOKUP_CODE pat_LOOKUP_CODE,
       pap.PARTICIPANT_KEY,
       paa.ACTION_CODE,
       paa.APPROVAL_GROUP_NAME,
       pac.condition_number,
       pac.attribute_key cond_key,
       pac.dimension_key,
       pac.operator,
       pac.condition_string
FROM   POR_AMX_RULES PAR,
       POR_AMX_PARTICIPANTS pap,
       POR_AMX_DIMENSIONS   PAD,
       POR_AMX_TASKS PAT,
       (select RULE_NAME max_rul_name, max(OBJECT_VERSION_NUMBER) max_obj 
        from POR_AMX_RULES 
        group by RULE_NAME) rul_max,
       POR_AMX_STAGES   PAS,
       POR_AMX_ACTIONS PAA,
       POR_AMX_CONDITIONS PAC
WHERE  par.active_flag = 'Y'
   and par.PARTICIPANT_ID = pap.PARTICIPANT_ID
   and par.task_id = pap.task_id
   and pas.STAGE_ID = pap.STAGE_ID
   and pas.task_id = pap.task_id
   and pas.stage_id = pap.stage_id
   and PAT.task_id = pad.task_id
   and rul_max.max_obj = par.OBJECT_VERSION_NUMBER
   and rul_max.max_rul_name = par.rule_name
   and paa.rule_id = par.rule_id
   and paa.task_id = par.task_id
   and pac.rule_id = paa.rule_id
   and pac.task_id = paa.task_id
   and pat.task_key = 'ReqApproval'
   and pad.TABLE_NAME  = 'POR_REQUISITION_HEADERS_ALL';






SQL query to extract data Pending approval transaction for employee transactions data

 select

txnd.transaction_id,

txnd.status,

txnd.state,

txnd.created_by,

txnd.creation_date,

txnd.last_update_date,

txnd.last_updated_by,

txnh.module_identifier,

txnh.subject,

txnh.subject_id,

txnh.object,

txnh.object_id,

txne.Fault_Date,

txne.Error_Details,

wft.TITLE,

wft.OUTCOME as WF_OUTCOME,

wft.STATE as WF_STATE,

Wft.Assignees,

wft.Assigneddate,

wft.Approvers,

wft.compositeinstanceid

from

Fusion.Hrc_Txn_Header Txnh, Fusion.Hrc_Txn_Data Txnd,

fa_fusion_soainfra.wftask wft,

fusion.hrc_txn_error txne

Where txnh.Transaction_Id = txnd.Transaction_Id

and txnh.transaction_id = txne.transaction_id(+)

And To_Char(Txnh.Transaction_Id) = Wft.Identificationkey(+)

and ((txnh.subject_id in (select distinct person_id from per_all_people_f

where person_number in ('1234')

))

or (txnh.subject_id in (select assignment_id from per_all_assignments_m

where assignment_type ='E' and person_id in

(select distinct person_id from per_all_people_f where person_number in

('1234')

)))

or (txnh.subject_id in (select period_of_service_id from

per_periods_of_service where person_id in

(select distinct person_id from per_all_people_f where person_number in

('1234')

))))

SQL query to get current approver and future or next approver for resignation transactions

 SELECT wt.ASSIGNEESDISPLAYNAME next_approver,--hrops_name

wt.FROMUSERDISPLAYNAME current_approver,

txnh.object_id assignment_id,

(

SELECT DISTINCT papf.person_number

FROM per_all_people_f papf,

per_all_assignments_f paaf

WHERE 1 = 1

AND papf.person_id = paaf.person_id

AND sysdate BETWEEN paaf.effective_start_date

AND paaf.effective_end_date

AND paaf.assignment_id = txnh.object_id

) person_number,

(

SELECT to_date(EXTRACTVALUE(xmltype.createxml(DATA_CACHE), '/TRANSACTION/BUSINESSDATA/AM/TXN/EO/PeriodOfServiceEORow/NotifiedTerminationDate/DATA'), 'rrrr-mm-dd')

FROM hrc_txn_data txnd

WHERE 1 = 1

AND LENGTHB(TO_CHAR(SUBSTR(DATA_CACHE, 1, 4000))) <> 0

AND txnd.transaction_id = wt.identificationkey

) NTD,

(

SELECT to_date(EXTRACTVALUE(xmltype.createxml(DATA_CACHE), '/TRANSACTION/BUSINESSDATA/AM/TXN/EO/PeriodOfServiceEORow/ActualTerminationDate/DATA'), 'rrrr-mm-dd')

FROM hrc_txn_data txnd

WHERE 1 = 1

AND LENGTHB(TO_CHAR(SUBSTR(DATA_CACHE, 1, 4000))) <> 0

AND txnd.transaction_id = wt.identificationkey

) ATD,

(

SELECT DISTINCT ppnf.display_name

FROM per_person_names_f ppnf,

per_all_people_f papf,

per_all_assignments_f paaf

WHERE 1 = 1

AND ppnf.person_id = papf.person_id

AND sysdate BETWEEN ppnf.effective_start_date

AND ppnf.effective_end_date

AND ppnf.NAME_TYPE = 'GLOBAL'

AND papf.person_id = paaf.person_id

AND sysdate BETWEEN paaf.effective_start_date

AND paaf.effective_end_date

AND paaf.assignment_id = txnh.object_id

) DISPLAY_NAME,

trunc(CREATEDDATE) trx_date

FROM fa_fusion_soainfra.wftask wt,

hrc_txn_header txnh

WHERE 1 = 1

AND wt.identificationkey = txnh.transaction_id

AND ((ASSIGNMENTCONTEXT LIKE '%Above%'

AND wt.PUSHBACKSEQUENCE <> 'INITIAL_ASSIGNEES;1')

OR (ASSIGNMENTCONTEXT LIKE '%Below%'))

and wt.TASKDEFINITIONNAME = 'ResignationApproval'

AND Txnh.OBJECT = 'PER_ALL_ASSIGNMENTS_M'

AND Txnh.module_identifier IN ('Resignation','Terminations')

AND wt.COMPONENTNAME IN ('ResignationApproval','TerminationsApproval')

AND trunc(wt.UPDATEDDATE) = trunc(sysdate)

AND wt.ENDDATE IS NULL

SQL query to extract from data_cache field on HRC_TRX_DATA with transaction status

 

SELECT

person.person_number,

EXTRACTVALUE (

xmltype ('' || txnD.data_cache || ''),

'TRANSACTION/TransCtx/PreRowAsgCalcAttributeHash/Department')

Department_old,

EXTRACTVALUE (xmltype ('' || txnD.data_cache || ''),

'TRANSACTION/TransCtx/asgCalcAttributeHash/Department')

Department_new,

INITCAP (names.display_name) display_name,

EXTRACTVALUE (

xmltype ('' || txnD.data_cache || ''),

'TRANSACTION/TransCtx/PreRowAsgCalcAttributeHash/BusinessUnit')

BusinessUnit_old,

EXTRACTVALUE (

xmltype ('' || txnD.data_cache || ''),

'TRANSACTION/TransCtx/asgCalcAttributeHash/BusinessUnit')

BusinessUnit_new,

EXTRACTVALUE (

xmltype ('' || txnD.data_cache || ''),

'TRANSACTION/TransCtx/PreRowAsgCalcAttributeHash/Location')

Location_old,

EXTRACTVALUE (xmltype ('' || txnD.data_cache || ''),

'TRANSACTION/TransCtx/asgCalcAttributeHash/Location')

Location_new,

'InProgress' STATUS,

(SELECT per_all_people_f.person_number||'-'||INITCAP (per_person_names_f.display_name)

FROM PER_ASSIGNMENT_SUPERVISORS_F,

per_person_names_f,

per_all_people_f

WHERE PER_ASSIGNMENT_SUPERVISORS_F.manager_id =

per_person_names_f.person_id

AND per_person_names_f.person_id =

per_all_people_f.person_id

AND PER_ASSIGNMENT_SUPERVISORS_F.MANAGER_TYPE =

'LINE_MANAGER'

AND TRUNC (SYSDATE) BETWEEN TRUNC (

PER_ASSIGNMENT_SUPERVISORS_F.EFFECTIVE_START_DATE)

AND TRUNC (

PER_ASSIGNMENT_SUPERVISORS_F.EFFECTIVE_END_DATE)

AND TRUNC (SYSDATE) BETWEEN TRUNC (

per_person_names_f.EFFECTIVE_START_DATE)

AND TRUNC (

per_person_names_f.EFFECTIVE_END_DATE)

AND TRUNC (SYSDATE) BETWEEN TRUNC (

per_all_people_f.EFFECTIVE_START_DATE)

AND TRUNC (

per_all_people_f.EFFECTIVE_END_DATE)

and PER_ASSIGNMENT_SUPERVISORS_F.assignment_id=asg.assignment_id

AND per_person_names_f.name_type = 'GLOBAL'

)curr_reporting,

/* EXTRACTVALUE (xmltype ('' || replace(txnD.data_cache,',','') || ''),

'TRANSACTION/BUSINESSDATA/AM/TXN/EO/PeriodOfServiceEORow/CEO/EO/EmployeeTermsDEORow/CEO/EO/EmployeeAssignmentDEORow/CEO/EO/AssignmentSupervisorDEORow/ManagerName/DATA[1]')

*/null prapose_mgr,

asg.effective_start_date doj,

EXTRACTVALUE (xmltype ('' || txnD.data_cache || ''),

'TRANSACTION/TransCtx/basicInfoAttributes/ReasonName')REASON

FROM hrc_txn_header txnH,

per_all_people_f person,

per_all_assignments_m asg,

per_person_names_f names,

hrc_txn_data txnD,

FA_FUSION_SOAINFRA.WFTASK wft,

per_persons ppos

WHERE UPPER (txnH.Object) IN ('PER_ALL_ASSIGNMENTS_M')

AND txnH.object_id = asg.assignment_id

AND SYSDATE BETWEEN asg.effective_start_date

AND asg.effective_end_date

AND asg.person_id = person.person_id

AND SYSDATE BETWEEN person.effective_start_date

AND person.effective_end_date

AND names.person_id = person.person_id

AND person.person_id = ppos.person_id

AND TO_CHAR (txnh.transaction_id) = wft.identificationkey(+)

AND SYSDATE BETWEEN names.effective_start_date

AND names.effective_end_date

AND names.name_type = 'GLOBAL'

AND txnH.transaction_id = txnD.transaction_id

AND txnD.status = 'PENDING'

AND txnH.MODULE_IDENTIFIER = 'Transfers'

AND person.person_number =nvl(:L_PERSON_NUM,person.person_number)

and (EXTRACTVALUE (

xmltype ('' || txnD.data_cache || ''),

'TRANSACTION/TransCtx/PreRowAsgCalcAttributeHash/BusinessUnit')) =nvl(:L_BU_NAME,(EXTRACTVALUE (

xmltype ('' || txnD.data_cache || ''),

'TRANSACTION/TransCtx/PreRowAsgCalcAttributeHash/BusinessUnit')))

and wft.ASSIGNEESDISPLAYNAME is not null

SQL query to search for Pending Transaction of Employee Assignments changes

 

SELECT
person.person_number||'-'||INITCAP (names.display_name) pp,person.person_number
FROM hrc_txn_header txnH,
per_all_people_f person,
per_all_assignments_m asg,
per_person_names_f names,
hrc_txn_data txnD,
FA_FUSION_SOAINFRA.WFTASK wft,
per_persons ppos
WHERE UPPER (txnH.Object) IN ('PER_ALL_ASSIGNMENTS_M')
AND txnH.object_id = asg.assignment_id
AND SYSDATE BETWEEN asg.effective_start_date
AND asg.effective_end_date
AND asg.person_id = person.person_id
AND SYSDATE BETWEEN person.effective_start_date
AND person.effective_end_date
AND names.person_id = person.person_id
AND person.person_id = ppos.person_id
AND TO_CHAR (txnh.transaction_id) = wft.identificationkey(+)
AND SYSDATE BETWEEN names.effective_start_date
AND names.effective_end_date
AND names.name_type = 'GLOBAL'
AND txnH.transaction_id = txnD.transaction_id
AND txnD.status = 'PENDING'
AND txnH.MODULE_IDENTIFIER = 'Transfers'
and wft.ASSIGNEESDISPLAYNAME is not null

Link Tables Between Workflow Table (FA_FUSION_SOAINFRA.WFTASK) and Projects Table (PJF_PROJECTS_ALL_B)

 1. PROJECT STATUS NOTIFICATION APPROVAL: 


select * from FA_FUSION_SOAINFRA.WFTASK where componentname ='ProjectStatusNotificationApproval'
and identificationkey = (select project_id from pjf_projects_all_b where segment1 = <Project Number>);

2. FORECAST APPROVAL: 

select * from FA_FUSION_SOAINFRA.WFTASK where componentname ='ApprovePlanVersion'
and identificationkey = (select plan_version_id from PJO_PLAN_VERSIONS_B where project_id = (select project_id from pjf_projects_all_b where segment1 = <Project Number>));

 

3. CONTRACT APPROVAL: 

select * from FA_FUSION_SOAINFRA.WFTASK where componentname ='ContractsApproval' and taskid in (select task_id from OKC_K_HEADERS_ALL_B where contract_number = <Contract Number>); 

 

To join the contracts table with the projects table, you need the following SQL:

SELECT OKH.CONTRACT_NUMBER
,OKHT.COGNOMEN AWARD_NAME
,PPAB.SEGMENT1 PROJ_NUM
FROM fusion.OKC_K_HEADERS_ALL_B OKH
, fusion.OKC_K_HEADERS_TL OKHT
, fusion.GMS_AWARD_HEADERS_B GAH
, fusion.GMS_AWARD_PROJECTS GAP
, fusion.PJF_PROJECTS_ALL_B PPAB
WHERE GAH.ID = OKH.ID
AND OKH.ID = OKHT.ID
AND OKH.ID = GAP.AWARD_ID
AND GAP.PROJECT_ID = PPAB.PROJECT_ID
AND OKH.CONTRACT_NUMBER = <Contract Number>;