[Home] [Help]
PACKAGE BODY: APPS.OE_LIN_SCH
Source
1 PACKAGE BODY OE_LIN_SCH AS
2 /* $Header: OEXLNSHB.pls 115.2 99/07/16 08:13:17 porting shi $ */
3
4 OE_SUCCESS CONSTANT VARCHAR2(1) := 'Y';
5 OE_FAILURE CONSTANT VARCHAR2(1) := 'N';
6
7
8 PROCEDURE Get_Reserved_Quantity
9 (
10 P_Line_Id IN NUMBER,
11 P_Reserved_Quantity OUT NUMBER,
12 P_Return_Status OUT VARCHAR2
13 )
14 is
15
16 begin
17
18 P_Return_Status:=OE_SUCCESS;
19
20
21 SELECT SUM( QUANTITY )
22 INTO P_Reserved_Quantity
23 FROM SO_LINE_DETAILS
24 WHERE SCHEDULE_STATUS_CODE = 'RESERVED'
25 AND LINE_ID = P_Line_Id
26 AND NVL ( INCLUDED_ITEM_FLAG , 'N' ) = 'N';
27
28
29 exception
30
31 when no_data_found then
32 P_Reserved_Quantity := 0;
33
34 when others then
35 P_Return_Status:=OE_FAILURE;
36 OE_MSG.Internal_Exception(Routine=>
37 'OE_LIN_SCH.Get_Reserved_Quantity',
38 Operation=>'Scheduling',
39 Object=>'LINE',
40 Message=>' When Others');
41
42
43 end Get_Reserved_Quantity;
44
45 PROCEDURE Get_Released_Quantity
46 (
47 P_Line_Id IN NUMBER,
48 P_Config_Item_Exists IN VARCHAR2,
49 P_Line_Released_Quantity OUT NUMBER,
50 P_Return_Status OUT VARCHAR2
51 )
52 is
53
54 begin
55
56 P_Return_Status:=OE_SUCCESS;
57
58
59 SELECT NVL ( SUM ( QUANTITY ) , 0 )
60 INTO P_Line_released_Quantity
61 FROM SO_LINE_DETAILS
62 WHERE LINE_ID = P_Line_Id
63 AND NVL ( INCLUDED_ITEM_FLAG , 'N' ) = 'N'
64 AND NVL ( RELEASED_FLAG , 'Y' ) = 'Y'
65 AND NVL ( CONFIGURATION_ITEM_FLAG , 'N' ) =
66 DECODE ( P_Config_Item_Exists , 'Y' , 'Y' , 'N' );
67
68
69
70 exception
71
72 when no_data_found then
73 P_Line_released_Quantity:=0;
74
75 when others then
76 P_Return_Status:=OE_FAILURE;
77 OE_MSG.Internal_Exception(Routine=>
78 'OE_LIN_SCH.Get_Released_Quantity',
79 Operation=>'Scheduling',
80 Object=>'LINE',
81 Message=>' When Others');
82
83
84 end Get_Released_Quantity;
85
86
87 PROCEDURE Check_Details_Complexity
88 (
89 P_Line_Id IN NUMBER,
90 Details_Complexity_Count OUT NUMBER,
91 P_Return_Status OUT VARCHAR2
92 )
93 is
94
95 begin
96
97 P_Return_Status:=OE_SUCCESS;
98
99
100 SELECT COUNT(*)
101 INTO Details_Complexity_Count
102 FROM SO_LINE_DETAILS
103 WHERE LINE_ID = P_Line_Id
104 AND NVL ( RELEASED_FLAG , 'N' ) = 'N'
105 GROUP BY COMPONENT_CODE
106 HAVING COUNT ( DisTINCT WAREHOUSE_ID ) > 1
107 OR COUNT ( DisTINCT SCHEDULE_DATE ) > 1
108 OR COUNT ( DisTINCT REVISION ) > 1
109 OR COUNT ( DisTINCT LOT_NUMBER ) > 1
110 OR COUNT ( DisTINCT SUBINVENTORY ) > 1
111 OR COUNT ( DisTINCT DEMAND_CLASS_CODE ) > 1
112 OR ( COUNT ( SUBINVENTORY ) > 0
113 AND COUNT ( SUBINVENTORY ) <> COUNT ( * ) )
114 OR ( COUNT ( WAREHOUSE_ID ) > 0
115 AND COUNT ( WAREHOUSE_ID ) <> COUNT ( * ) )
116 OR ( COUNT ( SCHEDULE_DATE ) > 0
117 AND COUNT ( SCHEDULE_DATE ) <> COUNT ( * ) )
118 OR ( COUNT ( LOT_NUMBER ) > 0
119 AND COUNT ( LOT_NUMBER ) <> COUNT ( * ) )
120 OR ( COUNT ( REVisION ) > 0
121 AND COUNT ( REVisION ) <> COUNT ( * ) )
122 OR ( COUNT ( DEMAND_CLASS_CODE ) > 0
123 AND COUNT ( DEMAND_CLASS_CODE ) <> COUNT ( * ) );
124
125
126 exception
127 when no_data_found then
128 Details_Complexity_Count:=0;
129
130 when others then
131 P_Return_Status:=OE_FAILURE;
132 OE_MSG.Internal_Exception(Routine=>
133 'OE_LIN_SCH.Check_Details_Complexity',
134 Operation=>'Scheduling',
135 Object=>'LINE',
136 Message=>' When Others');
137
138
139 end Check_Details_Complexity;
140
141 PROCEDURE Get_Scheduling_Quantity
142 (
143 P_Line_Id IN NUMBER,
144 P_Config_Item_Exists IN VARCHAR2,
145 P_Reserved_Quantity OUT NUMBER,
146 P_Line_Released_Quantity OUT NUMBER,
147 Details_Complexity_Count OUT NUMBER,
148 P_Return_Status IN OUT VARCHAR2
149 )
150
151 is
152
153 begin
154
155 P_Return_Status:=OE_SUCCESS;
156
157
158 OE_LIN_SCH.Get_Reserved_Quantity(
159 P_Line_Id=>P_Line_Id,
160 P_Reserved_Quantity=>P_Reserved_Quantity,
161 P_Return_Status=>P_Return_Status
162 );
163
164 if ( P_Return_Status = OE_FAILURE ) then
165 return;
166 end if;
167
168
169 OE_LIN_SCH.Get_Released_Quantity(
170 P_Line_Id=>P_Line_Id,
171 P_Config_Item_Exists=>
172 P_Config_Item_Exists,
173 P_Line_Released_Quantity=>
174 P_Line_Released_Quantity,
175 P_Return_Status=>P_Return_Status);
176
177 if ( P_Return_Status = OE_FAILURE ) then
178 return;
179 end if;
180
181
182 OE_LIN_SCH.Check_Details_Complexity(
183 P_Line_Id=>P_Line_Id,
184 Details_Complexity_Count=>Details_Complexity_Count,
185 P_Return_Status=>P_Return_Status
186 );
187
188 end;
189
190 PROCEDURE Check_Scheduling_Quantity
191 (
192 P_Line_Id IN NUMBER,
193 P_Config_Item_Exists IN VARCHAR2,
194 P_Ordered_Quantity IN NUMBER,
195 P_Cancelled_Quantity IN NUMBER,
196 P_Reserved_Quantity IN OUT NUMBER,
197 Return_Status IN OUT VARCHAR2
198 )
199
200 is
201
202 L_Details_Complexity_Count NUMBER;
203 L_Released_Quantity NUMBER;
204 L_Reserved_Quantity NUMBER;
205
206 begin
207 Return_Status:=OE_SUCCESS;
208
209 OE_LIN_SCH.Get_Scheduling_Quantity(
210 P_Line_Id,
211 P_Config_Item_Exists,
212 L_Reserved_Quantity,
213 L_Released_Quantity,
214 L_Details_Complexity_Count,
215 Return_Status
216 );
217
218 if ( Return_Status = OE_FAILURE ) then
219 return;
220 end if;
221
222 if (nvl(P_Reserved_Quantity,0) > (nvl(P_Ordered_Quantity,0) -
223 nvl(P_Cancelled_Quantity,0) )) then
224 OE_MSG.Set_Buffer_Message('OE_SCH_RES_MORE_ORD_QTY','','');
225 Return_Status:=OE_FAILURE;
226 Return;
227 elsif (nvl(P_Reserved_Quantity,0) < nvl(L_Released_Quantity,0)) then
228 OE_MSG.Set_Buffer_Message('OE_SCH_RES_LESS_REL_QTY','RELEASED_QUANTITY',to_char(L_Released_Quantity));
229 Return_Status:=OE_FAILURE;
230 Return;
231 else
232 if L_Details_Complexity_Count > 0 then
233 OE_MSG.Set_Buffer_Message('OE_SCH_COMPLEX_DETAILS','','');
234 Return_Status:=OE_FAILURE;
235 Return;
236 end if;
237 end if;
238
239
240 end;
241
242 PROCEDURE Get_Schedule_Status
243 (
244
245 P_Line_Id IN NUMBER,
246 P_Schedule_Status_Code IN OUT VARCHAR2,
247 P_Schedule_Status_Name OUT VARCHAR2,
248 P_Schedule_Action_Code OUT VARCHAR2,
249 P_Return_Status OUT VARCHAR2
250 )
251 is
252
253 begin
254
255 P_Return_Status:=OE_SUCCESS;
256
257
258 P_Schedule_Action_Code := null;
259 P_Schedule_Status_Code := null;
260 P_Schedule_Status_Name := null;
261
262 SELECT DECODE( NVL( SUM( DECODE( SCHEDULE_STATUS_CODE,
263 'RESERVED', QUANTITY, 0 ) ), 0 ),
264 0,
265 DECODE( NVL( SUM( DECODE( SCHEDULE_STATUS_CODE,
266 'SUPPLY RESERVED', QUANTITY, 0 ) ), 0 ),
267 0,
268 DECODE( NVL( SUM( DECODE( SCHEDULE_STATUS_CODE,
269 'DEMANDED', QUANTITY, 0 ) ), 0 ),
270 0, NULL,
271 'DEMANDED' ),
272 'SUPPLY RESERVED' ),
273 'RESERVED' )
274 INTO P_Schedule_Status_Code
275 FROM SO_LINE_DETAILS
276 WHERE LINE_ID = P_Line_Id;
277
278 SELECT MEANING
279 INTO P_Schedule_Status_Name
280 FROM SO_LOOKUPS
281 WHERE LOOKUP_TYPE = 'SCHEDULE STATUS'
282 AND LOOKUP_CODE = P_Schedule_Status_Code;
283
284 exception
285
286 when no_data_found then
287 null;
288
289 when others then
290 P_Return_Status:=OE_FAILURE;
291 OE_MSG.Internal_Exception(Routine=>
292 'OE_LIN_SCH.Get_Schedule_Status',
293 Operation=>'Scheduling',
294 Object=>'LINE',
295 Message=>' When Others');
296
297 end;
298
299
300 PROCEDURE Get_Schedule_DB_Values
301 (
302 P_Row_Id IN VARCHAR2,
303 P_Line_Id IN NUMBER,
304 P_schedule_date OUT VARCHAR2,
305 P_demand_Class_Code OUT VARCHAR2,
306 P_Ship_To_Site_Use_Id OUT NUMBER,
307 P_Warehouse_id OUT Number,
308 P_Ship_To_Contact_Id OUT NUMBER,
309 P_Shipment_Priority_Code OUT VARCHAR2,
310 P_Ship_Method_Code OUT VARCHAR2,
311 P_Schedule_Date_Svrid OUT NUMBER,
312 P_Demand_Class_Svrid OUT NUMBER,
313 P_Ship_To_Svrid OUT NUMBER,
314 P_Warehouse_Svrid OUT NUMBER,
315 P_Ordered_Quantity OUT NUMBER,
316 P_Unit_Code OUT VARCHAR2,
317 P_Reserved_Quantity OUT NUMBER,
318 P_Return_Status OUT VARCHAR2
319
320 ) is
321
322
323 begin
324
325 P_Return_Status:=OE_SUCCESS;
326
327 SELECT SCHEDULE_DATE
328 , DEMAND_CLASS_CODE
329 , SHIP_TO_SITE_USE_ID
330 , WAREHOUSE_ID
331 , SHIP_TO_CONTACT_ID
332 , SHIPMENT_PRIORITY_CODE
333 , SHIP_METHOD_CODE
334 , SCHEDULE_DATE_SVRID
335 , DEMAND_CLASS_SVRID
336 , SHIP_TO_SVRID
337 , WAREHOUSE_SVRID
338 , ORDERED_QUANTITY
339 , UNIT_CODE
340 INTO P_SCHEDULE_DATE
341 , P_DEMAND_CLASS_CODE
342 , P_SHIP_TO_SITE_USE_ID
343 , P_WAREHOUSE_ID
344 , P_SHIP_TO_CONTACT_ID
345 , P_SHIPMENT_PRIORITY_CODE
346 , P_SHIP_METHOD_CODE
347 , P_SCHEDULE_DATE_SVRID
348 , P_DEMAND_CLASS_SVRID
349 , P_SHIP_TO_SVRID
350 , P_WAREHOUSE_SVRID
351 , P_ORDERED_QUANTITY
352 , P_UNIT_CODE
353 FROM SO_LINES
354 WHERE ROWID = P_Row_id;
355
356
357 SELECT SUM ( NVL ( QUANTITY , 0 ) )
358 INTO P_RESERVED_QUANTITY
359 FROM SO_LINE_DETAILS
360 WHERE SCHEDULE_STATUS_CODE = 'RESERVED'
361 AND LINE_ID = P_Line_Id
362 AND NVL ( INCLUDED_ITEM_FLAG , 'N' ) = 'N';
363
364 P_Return_Status:=OE_SUCCESS;
365
366
367 exception
368
369 when no_data_found then
370 P_Reserved_Quantity:=NULL;
371 P_Return_Status:=OE_SUCCESS;
372
373 when others then
374 P_Return_Status:=OE_FAILURE;
375 OE_MSG.Internal_Exception(Routine=>
376 'OE_LIN_SCH.Get_Schedule_DB_Values',
377 Operation=>'Scheduling',
378 Object=>'LINE',
379 Message=>' When Others');
380
381 end;
382
383
384 PROCEDURE Validate_Scheduling_Attributes
385 (
386 P_DB_Record_Flag IN VARCHAR2,
387 P_Lin_Obj_Schedule_Action_Code IN VARCHAR2,
388 P_Lin_Obj_Reserved_Quantity IN NUMBER,
389 P_Lin_Obj_Ordered_Quantity IN NUMBER,
390 P_Lin_Obj_Ship_To_Site_Use_Id IN NUMBER,
391 P_Lin_Obj_Warehouse_Id IN Number,
392 P_Lin_Obj_Schedule_Date IN DATE,
393 P_Lin_Obj_Demand_Class_Code IN VARCHAR2,
394 P_Row_Id IN VARCHAR2,
395 P_Line_Id IN NUMBER,
396 P_World_DB_schedule_date IN OUT VARCHAR2,
397 P_World_DB_demand_Class_Code IN OUT VARCHAR2,
398 P_World_DB_Ship_To_Site_Use_Id IN OUT NUMBER,
399 P_World_DB_Warehouse_id IN OUT Number,
400 P_World_DB_Ship_To_Contact_Id IN OUT NUMBER,
401 P_World_DB_Ship_Priority_Code IN OUT VARCHAR2,
402 P_World_DB_Ship_Method_Code IN OUT VARCHAR2,
403 P_World_DB_Schedule_Date_Svrid IN OUT NUMBER,
404 P_World_DB_Demand_Class_Svrid IN OUT NUMBER,
405 P_World_DB_Ship_To_Svrid IN OUT NUMBER,
406 P_World_DB_Warehouse_Svrid IN OUT NUMBER,
407 P_World_DB_Ordered_Quantity IN OUT NUMBER,
408 P_World_DB_Unit_Code IN OUT VARCHAR2,
409 P_World_DB_Reserved_Quantity IN OUT NUMBER,
410 P_Return_Status IN OUT VARCHAR2
411
412 )
413 is
414
415
416 begin
417
418 P_Return_Status:=OE_SUCCESS;
419
420 if ( P_DB_Record_Flag = 'N' ) then
421 if ( P_Lin_Obj_Schedule_Action_Code is NULL
422 or P_Lin_Obj_Schedule_Action_Code = 'RESERVE' ) then
423 return;
424 elsif ( P_Lin_Obj_Schedule_Action_Code not in ( 'DEMAND', 'ATP CHECK')) then
425 if ( P_Lin_Obj_Reserved_Quantity is null
426 or P_Lin_Obj_Reserved_Quantity = 0 ) then
427 return;
428 else
429 OE_MSG.Set_Buffer_Message('OE_SCH_NO_RES_QTY_REQUIRED','','');
430 P_Return_Status:=OE_FAILURE;
431 return;
432 end if;
433 end if;
434 end if;
435
436 OE_LIN_SCH.Get_Schedule_DB_Values(
437 P_Row_Id=>P_Row_Id,
438 P_Line_Id=>P_Line_Id,
439 P_schedule_date=>P_World_DB_schedule_date,
440 P_demand_Class_Code=>P_World_DB_demand_Class_Code,
441 P_Ship_To_Site_Use_Id=>P_World_DB_Ship_To_Site_Use_Id,
442 P_Warehouse_id=>P_World_DB_Warehouse_id,
443 P_Ship_To_Contact_Id=>P_World_DB_Ship_To_Contact_Id,
444 P_Shipment_Priority_Code=>P_World_DB_Ship_Priority_Code,
445 P_Ship_Method_Code=>P_World_DB_Ship_Method_Code,
446 P_Schedule_Date_Svrid=>P_World_DB_Schedule_Date_Svrid,
447 P_Demand_Class_Svrid=>P_World_DB_Demand_Class_Svrid,
448 P_Ship_To_Svrid=>P_World_DB_Ship_To_Svrid,
449 P_Warehouse_Svrid=>P_World_DB_Warehouse_Svrid,
450 P_Ordered_Quantity=>P_World_DB_Ordered_Quantity,
451 P_Unit_Code=>P_World_DB_Unit_Code,
452 P_Reserved_Quantity=>P_World_DB_Reserved_Quantity,
453 P_Return_Status=>P_Return_Status);
454
455 if ( P_return_Status = OE_FAILURE ) then
456 return;
457 end if;
458
459 if ( P_Lin_Obj_Schedule_Action_Code is null ) then
460 if ( P_Lin_Obj_Reserved_quantity <> P_World_DB_Reserved_Quantity ) then
461 if ( P_Lin_Obj_Ordered_Quantity <> P_world_DB_Ordered_Quantity ) then
462 OE_MSG.Set_Buffer_Message('OE_SCH_RES_QTY_CHG_NOT_ALLOWED','','');
463 P_Return_Status:=OE_FAILURE;
464 return;
465 end if;
466 end if;
467 else
468 if ( P_Lin_Obj_Ordered_Quantity <> P_world_DB_Ordered_Quantity ) then
469 OE_MSG.Set_Buffer_Message('OE_SCH_RES_QTY_CHG_NOT_ALLOWED','','');
470 P_Return_Status:=OE_FAILURE;
471 return;
472 end if;
473 end if;
474
475 if ( P_Lin_Obj_Schedule_Action_Code is null ) then
476 return;
477 elsif ( P_Lin_Obj_Schedule_Action_Code in ( 'UNRESERVE', 'UNDEMAND',
478 'UNSCHEDULE') ) then
479 if ( P_Lin_Obj_Reserved_quantity <> P_World_DB_Reserved_Quantity )
480 then
481 OE_MSG.Set_Buffer_Message('OE_SCH_RES_QTY_CHG_NOT_ALLOWED','','');
482 P_Return_Status:=OE_FAILURE;
483 return;
484 elsif ( P_Lin_Obj_Warehouse_Id <> P_world_DB_Warehouse_Id )
485 then
486 OE_MSG.Set_Buffer_Message('OE_SCH_WH_CHG_NOT_ALLOWED','','');
487 P_Return_Status:=-1;
488 return;
489 elsif ( P_Lin_Obj_Schedule_Date <> P_World_DB_Schedule_Date )
490 then
491 OE_MSG.Set_Buffer_Message('OE_SCH_DATE_CHG_NOT_ALLOWED','','');
492 P_Return_Status:=OE_FAILURE;
493 return;
494 elsif ( P_Lin_Obj_Demand_Class_Code <> P_World_DB_Demand_Class_Code) then
495 OE_MSG.Set_Buffer_Message('OE_SCH_DEM_CL_CHG_NOT_ALLOWED','','');
496 P_Return_Status:=OE_FAILURE;
497 return;
498 end if;
499 elsif ( P_Lin_Obj_Schedule_Action_Code in ( 'ATP CHECK', 'DEMAND')) then
500 if ( P_Lin_Obj_Schedule_Action_Code = 'ATP CHECK' ) then
501 if ( P_Lin_Obj_Ship_To_Site_Use_Id <> P_World_DB_Ship_To_Site_Use_Id ) then
502 OE_MSG.Set_Buffer_Message('OE_SCH_SHIP_TO_CHG_NOT_ALLOWED','','');
503 P_Return_Status:=OE_FAILURE;
504 return;
505 end if;
506 end if;
507 if ( P_Lin_Obj_Reserved_quantity <> P_World_DB_Reserved_Quantity )
508 then
509 OE_MSG.Set_Buffer_Message('OE_SCH_RES_QTY_CHG_NOT_ALLOWED','','');
510 P_Return_Status:=OE_FAILURE;
511 return;
512 end if;
513 elsif ( P_Lin_Obj_Schedule_Action_Code in ( 'RESERVE') ) then
514 if ( P_Lin_Obj_Reserved_quantity <> P_World_DB_Reserved_Quantity )
515 then
516 OE_MSG.Set_Buffer_Message('OE_SCH_RES_QTY_CHG_NOT_ALLOWED','','');
517 P_Return_Status:=OE_FAILURE;
518 return;
519 end if;
520 end if;
521
522 exception
523
524 when others then
525 P_Return_Status:=OE_FAILURE;
526 OE_MSG.Internal_Exception(Routine=>
527 'OE_LIN_SCH.Validate_Scheduling_Attributes',
528 Operation=>'',
529 Object=>'LINE',
530 Message=>' When Others');
531
532
533 end;
534
535
536 PROCEDURE Scheduling_Security
537 (
538 Attribute IN VARCHAR2,
539 ATO_Model_Flag IN VARCHAR2,
540 ATO_Line_Id IN NUMBER,
541 Supply_Reservation_Exists IN VARCHAR2,
542 DB_Record_Flag IN VARCHAR2,
543 Source_Object IN VARCHAR2,
544 Order_Category IN VARCHAR2,
545 Row_Id IN VARCHAR2,
546 Return_Status OUT VARCHAR2
547 )
548
549 is
550
551 L_Count NUMBER;
552 L_Return_Status VARCHAR2(1);
553
554 begin
555
556 OE_LIN.Fully_Released(
557 Row_Id,
558 L_Return_Status);
559 if ( L_Return_Status = 'N' ) then
560 Return_Status:='N';
561 return;
562 end if;
563
564 OE_LIN.Fully_Cancelled(
565 Row_Id,
566 L_Return_Status);
567 if ( L_Return_Status = 'N' ) then
568 Return_Status:='N';
569 return;
570 end if;
571
572 Return_Status:='Y';
573
574 exception
575
576 when others then
577 Return_Status:=OE_FAILURE;
578 OE_MSG.Internal_Exception(Routine=>
579 'OE_LIN_SCH.Scheduling_Security',
580 Operation=>'',
581 Object=>'LINE',
582 Message=>' When Others');
583
584 end Scheduling_Security;
585
586 -- The following package need to be removed
587 -- after the c code is checked in. - Rajan
588
589 PROCEDURE Query_Reserved_Quantity
590 (
591
592 P_Line_Id IN NUMBER,
593 P_Reservations IN VARCHAR2,
594 P_Reserved_Quantity OUT NUMBER,
595 P_Return_Status OUT VARCHAR2
596 )
597 is
598
599 begin
600
601 P_Return_Status:=OE_SUCCESS;
602
603
604 if ( P_Reservations <> 'Y' ) then
605 P_Reserved_Quantity := NULL;
606 return;
607 end if;
608
609 SELECT SUM( QUANTITY )
610 INTO P_Reserved_Quantity
611 FROM SO_LINE_DETAILS
612 WHERE SCHEDULE_STATUS_CODE = 'RESERVED'
613 AND LINE_ID = P_Line_Id
614 AND NVL ( INCLUDED_ITEM_FLAG , 'N' ) = 'N';
615
616 exception
617
618 when no_data_found then
619 null;
620
621 when others then
622 P_Return_Status:=OE_FAILURE;
623 OE_MSG.Internal_Exception(Routine=>
624 'OE_LIN.Query_Reserved_Quantity',
625 Operation=>'Scheduling',
626 Object=>'LINE',
627 Message=>' When Others');
628
629 end;
630
631 end OE_LIN_SCH;