38: p_table_owner varchar2(30);
39: BEGIN
40: JTF_DIAGNOSTIC_ADAPTUTIL.setUpVars;
41: JTF_DIAGNOSTIC_ADAPTUTIL.addStringToReport('@html');
42: JTF_DIAGNOSTIC_COREAPI.insert_style_sheet;
43: row_limit := 1000;
44: -- accept input
45: l_org_id := JTF_DIAGNOSTIC_ADAPTUTIL.getInputValue('Organization Id',inputs);
46: l_job_id := JTF_DIAGNOSTIC_ADAPTUTIL.getInputValue('Job Id',inputs);
85: 'where ' || we_dyn_where_clause || ' wdj.wip_entity_id = we.wip_entity_id '||
86: 'and wdj.date_released is null '||
87: 'and WDJ.STATUS_TYPE IN (3, 4, 5, 6, 14, 15) ';
88:
89: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
90: 'Jobs/Schedules with invalid Release Date.',true,null,'Y',row_limit);
91:
92: IF (dummy_num = row_limit) THEN
93: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
89: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
90: 'Jobs/Schedules with invalid Release Date.',true,null,'Y',row_limit);
91:
92: IF (dummy_num = row_limit) THEN
93: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
94: END IF;
95:
96: IF (dummy_num > 0) THEN
97: reportStr := 'The rows returned above signify that there are released jobs with null date released.';
94: END IF;
95:
96: IF (dummy_num > 0) THEN
97: reportStr := 'The rows returned above signify that there are released jobs with null date released.';
98: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
99: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
100: END IF;
101:
102:
95:
96: IF (dummy_num > 0) THEN
97: reportStr := 'The rows returned above signify that there are released jobs with null date released.';
98: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
99: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
100: END IF;
101:
102:
103: -- 2 This script will identify all jobs where quantity completed on job is not in sync with Inventory
121: ' and mmt.inventory_item_id = wdj.primary_item_id '||
122: ' and mmt.transaction_action_id in (31,32)) - quantity_completed) >0.00001 order by we.wip_entity_id '; /*FP of Bug#12727085 (Bug#13643469 ):WIP supports upto 6 decimals, while INV supports only upto 5 decimals.
123: Hence, we are checking for difference. */
124:
125: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
126: 'Jobs/Schedules with invalid Job Quantity Completed',true,null,'Y',row_limit);
127:
128: IF (dummy_num = row_limit) THEN
129: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
125: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
126: 'Jobs/Schedules with invalid Job Quantity Completed',true,null,'Y',row_limit);
127:
128: IF (dummy_num = row_limit) THEN
129: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
130: END IF;
131:
132: IF (dummy_num > 0) THEN
133: reportStr := 'The rows returned above signify that there are jobs where quantity completed on job is not in sync with Inventory.';
130: END IF;
131:
132: IF (dummy_num > 0) THEN
133: reportStr := 'The rows returned above signify that there are jobs where quantity completed on job is not in sync with Inventory.';
134: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
135: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint('Please open a service request against Oracle Work in Process for the data-fix and root-cause, and upload the output of this diagnostic test.
');
136: END IF;
137:
138:
131:
132: IF (dummy_num > 0) THEN
133: reportStr := 'The rows returned above signify that there are jobs where quantity completed on job is not in sync with Inventory.';
134: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
135: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint('Please open a service request against Oracle Work in Process for the data-fix and root-cause, and upload the output of this diagnostic test.
');
136: END IF;
137:
138:
139: -- 3 This script will identify all jobs where Resource Start and End Dates falls outside of Operation Start and End Dates
159: ' and ( (wop.first_unit_start_date > wor.start_date) '||
160: ' or '||
161: ' (wop.last_unit_completion_date < wor.completion_date)) order by wop.organization_id, wop.wip_entity_id ';
162:
163: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
164: 'Jobs/Schedules with invalid Job Resource Start and End Date. ',true,null,'Y',row_limit);
165:
166: IF (dummy_num = row_limit) THEN
167: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
163: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
164: 'Jobs/Schedules with invalid Job Resource Start and End Date. ',true,null,'Y',row_limit);
165:
166: IF (dummy_num = row_limit) THEN
167: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
168: END IF;
169:
170: IF (dummy_num > 0) THEN
171: reportStr := 'The rows returned above signify that there are resources on Jobs/Schedules where Start and End Dates falls outside of Operation Start and End Dates.';
168: END IF;
169:
170: IF (dummy_num > 0) THEN
171: reportStr := 'The rows returned above signify that there are resources on Jobs/Schedules where Start and End Dates falls outside of Operation Start and End Dates.';
172: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
173: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
174: END IF;
175:
176: --4 This script will identify all jobs where the quantity issued of material requirements is not in sync with Inventory
169:
170: IF (dummy_num > 0) THEN
171: reportStr := 'The rows returned above signify that there are resources on Jobs/Schedules where Start and End Dates falls outside of Operation Start and End Dates.';
172: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
173: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
174: END IF;
175:
176: --4 This script will identify all jobs where the quantity issued of material requirements is not in sync with Inventory
177: sqltxt :=
193: ' HAVING (Sum(mmt.primary_quantity) - wro.quantity_issued*(-1)) >0.00001 '|| --FP Bug# 13643469 Bug#12727085 WIP supports upto 6 decimals, while INV supports only upto 5 decimals. Hence, we are checking for difference.
194: 'GROUP BY wdj.wip_entity_id, substr(we.wip_entity_name,1,15), we.organization_id, wro.inventory_item_id, wro.operation_seq_num, '||
195: ' wro.quantity_per_assembly, wro.required_quantity, wro.quantity_issued ';
196:
197: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
198: 'Jobs with Quantity_Issued in material requirements not in sync with Inventory.',true,null,'Y',row_limit);
199:
200: IF (dummy_num = row_limit) THEN
201: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
197: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
198: 'Jobs with Quantity_Issued in material requirements not in sync with Inventory.',true,null,'Y',row_limit);
199:
200: IF (dummy_num = row_limit) THEN
201: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
202: END IF;
203:
204: IF (dummy_num > 0) THEN
205: reportStr := 'The rows returned above signify that there are jobs where issued quantity of material requirements is not in sync with Inventory.';
202: END IF;
203:
204: IF (dummy_num > 0) THEN
205: reportStr := 'The rows returned above signify that there are jobs where issued quantity of material requirements is not in sync with Inventory.';
206: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
207: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
208: END IF;
209:
210: --5 This script will identify unreleased jobs that have quantities on operation.
203:
204: IF (dummy_num > 0) THEN
205: reportStr := 'The rows returned above signify that there are jobs where issued quantity of material requirements is not in sync with Inventory.';
206: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
207: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
208: END IF;
209:
210: --5 This script will identify unreleased jobs that have quantities on operation.
211: sqltxt :=
240: ' OR wo.quantity_scrapped <> 0 '||
241: ' OR wo.quantity_rejected <> 0 '||
242: ' OR wo.quantity_completed <> 0) ';
243:
244: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
245: 'Unreleased jobs that have quantities on operation.',true,null,'Y',row_limit);
246:
247: IF (dummy_num = row_limit) THEN
248: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
244: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
245: 'Unreleased jobs that have quantities on operation.',true,null,'Y',row_limit);
246:
247: IF (dummy_num = row_limit) THEN
248: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
249: END IF;
250:
251: IF (dummy_num > 0) THEN
252: reportStr := 'The rows returned above signify that there are unreleased jobs that have quantities on operation.';
249: END IF;
250:
251: IF (dummy_num > 0) THEN
252: reportStr := 'The rows returned above signify that there are unreleased jobs that have quantities on operation.';
253: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
254: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
255: END IF;
256:
257: --6 This script will identify all released jobs that do not have any quantites on any operation.
250:
251: IF (dummy_num > 0) THEN
252: reportStr := 'The rows returned above signify that there are unreleased jobs that have quantities on operation.';
253: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
254: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
255: END IF;
256:
257: --6 This script will identify all released jobs that do not have any quantites on any operation.
258: sqltxt :=
296: 'AND wo1.organization_id = wo.organization_id '||
297: 'AND wo1.wip_entity_id = wo.wip_entity_id '||
298: 'AND wo1.OPERATION_SEQ_NUM <= wo.PREVIOUS_OPERATION_SEQ_NUM ))';
299:
300: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
301: 'Released jobs that do not have any quantites on any operation.',true,null,'Y',row_limit);
302:
303: IF (dummy_num = row_limit) THEN
304: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
300: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
301: 'Released jobs that do not have any quantites on any operation.',true,null,'Y',row_limit);
302:
303: IF (dummy_num = row_limit) THEN
304: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
305: END IF;
306:
307: IF (dummy_num > 0) THEN
308: reportStr := 'The rows returned above signify that there are released jobs that do not have any quantites on any operation.';
305: END IF;
306:
307: IF (dummy_num > 0) THEN
308: reportStr := 'The rows returned above signify that there are released jobs that do not have any quantites on any operation.';
309: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
310: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
311: END IF;
312:
313:
306:
307: IF (dummy_num > 0) THEN
308: reportStr := 'The rows returned above signify that there are released jobs that do not have any quantites on any operation.';
309: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
310: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
311: END IF;
312:
313:
314: --6.5 This script identifies all jobs that have operation quantities not in sync with move transaction quantities
464: ' )) ' ||
465: ' ) ' ||
466: ' ) ' ;
467:
468: dummy_num := JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
469: 'Jobs that have operation quantities not in sync with move transaction quantities.',true,null,'Y',row_limit);
470:
471: IF (dummy_num = row_limit) THEN
472: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
468: dummy_num := JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
469: 'Jobs that have operation quantities not in sync with move transaction quantities.',true,null,'Y',row_limit);
470:
471: IF (dummy_num = row_limit) THEN
472: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
473: END IF;
474:
475: if dummy_num > 0 then
476: reportStr := 'The rows returned above signify that Operation quantites are not in sync with Move Transactions. ';
473: END IF;
474:
475: if dummy_num > 0 then
476: reportStr := 'The rows returned above signify that Operation quantites are not in sync with Move Transactions. ';
477: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
478: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
479: end if;
480:
481: --7 This script identifies all records that are Orphan in the WIP tables.
474:
475: if dummy_num > 0 then
476: reportStr := 'The rows returned above signify that Operation quantites are not in sync with Move Transactions. ';
477: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
478: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
479: end if;
480:
481: --7 This script identifies all records that are Orphan in the WIP tables.
482: sqltxt :=
510: ' NOT EXISTS (SELECT 1 FROM wip_entities we '||
511: ' WHERE ' || we_dyn_where_clause || ' wo.wip_entity_id = we.wip_entity_id '||
512: ' AND wo.organization_id = we.organization_id) ';
513:
514: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
515: 'Records Orphan in the WIP tables.',true,null,'Y',row_limit);
516:
517: IF (dummy_num = row_limit) THEN
518: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
514: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
515: 'Records Orphan in the WIP tables.',true,null,'Y',row_limit);
516:
517: IF (dummy_num = row_limit) THEN
518: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
519: END IF;
520:
521: IF (dummy_num > 0) THEN
522: reportStr := 'The rows returned above signify that there are orphan records exist in WIP table(s). ';
519: END IF;
520:
521: IF (dummy_num > 0) THEN
522: reportStr := 'The rows returned above signify that there are orphan records exist in WIP table(s). ';
523: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
524: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
525: END IF;
526:
527:
520:
521: IF (dummy_num > 0) THEN
522: reportStr := 'The rows returned above signify that there are orphan records exist in WIP table(s). ';
523: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
524: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
525: END IF;
526:
527:
528: -- 8 This script identifies all the jobs that have multiple PO Move resources in an operation.
543: 'HAVING Count(*) > 1 '||
544: 'GROUP BY wdj.wip_entity_id, substr(we.wip_entity_name,1,15), '||
545: ' wdj.organization_id, wo.operation_seq_num ';
546:
547: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
548: 'Jobs that have multiple PO Move resources in an operation.',true,null,'Y',row_limit);
549:
550: IF (dummy_num = row_limit) THEN
551: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
547: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
548: 'Jobs that have multiple PO Move resources in an operation.',true,null,'Y',row_limit);
549:
550: IF (dummy_num = row_limit) THEN
551: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
552: END IF;
553:
554: IF (dummy_num > 0) THEN
555: reportStr := 'The rows returned above signify that there are multiple PO move resources in an operation.';
552: END IF;
553:
554: IF (dummy_num > 0) THEN
555: reportStr := 'The rows returned above signify that there are multiple PO move resources in an operation.';
556: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
557: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
558: END IF;
559:
560:
553:
554: IF (dummy_num > 0) THEN
555: reportStr := 'The rows returned above signify that there are multiple PO move resources in an operation.';
556: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
557: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
558: END IF;
559:
560:
561: --9 This script check if there are any trailing spaces in the text fields on Discrete Job for a particular Job.
631: if sqltext2 is not null then
632: sqltxt := sqltext2;
633: end if;
634:
635: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
636: 'Trailing spaces in the text fields for a Discrete Job',true,null,'Y',row_limit);
637:
638: IF (dummy_num > 0) THEN
639: reportStr := 'The rows returned above signify that there are trailing spaces in the text fields for Discrete Job.';
636: 'Trailing spaces in the text fields for a Discrete Job',true,null,'Y',row_limit);
637:
638: IF (dummy_num > 0) THEN
639: reportStr := 'The rows returned above signify that there are trailing spaces in the text fields for Discrete Job.';
640: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
641: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
642: END IF;
643: END IF;
644:
637:
638: IF (dummy_num > 0) THEN
639: reportStr := 'The rows returned above signify that there are trailing spaces in the text fields for Discrete Job.';
640: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
641: JTF_DIAGNOSTIC_COREAPI.ActionErrorLink('Please refer to Metalink note ', 402202.1, 'to get the root-cause patch and steps to correct the data.
');
642: END IF;
643: END IF;
644:
645: --COMPLETION SUBINVENTORY / LOCATOR
658: ' WHERE wdj.completion_subinventory = mi.secondary_inventory_name '||
659: ' AND wdj.organization_id = mi.organization_id '||
660: ' AND mi.secondary_inventory_name <> ''AX_INTRANS'' AND Nvl(mi.disable_date,Trunc(SYSDATE+1)) > Trunc(SYSDATE)) ';
661:
662: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
663: 'Jobs/Schedules with invalid Completion Subinventory',true,null,'Y',row_limit);
664:
665: IF (dummy_num = row_limit) THEN
666: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
662: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
663: 'Jobs/Schedules with invalid Completion Subinventory',true,null,'Y',row_limit);
664:
665: IF (dummy_num = row_limit) THEN
666: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
667: END IF;
668:
669: IF (dummy_num > 0) THEN
670: reportStr := 'The rows returned above signify that there are jobs having invalid completion subinventory.';
667: END IF;
668:
669: IF (dummy_num > 0) THEN
670: reportStr := 'The rows returned above signify that there are jobs having invalid completion subinventory.';
671: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
672: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
673: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
674: END IF;
675:
669: IF (dummy_num > 0) THEN
670: reportStr := 'The rows returned above signify that there are jobs having invalid completion subinventory.';
671: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
672: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
673: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
674: END IF;
675:
676:
677: --11. completion subinventory not valid for the assembly. assembly has "restrict subinventories" enabled and
691: ' WHERE wdj.completion_subinventory = mi.secondary_inventory '||
692: ' AND wdj.organization_id = mi.organization_id '||
693: ' AND wdj.primary_item_id = mi.inventory_item_id) ';
694:
695: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
696: 'Jobs/Schedules with invalid Completion Subinventory - Not part of "Restricted Subinventories"',true,null,'Y',row_limit);
697:
698: IF (dummy_num = row_limit) THEN
699: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
695: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
696: 'Jobs/Schedules with invalid Completion Subinventory - Not part of "Restricted Subinventories"',true,null,'Y',row_limit);
697:
698: IF (dummy_num = row_limit) THEN
699: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
700: END IF;
701:
702: IF (dummy_num > 0) THEN
703: reportStr := 'The rows returned above signify that there are jobs having completion subinventory that is not part of "Restricted Subinventories". ';
700: END IF;
701:
702: IF (dummy_num > 0) THEN
703: reportStr := 'The rows returned above signify that there are jobs having completion subinventory that is not part of "Restricted Subinventories". ';
704: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
705: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
706: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
707: END IF;
708:
702: IF (dummy_num > 0) THEN
703: reportStr := 'The rows returned above signify that there are jobs having completion subinventory that is not part of "Restricted Subinventories". ';
704: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
705: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
706: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
707: END IF;
708:
709: -- 12. completion subinventory has invalid material status
710: sqltxt :=
720: ' wdj.organization_id, wdj.primary_item_id, '||
721: ' wdj.completion_subinventory, '||
722: ' NULL, NULL, NULL, ''Z'') <> ''Y'' ';
723:
724: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
725: 'Jobs/Schedules with invalid Completion Subinventory - Invalid Material Status',true,null,'Y',row_limit);
726:
727: IF (dummy_num = row_limit) THEN
728: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
724: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
725: 'Jobs/Schedules with invalid Completion Subinventory - Invalid Material Status',true,null,'Y',row_limit);
726:
727: IF (dummy_num = row_limit) THEN
728: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
729: END IF;
730:
731: IF (dummy_num > 0) THEN
732: reportStr := 'The rows returned above signify that there are jobs having completion subinventory with invalid material status.';
729: END IF;
730:
731: IF (dummy_num > 0) THEN
732: reportStr := 'The rows returned above signify that there are jobs having completion subinventory with invalid material status.';
733: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
734: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
735: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
736: END IF;
737:
731: IF (dummy_num > 0) THEN
732: reportStr := 'The rows returned above signify that there are jobs having completion subinventory with invalid material status.';
733: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
734: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
735: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
736: END IF;
737:
738: -- 13. completion locator missing
739: sqltxt :=
748: ' wdj.completion_subinventory, '||
749: ' wdj.primary_item_id) <> 1 '||
750: 'AND completion_locator_id IS NULL ';
751:
752: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
753: 'Jobs/Schedules with missing Completion Locator',true,null,'Y',row_limit);
754:
755: IF (dummy_num = row_limit) THEN
756: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
752: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
753: 'Jobs/Schedules with missing Completion Locator',true,null,'Y',row_limit);
754:
755: IF (dummy_num = row_limit) THEN
756: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
757: END IF;
758:
759: IF (dummy_num > 0) THEN
760: reportStr := 'The rows returned above signify that there are jobs with null completion locator.';
757: END IF;
758:
759: IF (dummy_num > 0) THEN
760: reportStr := 'The rows returned above signify that there are jobs with null completion locator.';
761: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
762: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
763: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
764: END IF;
765:
759: IF (dummy_num > 0) THEN
760: reportStr := 'The rows returned above signify that there are jobs with null completion locator.';
761: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
762: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
763: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
764: END IF;
765:
766: -- 14. completion locator was supposed to be null but populated
767: sqltxt :=
776: ' wdj.completion_subinventory, '||
777: ' wdj.primary_item_id) = 1 '||
778: 'AND completion_locator_id IS NOT NULL ';
779:
780: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
781: 'Jobs/Schedules with non locator controlled Completion Subinventory but Completion Locator populated.',true,null,'Y',row_limit);
782:
783: IF (dummy_num = row_limit) THEN
784: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
780: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
781: 'Jobs/Schedules with non locator controlled Completion Subinventory but Completion Locator populated.',true,null,'Y',row_limit);
782:
783: IF (dummy_num = row_limit) THEN
784: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
785: END IF;
786:
787: IF (dummy_num > 0) THEN
788: reportStr := 'The rows returned above signify that there are jobs with non locator controlled Completion Subinventory but Completion Locator populated.';
785: END IF;
786:
787: IF (dummy_num > 0) THEN
788: reportStr := 'The rows returned above signify that there are jobs with non locator controlled Completion Subinventory but Completion Locator populated.';
789: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
790: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
791: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
792: END IF;
793:
787: IF (dummy_num > 0) THEN
788: reportStr := 'The rows returned above signify that there are jobs with non locator controlled Completion Subinventory but Completion Locator populated.';
789: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
790: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
791: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
792: END IF;
793:
794: --15. completion subinventory NULL but completion locator populated
795: sqltxt :=
801: 'AND wdj.status_type IN (1,3,4) '||
802: 'AND wdj.completion_subinventory IS NULL '||
803: 'AND wdj.completion_locator_id IS NOT NULL ';
804:
805: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
806: 'Jobs/Schedules with a completion locator but no Completion Subinventory.',true,null,'Y',row_limit);
807:
808: IF (dummy_num = row_limit) THEN
809: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
805: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
806: 'Jobs/Schedules with a completion locator but no Completion Subinventory.',true,null,'Y',row_limit);
807:
808: IF (dummy_num = row_limit) THEN
809: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
810: END IF;
811:
812: IF (dummy_num > 0) THEN
813: reportStr := 'The rows returned above signify that there are jobs with a completion locator but no Completion Subinventory.';
810: END IF;
811:
812: IF (dummy_num > 0) THEN
813: reportStr := 'The rows returned above signify that there are jobs with a completion locator but no Completion Subinventory.';
814: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
815: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
816: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
817: END IF;
818:
812: IF (dummy_num > 0) THEN
813: reportStr := 'The rows returned above signify that there are jobs with a completion locator but no Completion Subinventory.';
814: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
815: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
816: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
817: END IF;
818:
819: -- 16. completion locator not valid
820: sqltxt :=
833: ' AND wdj.organization_id = mil.organization_id '||
834: ' AND wdj.completion_subinventory = mil.subinventory_code '||
835: ' AND Nvl(mil.disable_date, trunc(sysdate+1)) > trunc(sysdate)) ';
836:
837: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
838: 'Jobs/Schedules with invalid Completion Locator ',true,null,'Y',row_limit);
839:
840: IF (dummy_num = row_limit) THEN
841: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
837: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
838: 'Jobs/Schedules with invalid Completion Locator ',true,null,'Y',row_limit);
839:
840: IF (dummy_num = row_limit) THEN
841: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
842: END IF;
843:
844: IF (dummy_num > 0) THEN
845: reportStr := 'The rows returned above signify that there are jobs having invalid completion locator.';
842: END IF;
843:
844: IF (dummy_num > 0) THEN
845: reportStr := 'The rows returned above signify that there are jobs having invalid completion locator.';
846: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
847: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
848: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
849: END IF;
850:
844: IF (dummy_num > 0) THEN
845: reportStr := 'The rows returned above signify that there are jobs having invalid completion locator.';
846: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
847: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
848: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
849: END IF;
850:
851: -- 17. completion locator not valid for the assembly. assembly has "restrict locators" enabled and
852: -- this locator is not part of it.
867: ' WHERE wdj.completion_locator_id = msl.secondary_locator '||
868: ' AND wdj.organization_id = msl.organization_id '||
869: ' AND wdj.primary_item_id = msl.inventory_item_id) ';
870:
871: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
872: 'Jobs/Schedules with invalid Completion Locator - Not part of "Restricted Locators"',true,null,'Y',row_limit);
873:
874: IF (dummy_num = row_limit) THEN
875: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
871: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
872: 'Jobs/Schedules with invalid Completion Locator - Not part of "Restricted Locators"',true,null,'Y',row_limit);
873:
874: IF (dummy_num = row_limit) THEN
875: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
876: END IF;
877:
878: IF (dummy_num > 0) THEN
879: reportStr := 'The rows returned above signify that there are jobs having completion locator that is not part of "Restricted Locators".';
876: END IF;
877:
878: IF (dummy_num > 0) THEN
879: reportStr := 'The rows returned above signify that there are jobs having completion locator that is not part of "Restricted Locators".';
880: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
881: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
882: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
883: END IF;
884:
878: IF (dummy_num > 0) THEN
879: reportStr := 'The rows returned above signify that there are jobs having completion locator that is not part of "Restricted Locators".';
880: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
881: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
882: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
883: END IF;
884:
885: -- 18.completion locator has invalid material status
886: sqltxt :=
898: ' wdj.organization_id, wdj.primary_item_id, '||
899: ' wdj.completion_subinventory, wdj.completion_locator_id, '||
900: ' NULL, NULL, ''Z'') <> ''Y'' ';
901:
902: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
903: 'Jobs/Schedules with invalid Completion Locator - Invalid Material Status',true,null,'Y',row_limit);
904:
905: IF (dummy_num = row_limit) THEN
906: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
902: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
903: 'Jobs/Schedules with invalid Completion Locator - Invalid Material Status',true,null,'Y',row_limit);
904:
905: IF (dummy_num = row_limit) THEN
906: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
907: END IF;
908:
909: IF (dummy_num > 0) THEN
910: reportStr := 'The rows returned above signify that there are jobs having completion locator with invalid material status.';
907: END IF;
908:
909: IF (dummy_num > 0) THEN
910: reportStr := 'The rows returned above signify that there are jobs having completion locator with invalid material status.';
911: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
912: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
913: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
914: END IF;
915:
909: IF (dummy_num > 0) THEN
910: reportStr := 'The rows returned above signify that there are jobs having completion locator with invalid material status.';
911: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
912: reportStr := 'Please query up each job in the discrete job form, and update the completion subinventory/locator of the problematic job to a valid value.
';
913: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
914: END IF;
915:
916: --SUPPLY SUBINVENTORY / LOCATOR
917: -----------------------------
930: ' AND wro.organization_id = mi.organization_id '||
931: ' AND mi.secondary_inventory_name <> ''AX_INTRANS'' '||
932: ' AND Nvl(mi.disable_date,Trunc(SYSDATE+1)) > Trunc(SYSDATE)) ';
933:
934: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
935: 'Jobs/Schedules with invalid Supply Subinventory',true,null,'Y',row_limit);
936:
937: IF (dummy_num = row_limit) THEN
938: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
934: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
935: 'Jobs/Schedules with invalid Supply Subinventory',true,null,'Y',row_limit);
936:
937: IF (dummy_num = row_limit) THEN
938: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
939: END IF;
940:
941: IF (dummy_num > 0) THEN
942: reportStr := 'The rows returned above signify that there are jobs having invalid supply subinventory.';
939: END IF;
940:
941: IF (dummy_num > 0) THEN
942: reportStr := 'The rows returned above signify that there are jobs having invalid supply subinventory.';
943: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
944: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
945: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
946: END IF;
947:
941: IF (dummy_num > 0) THEN
942: reportStr := 'The rows returned above signify that there are jobs having invalid supply subinventory.';
943: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
944: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
945: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
946: END IF;
947:
948: --20. supply subinventory not valid for the component. component has "restrict subinventories" enabled and
949: -- this subinventory is not part of it.
962: ' WHERE wro.supply_subinventory = mi.secondary_inventory '||
963: ' AND wro.organization_id = mi.organization_id '||
964: ' AND wro.inventory_item_id = mi.inventory_item_id) ';
965:
966: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
967: 'Jobs/Schedules with invalid Supply Subinventory - Not part of '||
968: ' "Restricted Subinventories".',true,null,'Y',row_limit);
969:
970: IF (dummy_num = row_limit) THEN
967: 'Jobs/Schedules with invalid Supply Subinventory - Not part of '||
968: ' "Restricted Subinventories".',true,null,'Y',row_limit);
969:
970: IF (dummy_num = row_limit) THEN
971: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
972: END IF;
973:
974: IF (dummy_num > 0) THEN
975: reportStr := 'The rows returned above signify that there are jobs having supply subinventory that is not part of "Restricted Subinventories".';
973:
974: IF (dummy_num > 0) THEN
975: reportStr := 'The rows returned above signify that there are jobs having supply subinventory that is not part of "Restricted Subinventories".';
976:
977: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
978: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
979: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
980: END IF;
981:
975: reportStr := 'The rows returned above signify that there are jobs having supply subinventory that is not part of "Restricted Subinventories".';
976:
977: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
978: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
979: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
980: END IF;
981:
982: --21. supply subinventory has invalid material status
983: sqltxt :=
993: ' wro.organization_id, wro.inventory_item_id, '||
994: ' wro.supply_subinventory, '||
995: ' NULL, NULL, NULL, ''Z'') <> ''Y'' ';
996:
997: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
998: 'Jobs/Schedules with invalid Supply Subinventory - Invalid Material Status',true,null,'Y',row_limit);
999:
1000: IF (dummy_num = row_limit) THEN
1001: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
997: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
998: 'Jobs/Schedules with invalid Supply Subinventory - Invalid Material Status',true,null,'Y',row_limit);
999:
1000: IF (dummy_num = row_limit) THEN
1001: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1002: END IF;
1003:
1004: IF (dummy_num > 0) THEN
1005: reportStr := 'The rows returned above signify that there are jobs having supply subinventory with invalid material status.';
1002: END IF;
1003:
1004: IF (dummy_num > 0) THEN
1005: reportStr := 'The rows returned above signify that there are jobs having supply subinventory with invalid material status.';
1006: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1007: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1008: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1009: END IF;
1010:
1004: IF (dummy_num > 0) THEN
1005: reportStr := 'The rows returned above signify that there are jobs having supply subinventory with invalid material status.';
1006: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1007: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1008: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1009: END IF;
1010:
1011: --22. supply locator locator missing
1012: sqltxt :=
1021: ' wro.supply_subinventory, '||
1022: ' wro.inventory_item_id) <> 1 '||
1023: 'AND wro.supply_locator_id IS NULL ';
1024:
1025: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1026: 'Jobs/Schedules with Supply Locator Missing',true,null,'Y',row_limit);
1027:
1028: IF (dummy_num = row_limit) THEN
1029: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1025: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1026: 'Jobs/Schedules with Supply Locator Missing',true,null,'Y',row_limit);
1027:
1028: IF (dummy_num = row_limit) THEN
1029: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1030: END IF;
1031:
1032: IF (dummy_num > 0) THEN
1033: reportStr := 'The rows returned above signify that there are jobs where supply locator is missing.';
1030: END IF;
1031:
1032: IF (dummy_num > 0) THEN
1033: reportStr := 'The rows returned above signify that there are jobs where supply locator is missing.';
1034: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1035: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1036: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1037: END IF;
1038:
1032: IF (dummy_num > 0) THEN
1033: reportStr := 'The rows returned above signify that there are jobs where supply locator is missing.';
1034: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1035: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1036: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1037: END IF;
1038:
1039: --23. supply locator was supposed to be null but populated
1040: sqltxt :=
1049: ' wro.supply_subinventory, '||
1050: ' wro.inventory_item_id) = 1 '||
1051: 'AND wro.supply_locator_id IS NOT NULL ';
1052:
1053: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1054: 'Jobs/Schedules with non locator controlled Supply Subinventory but Supply Locator populated.',true,null,'Y',row_limit);
1055:
1056: IF (dummy_num = row_limit) THEN
1057: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1053: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1054: 'Jobs/Schedules with non locator controlled Supply Subinventory but Supply Locator populated.',true,null,'Y',row_limit);
1055:
1056: IF (dummy_num = row_limit) THEN
1057: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1058: END IF;
1059:
1060: IF (dummy_num > 0) THEN
1061: reportStr := 'The rows returned above signify that there are jobs with non locator controlled Supply Subinventory but Supply Locator populated.';
1058: END IF;
1059:
1060: IF (dummy_num > 0) THEN
1061: reportStr := 'The rows returned above signify that there are jobs with non locator controlled Supply Subinventory but Supply Locator populated.';
1062: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1063: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1064: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1065: END IF;
1066:
1060: IF (dummy_num > 0) THEN
1061: reportStr := 'The rows returned above signify that there are jobs with non locator controlled Supply Subinventory but Supply Locator populated.';
1062: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1063: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1064: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1065: END IF;
1066:
1067: --24. supply subinventory NULL but supply locator populated
1068: sqltxt :=
1074: 'AND wdj.status_type IN (1,3,4) '||
1075: 'AND wro.supply_subinventory IS NULL '||
1076: 'AND wro.supply_locator_id IS NOT NULL ';
1077:
1078: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1079: 'Jobs/Schedules with a Supply Locator but no Supply Subinventory',true,null,'Y',row_limit);
1080:
1081: IF (dummy_num = row_limit) THEN
1082: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1078: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1079: 'Jobs/Schedules with a Supply Locator but no Supply Subinventory',true,null,'Y',row_limit);
1080:
1081: IF (dummy_num = row_limit) THEN
1082: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1083: END IF;
1084:
1085: IF (dummy_num > 0) THEN
1086: reportStr := 'The rows returned above signify that there are jobs where supply locator is populated but supply subinventory is null.';
1083: END IF;
1084:
1085: IF (dummy_num > 0) THEN
1086: reportStr := 'The rows returned above signify that there are jobs where supply locator is populated but supply subinventory is null.';
1087: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1088: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1089: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1090: END IF;
1091:
1085: IF (dummy_num > 0) THEN
1086: reportStr := 'The rows returned above signify that there are jobs where supply locator is populated but supply subinventory is null.';
1087: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1088: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1089: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1090: END IF;
1091:
1092: --25. supply locator not valid
1093: sqltxt :=
1106: ' AND wro.organization_id = mil.organization_id '||
1107: ' AND wro.supply_subinventory = mil.subinventory_code '||
1108: ' AND Nvl(mil.disable_date, trunc(sysdate+1)) > trunc(sysdate)) ';
1109:
1110: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1111: 'Jobs/Schedules with invalid Supply Locator ',true,null,'Y',row_limit);
1112:
1113: IF (dummy_num = row_limit) THEN
1114: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1110: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1111: 'Jobs/Schedules with invalid Supply Locator ',true,null,'Y',row_limit);
1112:
1113: IF (dummy_num = row_limit) THEN
1114: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1115: END IF;
1116:
1117: IF (dummy_num > 0) THEN
1118: reportStr := 'The rows returned above signify that there are jobs where supply locator is not valid.';
1115: END IF;
1116:
1117: IF (dummy_num > 0) THEN
1118: reportStr := 'The rows returned above signify that there are jobs where supply locator is not valid.';
1119: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1120: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1121: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1122: END IF;
1123:
1117: IF (dummy_num > 0) THEN
1118: reportStr := 'The rows returned above signify that there are jobs where supply locator is not valid.';
1119: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1120: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1121: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1122: END IF;
1123:
1124: --26. Supply locator not valid for the component. component has "restrict locators" enabled and
1125: -- this locator is not part of it.
1140: ' WHERE wro.supply_locator_id = msl.secondary_locator '||
1141: ' AND wro.organization_id = msl.organization_id '||
1142: ' AND wro.inventory_item_id = msl.inventory_item_id) ';
1143:
1144: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1145: 'Jobs/Schedules with invalid Supply Locator - Not part of "Restricted Locators"',true,null,'Y',row_limit);
1146:
1147: IF (dummy_num = row_limit) THEN
1148: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1144: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1145: 'Jobs/Schedules with invalid Supply Locator - Not part of "Restricted Locators"',true,null,'Y',row_limit);
1146:
1147: IF (dummy_num = row_limit) THEN
1148: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1149: END IF;
1150:
1151: IF (dummy_num > 0) THEN
1152: reportStr := 'The rows returned above signify that there are jobs where supply locator is populated but it is not part of "Restricted Locators".';
1149: END IF;
1150:
1151: IF (dummy_num > 0) THEN
1152: reportStr := 'The rows returned above signify that there are jobs where supply locator is populated but it is not part of "Restricted Locators".';
1153: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1154: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1155: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1156: END IF;
1157:
1151: IF (dummy_num > 0) THEN
1152: reportStr := 'The rows returned above signify that there are jobs where supply locator is populated but it is not part of "Restricted Locators".';
1153: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1154: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1155: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1156: END IF;
1157:
1158: --27. supply locator has invalid material status
1159: sqltxt :=
1171: ' wro.organization_id, wro.inventory_item_id, '||
1172: ' wro.supply_subinventory, wro.supply_locator_id, '||
1173: ' NULL, NULL, ''Z'') <> ''Y'' ';
1174:
1175: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1176: 'Jobs/Schedules invalid Supply Locator - Invalid Material Status',true,null,'Y',row_limit);
1177:
1178: IF (dummy_num = row_limit) THEN
1179: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1175: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1176: 'Jobs/Schedules invalid Supply Locator - Invalid Material Status',true,null,'Y',row_limit);
1177:
1178: IF (dummy_num = row_limit) THEN
1179: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1180: END IF;
1181:
1182: IF (dummy_num > 0) THEN
1183: reportStr := 'The rows returned above signify that there are jobs having supply locator with invalid material status.';
1180: END IF;
1181:
1182: IF (dummy_num > 0) THEN
1183: reportStr := 'The rows returned above signify that there are jobs having supply locator with invalid material status.';
1184: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1185: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1186: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1187: END IF;
1188:
1182: IF (dummy_num > 0) THEN
1183: reportStr := 'The rows returned above signify that there are jobs having supply locator with invalid material status.';
1184: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1185: reportStr := 'Please query up each job in the material requirements form, and update the supply subinventory/locator of the problematic component to a valid value.
';
1186: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1187: END IF;
1188:
1189: statusStr := 'SUCCESS';
1190: isFatal := 'FALSE';
1218: l_check_failed_close_jobs varchar2(2000);
1219: BEGIN
1220: JTF_DIAGNOSTIC_ADAPTUTIL.setUpVars;
1221: JTF_DIAGNOSTIC_ADAPTUTIL.addStringToReport('@html');
1222: JTF_DIAGNOSTIC_COREAPI.insert_style_sheet;
1223: row_limit := 1000;
1224: -- accept input
1225: l_org_id := JTF_DIAGNOSTIC_ADAPTUTIL.getInputValue('Organization Id',inputs);
1226: l_job_id := JTF_DIAGNOSTIC_ADAPTUTIL.getInputValue('Job Id',inputs);
1282: ' where ' || we_dyn_where_clause || ' we.lpn_id = lpn.lpn_id '||
1283: ' and lpn.lpn_context = 2 '||
1284: ' and wip_entity_id in ' || l_check_failed_close_jobs ;
1285:
1286: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1287: 'Jobs failed in job close process due to pending transactions',true,null,'Y',row_limit);
1288:
1289: IF (dummy_num = row_limit) THEN
1290: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1286: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1287: 'Jobs failed in job close process due to pending transactions',true,null,'Y',row_limit);
1288:
1289: IF (dummy_num = row_limit) THEN
1290: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1291: END IF;
1292:
1293: IF (dummy_num > 0) THEN
1294: reportStr := 'The rows returned above signify that jobs are failed to close due to pending transactions.';
1291: END IF;
1292:
1293: IF (dummy_num > 0) THEN
1294: reportStr := 'The rows returned above signify that jobs are failed to close due to pending transactions.';
1295: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1296: reportStr := 'Check the output and process the pending transactions against the job so that job can be closed.
';
1297: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1298: END IF;
1299:
1293: IF (dummy_num > 0) THEN
1294: reportStr := 'The rows returned above signify that jobs are failed to close due to pending transactions.';
1295: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1296: reportStr := 'Check the output and process the pending transactions against the job so that job can be closed.
';
1297: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint(reportStr);
1298: END IF;
1299:
1300: --2 Jobs that are not closed but entity_type updated
1301: sqltxt :=
1332: ' and wdj.status_type <> 12 '||
1333: ' and we.entity_type in (3,7,8) -- closed DJ, closed EAM, closed LBJ '||
1334: ' order by 1,2 ' ;
1335:
1336: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1337: 'Jobs that are not closed but its entity_type updated to closed',true,null,'Y',row_limit);
1338:
1339: IF (dummy_num = row_limit) THEN
1340: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1336: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1337: 'Jobs that are not closed but its entity_type updated to closed',true,null,'Y',row_limit);
1338:
1339: IF (dummy_num = row_limit) THEN
1340: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1341: END IF;
1342:
1343: IF (dummy_num > 0) THEN
1344: reportStr := 'The rows returned above signify that there are jobs that are not closed but its entity_type updated to closed.';
1341: END IF;
1342:
1343: IF (dummy_num > 0) THEN
1344: reportStr := 'The rows returned above signify that there are jobs that are not closed but its entity_type updated to closed.';
1345: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1346: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint('Please open a service request against Oracle Work in Process for the data-fix and root-cause, and upload the output of this diagnostic test .
');
1347: END IF;
1348:
1349: --3 Jobs that are closed but entity_type not updated
1342:
1343: IF (dummy_num > 0) THEN
1344: reportStr := 'The rows returned above signify that there are jobs that are not closed but its entity_type updated to closed.';
1345: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1346: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint('Please open a service request against Oracle Work in Process for the data-fix and root-cause, and upload the output of this diagnostic test .
');
1347: END IF;
1348:
1349: --3 Jobs that are closed but entity_type not updated
1350: sqltxt :=
1381: ' and wdj.status_type = 12 '||
1382: ' and we.entity_type not in (3,7,8) '||
1383: ' order by 1,2';
1384:
1385: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1386: 'Jobs that are closed but its entity_type not updated to closed',true,null,'Y',row_limit);
1387:
1388: IF (dummy_num = row_limit) THEN
1389: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1385: dummy_num:= JTF_DIAGNOSTIC_COREAPI.display_sql(sqltxt,
1386: 'Jobs that are closed but its entity_type not updated to closed',true,null,'Y',row_limit);
1387:
1388: IF (dummy_num = row_limit) THEN
1389: JTF_DIAGNOSTIC_COREAPI.Line_Out('
Output limited to the first '|| row_limit || ' rows to prevent an excessively large output file.
');
1390: END IF;
1391:
1392: IF (dummy_num > 0) THEN
1393: reportStr := 'The rows returned above signify that there are jobs that are closed but its entity_type not updated to closed.';
1390: END IF;
1391:
1392: IF (dummy_num > 0) THEN
1393: reportStr := 'The rows returned above signify that there are jobs that are closed but its entity_type not updated to closed.';
1394: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1395: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint('Please open a service request against Oracle Work in Process for the data-fix and root-cause, and upload the output of this diagnostic test.
');
1396: END IF;
1397:
1398: statusStr := 'SUCCESS';
1391:
1392: IF (dummy_num > 0) THEN
1393: reportStr := 'The rows returned above signify that there are jobs that are closed but its entity_type not updated to closed.';
1394: JTF_DIAGNOSTIC_COREAPI.ErrorPrint(reportStr);
1395: JTF_DIAGNOSTIC_COREAPI.ActionErrorPrint('Please open a service request against Oracle Work in Process for the data-fix and root-cause, and upload the output of this diagnostic test.
');
1396: END IF;
1397:
1398: statusStr := 'SUCCESS';
1399: isFatal := 'FALSE';