Anda di halaman 1dari 9

Planning Manager Technical Workshop

Marc Slone
Oracle Corporation

Introduction In addition, the Target Processes for the MRP


Manager should be set to 1. Since the only
program that runs under this manager is the
The Planning Manager is a concurrent program
Planning Manager, and only one Planning
in Oracle Master Scheduling/MRP which
Manager can run at the same time, then there is
performs several tasks, including shipment relief
no need to have more than one MRCLIB
of master demand schedules, production relief of
process running.
master production schedules, forecast
consumption, and the MRP open interface
routines. This paper will discuss the technical Planning Manager
aspects of the tasks addressed by the Planning
Manager and the common support issues The Planning Manager is an immediate
encountered. concurrent program which runs under the MRP
concurrent manager. The short name for the
Note: This document is intended to be used as Planning Manager concurrent program is
a reference document. Certain sections of text MRCRLF.
are intentionally repeated throughout the
document, so that each section can be read and Note that you will not find an executable in the
understood independently of one another. MRP executable directory called MRCRLF.
Since the Planning Manager is an immediate
MRP Manager (MRCLIB) and concurrent program, it is run as a subroutine of
Planning Manager (MRCRLF) its concurrent manager, in this case MRCLIB.
Therefore the executable file associated with the
Planning Manager is MRCLIB.
Do not confuse the MRP Manager with the
Planning Manager. The MRP Manager is a
In addition to the executable code, the Planning
concurrent manager, while the Planning
Manager uses database stored procedures and
Manager is an immediate concurrent program
functions to perform much of its work. These
which runs under the control of the MRP
are the database code objects used by the
Manager.
Planning Manager:
MRP Manager
• MRP_MANAGER_PK is a package of
procedures and functions used by the
The MRP Manager is a concurrent manager
Planning Manager to perform various tasks.
which uses the Program Library MRCLIB. The
MRP Manager is used solely to run the Planning • MRP_UPDATE_MRP_COLS is a procedure
Manager. That is, the concurrent manager used during the MPS relief process.
should have exactly one specialization rule, and • MRP_AUTO_REDUCE_MPS is a procedure
that rule should Allow execution of the Planning used during the daily cleanup process.
Manager program.
We will discuss these procedures as appropriate
If you install Oracle Master Scheduling/MRP, the throughout the text of this paper.
AutoInstall process will automatically create a
concurrent manager with this setup. Do NOT Starting the Planning Manager
modify this manager to run all MRP-related
concurrent programs. All MRP programs except Use the Start Planning Manager form to start the
the Planning Manager run under the Standard Planning Manager.
concurrent manager or an equivalent manager
that uses FNDLIBR as its program library.
(character: \ Navigate Setup PlanningManager)
specified by the processing interval, then the
next request will be submitted exactly one
processing interval after the end of the previous
request.

When you start the Planning Manager, the form


will give you the concurrent request id of the
Planning Manager concurrent request. This
request id will be reused by each subsequent
Planning Manager run until the next calendar
day. The Planning Manager will spawn a new
request id each day.
Figure 1. The character-mode Start Planning Manager
form From a system administrator’s point of view, the
Planning Manager presents one important
(10SC: Setup, Planning Manager) consideration. The log file for the Planning
Manager will contain information about each task
it performs. If you have the Planning Manager
set up with a processing interval of 30 seconds,
this log file may grow quite large over the course
of a day.

The factors which affect the size of the log file


are the processing interval and the setting of the
profile option MRP:Debug Mode (discussed
later).

As an example, let’s say the Planning Manager


is set up with a 60 second processing interval,
and MRP:Debug Mode is set to No. In addition,
assume that one planning manager cycle
Figure 2. The 10SC Start Planning Manager form completes in less than 60 seconds. During the
course of a day, the Planning Manager wakes up
When starting the Planning Manager, you must every 60 seconds, checks to see if there is any
specify a Processing Interval to use. This is the work to do, does the work, and goes back to
amount of time after one Planning Manager sleep. Assuming a 24 hour work shift for the
request starts, until the next request is MRP Manager, that means the Planning
submitted. If you specify a short processing Manager will run approximately 1440 (24 hr * 60
interval, for example 30 seconds, you are min/hr) times during the course of the day.
assured that your Planning Manager will run
virtually on a continuous basis. Also, as an approximation, assume that during
each cycle the planning manager produces 8 KB
Important note: the resubmission time of the of log file information. With these parameters,
next Planning Manager run is calculated from the planning manager log file will be over 11 MB
the start time of the previous request rather than each day. If MRP:Debug Mode is set to Yes or
the end time. For example, let’s say your entire the Planning Manager cycle completes in less
Planning Manager cycle takes five minutes to time than the example, the log file will be even
complete, and your processing interval is set to larger.
one hour. If a Planning Manager request starts
at 9:00 AM, then it will complete at 9:05 AM. For an example of a Planning Manager log file,
The next request will be submitted at 10:00 AM, see Appendix A. This is an actual log file from
exactly one hour from the start time of the one complete cycle of the Planning Manager.
previous request. Some SQL statements which MRP prints in the
log file have been removed from the example file
If the Planning Manager cycle actually takes a for brevity.
longer period of time to run than the time
How can I tell if my Planning Manager is updated picture of their forecasts and master
active? schedules.

There are several ways to find out information A shorter processing interval obviously lessens
about the current status of the Planning this time but requires greater system resources.
Manager. Here are a few suggestions:
How can I change the processing interval?
1. The Messages zone of the Start Planning
Manager form shows the last time that the You cannot change the processing interval for
planning manager started. See figures 1 the Planning Manager while it is running or
and 2 to see an example of this message in pending. Therefore, if you wish to change this
the Messages zone. interval, you should wait for the Planning
Manager to get to a status of Pending, then
2. At the operating system level, check for cancel that pending request.
processes associated with the MRCLIB
executable. At this point you can restart the Planning
Manager with the desired processing interval.
For example, from UNIX, issue the following
command to check for a running MRCLIB Planning Manager Tasks
process:
The Planning Manager performs several tasks
$ ps -ef | grep MRCLIB
critical to the operation of Oracle Master
Scheduling/MRP:
If this does not show any MRCLIB
processes, then the MRP concurrent
• Miscellaneous Cleanup Tasks
manager is not running and hence the
Planning Manager cannot be running. • MDS Relief
• MPS Relief
If you see an MRCLIB process, that does not • Forecast Consumption
necessarily mean that the Planning Manager • Forecast Open Interface
is running, only that the MRP Manager is • Master Schedule Open Interface
running. You will need to perform steps 1, 3
or 4. We will now address the technical aspects of
each of these tasks in detail.
3. Using the System Administrator
responsibility, on the View Concurrent Planning Manager Worker (once-a-day tasks)
Requests screen, query on the program (MRCSCW1)
name Planning Manager. If you have a
request either Running or Pending, then the
The once-a-day-tasks worker is launched
Planning Manager is active.
automatically by the Planning Manager when
each Planning Manager request is first launched.
4. Attempt to start the planning manager using
Therefore, when you start the Planning Manager,
the procedure described in the above
a once-a-day-tasks-worker will be spawned.
section. The form will alert you that the
Then, each day when a new Planning Manager
Planning Manager is already active if that is
request id is generated, an additional once-a-
the case.
day-tasks-worker is spawned.
How do I choose a processing interval?
The Planning Manager Worker (once-a-day-
tasks) is a concurrent program with short name
A longer processing interval simply means that MRCSCW1. The executable associated with
users may have to wait longer to see forecast this concurrent program is MRCSCW.
consumption, master schedule relief, etc.
You can find the request id of the spawned
For example, if the processing interval is set to once-a-day-tasks worker by looking in the
10 minutes, then users may have to wait as long Planning Manager log file:
as 10 minutes to insure that they are seeing an
===================================== For example, if you delete a certain item off of
CONCURRENT MRP MRCSCW1 "OPERATION=7" master schedules so that it has no entry on any
Launched concurrent request 6824 for Daily cleanup master schedule (these entries are stored in the
worker MRP_SCHEDULE_DATES table), then the
===================================== once-a-day-tasks worker removes that item from
Figure 3. Planning Manager spawns once-a-day-tasks
the list of items on a master schedule (this is the
worker
MRP_SCHEDULE_ITEMS table).
Purges MRP Interface Tables
In addition, the once-a-day-tasks worker
performs automatic MPS relief based on the
The following are seven of the tables which are
setting of the item attribute Reduce MPS. This
purged daily by the once-a-day-tasks worker:
feature is used primarily if you do not have
Oracle Work In Process and Oracle Purchasing
• MRP_FORECAST_INTERFACE installed.
• MRP_SCHEDULE_INTERFACE
• MRP_RELIEF_INTERFACE Dividing Up The Work
• MRP_FORM_QUERY
• MRP_WORKBENCH_CRITERIA For each task except the once-a-day-tasks
• MRP_WORKBENCH_QUERY worker, Oracle Master Scheduling/MRP provides
• MRP_LOAD_PARAMETERS two profile options which govern how the
Planning Manager will divide up the rows in need
These tables are purged based on the setting of of processing during any given cycle.
the profile option MRP:Interface Table History
Days. The once-a-day-tasks worker deletes all When performing a particular task, such as
rows from these tables which have a forecast consumption, the Planning Manager
PROCESS_STATUS = 5 (processed first calculates how many rows in the database
successfully) and are older than the number of require processing. Then, the rows are assigned
days specified by this profile option. to individual workers according to the values of
the profile options MRP:Planning Manager
The once-a-day-tasks worker also deletes Batch Size and MRP:Planning Manager Max
records from MRP_MESSAGES_TMP, Workers.
MRP_FORM_QUERY, and (if CRP is installed)
CRP_FORM_QUERY which have been in the The batch size option indicates the number of
table for more than two days. rows per worker to process. A larger value here
means Planning Manager will be more efficient
In addition to the above tables, the once-a-day- since fewer workers will be spawned and
tasks worker purges records from the following therefore you will have fewer processes hitting
tables where there are no records in the the database. A smaller value indicates that any
appropriate foreign key table (shown in particular worker will have more rows to process,
parenthesis): and will take longer to complete.

• MRP_SCHEDULE_ITEMS The max workers option indicates the maximum


(MRP_SCHEDULE_DATES) number of workers to be launched by the
• MRP_FORECAST_UPDATES Planning Manager. The Planning Manager will
(MRP_FORECAST_DATES) continue to spawn more workers until the
• MRP_SCHEDULE_CONSUMPTIONS number of workers running or pending equals
(MRP_SCHEDULE_DATES and the value of this profile option.
MRP_RECOMMENDATIONS)
• MRP_FORECAST_ITEMS As a general rule do not set the number of max
(MRP_FORECAST_DATES) workers to a value higher than the number of
• MRP_SCHEDULE_ITEMS requests that can run simultaneously in your
(MRP_SCHEDULE_DATES) standard concurrent managers.
• CRP_BILL_OF_RESOURCE_ITEMS For example, let’s say there are 300 rows which
(CRP_RESOURCE_HOURS) require forecast consumption. For this example,
assume that the batch size is set to 100 and the
max workers is set to 5. The Planning Manager
will spawn two Sales Order Consumption The master schedule relief process mainly
workers, each to process 100 rows, and the involves the flow of records in to and out of the
Planning Manager itself will process the table MRP_RELIEF_INTERFACE. How these
remaining 100 rows. records are created and processed depends
entirely on the type of master schedule being
What are all these workers? relieved. Once processed, master schedule
relief records are stored in the table
The worker that is spawned by the Planning MRP_SCHEDULE_CONSUMPTIONS.
Manager depends on which task the Planning
Manager is performing. In the above example, MDS Relief
forecast consumption required that two workers
be spawned, so the Planning Manager spawned If you define your MDS with Relieve = Yes, and
two Sales Order Consumption workers. Here is the site-level profile option MRP:Consume MDS
a complete list of workers that may be spawned is set to Yes, then sales order shipments will
and their associated Planning Manager task: relieve the MDS.

• For Forecast Consumption, the Planning When an order in Order Entry is demanded,
Manager will spawn Sales Order records are inserted into MTL_DEMAND to
Consumption Workers, short name express demand for that sales order. After a
MRCSOW. shipment is made, the Order Entry concurrent
• For the Forecast Open Interface, the program Inventory Interface inserts records into
Planning Manager will spawn Forecast Load MTL_TRANSACTIONS_INTERFACE for those
Workers, short name MRCFLW. shipments.
• For the Master Schedule Open Interface, the
Planning Manager will spawn Schedule Load In Oracle Inventory, the Transaction Interface
Workers, short name MRCSLW. Manager processes those records out of
• For MDS relief, the Planning Manager will MTL_TRANSACTIONS_INTERFACE, and after
spawn MDS Relief Workers, short name validation inserts material transactions into
MRCMDW. MTL_MATERIAL_TRANSACTIONS. At the
• For MPS relief, the Planning Manager will same time it relieves the demand made by Order
spawn MPS Relief Workers, short name Entry in MTL_DEMAND. At this point, when the
MRCMPW. Transaction Manager recognizes a particular
transaction as a sales order shipment, it invokes
MRP routines to insert rows into the table
The executable associated with every one of
MRP_RELIEF_INTERFACE with a
these workers is MRCSCW. This executable
RELIEF_TYPE = 1 (MDS relief) and a
contains the code to perform any of these
PROCESS_STATUS = 2 (to be processed).
operations.
For MDS relief records in the table
Master Schedule Relief MRP_RELIEF_INTERFACE, the column
DISPOSITION_ID will be the DEMAND_ID for
The Planning Manager is responsible for the the corresponding demand record in
function of master schedule relief. This includes MTL_DEMAND.
shipment relief of master demand schedules
(MDS) and production relief of master production When the Planning Manager next runs, during
schedules (MPS). the MDS Relief phase of the cycle, it will poll the
MRP_RELIEF_INTERFACE table for records in
One of the most common support issues for the above status (RELIEF_TYPE = 1,
Oracle Master Scheduling/MRP involves PROCESS_STATUS = 2) and will perform MDS
purchase requisitions, purchase orders, and Relief for those records.
work in process (WIP) jobs failing to relieve the
appropriate master schedule. The following See the Oracle Master Scheduling/MRP
sections describe the processes by which this Reference Manual for a functional description of
relief works. the MDS Relief process.

MPS Relief
NULL. As a result, the associated sources of
If you define your MPS with Relieve = Yes, and supply would not show up in MRP.
the site-level profile option MRP:Consume MPS
is set to Yes, then purchase requisitions, Remember that you can query for the existence
purchase orders, interorg shipments, and work and status of this trigger using the following SQL
in process jobs will relieve the MPS. statement (connect as MRP):

Oracle Inventory and Oracle Purchasing SELECT trigger_name, status


FROM all_triggers
When you create or modify an interorg shipment WHERE trigger_name = ‘MTL_SUPPLY_T’;
using Oracle Inventory or a purchase requisition
or purchase order in Oracle Purchasing, a record You should get this result:
is inserted into MTL_SUPPLY corresponding to
that source of supply. A trigger on the TRIGGER_NAME STATUS
MTL_SUPPLY table, named MTL_SUPPLY_T, ----------------------------------------------------------------
will then insert necessary rows into the MTL_SUPPLY_T ENABLED
MRP_RELIEF_INTERFACE table with a
RELIEF_TYPE = 2 (MPS relief) and a Oracle Work In Process
PROCESS_STATUS = 2 (to be processed).
When you create a discrete job in Oracle Work
For MPS relief records inserted by In Process, a record is inserted into
MTL_SUPPLY_T into the table WIP_DISCRETE_JOBS corresponding to that
MRP_RELIEF_INTERFACE, the column discrete job. A trigger on the
DISPOSITION_ID will contain either a WIP_DISCRETE_JOBS table, named
REQ_HEADER_ID, SHIPMENT_HEADER_ID, WIP_DISCRETE_JOBS_BRI, will then insert
or PO_HEADER_ID depending on the source of necessary row(s) into the
the supply (purchase requisition, interorg MRP_RELIEF_INTERFACE with a
shipment, or purchase order). RELIEF_TYPE = 2 (MPS relief) and a
PROCESS_STATUS = 2 (to be processed).
When the Planning Manager next runs, during
the MPS Relief phase of the cycle, it will poll the In addition, if you modify an existing discrete job,
MRP_RELIEF_INTERFACE table for records in then the database trigger
the above status (RELIEF_TYPE = 2, WIP_DISCRETE_JOBS_BRU will insert a new
PROCESS_STATUS = 2) and will perform MPS record in MRP_RELIEF_INTERFACE. Similarly,
Relief for those records. the WIP_DISCRETE_JOBS_BRD trigger is
invoked when you delete a discrete job, to
Commonly Encountered Problem unrelieve the MPS..

Once the appropriate MPS entries have been For MPS relief records inserted by one of these
relieved, the Planning Manager will invoke the three WIP triggers into the table
stored procedure MRP_UPDATE_MRP_COLS. MRP_RELIEF_INTERFACE, the column
This will populate the MTL_SUPPLY columns DISPOSITION_ID will contain the
MRP_EXPECTED_DELIVERY_DATE, WIP_ENTITY_ID for the appropriate WIP job.
MRP_PRIMARY_QUANTITY,
MRP_TO_ORGANIZATION_ID, and When the Planning Manager next runs, during
MRP_DESTINATION_TYPE_CODE. the MPS Relief phase of the cycle, it will poll the
MRP_RELIEF_INTERFACE table for records in
If the profile option MRP:Consume MPS is set the above status (RELIEF_TYPE = 2,
to Yes, it is these columns that drive future PROCESS_STATUS = 2) and will perform MPS
operations in Oracle Master Scheduling/MRP. Relief for those records.
Commonly Encountered Problem
However, if the MTL_SUPPLY_T trigger was
missing or disabled, or due to some other error Once the appropriate MPS entries have been
the row in MRP_RELIEF_INTERFACE did not relieved, the Planning Manager will invoke the
get created, the relief process would not have stored procedure MRP_UPDATE_MRP_COLS.
taken place, and these columns would remain This populates the WIP_DISCRETE_JOBS
columns MPS_NET_QUANTITY and First, records for which any of
MPS_SCHEDULED_COMPLETION_DATE. SHIP_TO_SITE_USE_ID,
BILL_TO_SITE_USE_ID, or CUSTOMER_ID is
If the profile option MRP:Consume MPS is set NULL are updated with UPDATED_FLAG = 2
to Yes, it is these columns that drive future (No). These records do not require processing
operations in Oracle Master Scheduling/MRP. in the forecast consumption process because in
Oracle Master Scheduling/MRP, in order to see
However, if the WIP triggers were missing or forecast consumption, on your order and order
disabled, or due to some other error the row in line you must specify a customer as well as a
MRP_RELIEF_INTERFACE did not get created, bill-to and ship-to site.
the relief process would not have taken place,
and these columns would remain NULL. As a Next, the records in the set for which the
result, the associated discrete jobs would not attributes that affect forecast consumption have
show up in MRP. not changed are also updated with
UPDATED_FLAG = 2 (No). These attributes are
Remember that you can query for the existence the REQUIREMENT_DATE,
and status of these triggers using the following PRIMARY_UOM_QUANTITY, CUSTOMER_ID,
SQL statement (connect as MRP): SHIP_TO_SITE_USE_ID,
BILL_TO_SITE_USE_ID,
SELECT trigger_name, status AVAILABLE_TO_MRP, and DEMAND_CLASS.
FROM all_triggers If these attributes have not changed, they do not
WHERE trigger_name require further processing by the Planning
LIKE ‘WIP_DISCRETE_JOBS%’; Manager.

You should get these results: For those records that are left, a row is either
INSERTED or UPDATED in
TRIGGER_NAME STATUS MRP_SALES_ORDER_UPDATES (MSOU) for
---------------------------------------------------------------- this demand row. If, for this sales order line, a
WIP_DISCRETE_JOBS_BRD ENABLED record has already been inserted into MSOU,
WIP_DISCRETE_JOBS_BRI ENABLED then that record is updated with the information
WIP_DISCRETE_JOBS_BRU ENABLED from the MTL_DEMAND record. If a record has
not already been inserted into MSOU, then the
Forecast Consumption record is inserted at this point. The procedure
then marks each of these records in
MTL_DEMAND with UPDATED_FLAG = 2 (No).
If you define your forecast with Consume = Yes,
and the profile option MRP:Consume Forecast Finally, any records in MSOU with a
is set to Yes, then demanded sales orders will SCHEDULE_DATE which is outside the
consume your forecast entries. boundaries of the workday calendar are updated
so that the SCHEDULE_DATE is set to the last
When demand for a sales order is placed, valid workday of the calendar.
records are inserted into MTL_DEMAND for
each sales order line. When originally inserted, At this point the records in MTL_DEMAND have
these records have UPDATED_FLAG = 1 (Yes). been processed, in that you will see
An UPDATED_FLAG of 1 indicates that the row UPDATED_FLAG = 2 (No). Any necessary
requires processing by MRP. After the Planning records have been inserted into MSOU. Now
Manager completes processing this row, the process of forecast consumption takes
UPDATED_FLAG is set to 2 (No). place.
Once the proper forecast entries have been
When the Planning Manager runs, the stored consumed, the procedure
procedure UPDATE_SALES_ORDERS in the
COMPUTE_SALES_ORDER_CHANGES in the MRP_MANAGER_PK package is invoked. This
package MRP_MANAGER_PK is invoked. This procedure will update the MRP_DATE and
procedure operates on the set of records in MRP_QUANTITY columns in MTL_DEMAND for
MTL_DEMAND which have the column the sales orders just processed.
UPDATED_FLAG = 1.
If the profile option MRP:Consume Forecast is WHERE process_status = 3;
set to Yes, then these columns (MRP_DATE and
MRP_QUANTITY) drive future operations done This should only return request id’s of concurrent
by Oracle Master Scheduling/MRP. If the profile requests that are pending or running. If a
is set to No, then the columns request id returned by this query is completed or
REQUIREMENT_DATE and terminated, examine the log file of that
PRIMARY_UOM_QUANTITY are used in MRP. concurrent request to see the manner in which it
ended. Most likely you will find that the request
MRP Open Interfaces was aborted due to a database or system crash.

Oracle Master Scheduling has two open If that is the case, then it is safe to issue the
interfaces: the forecast open interface and the following update statement in SQL*Plus:
master schedule open interface. From a
technical perspective, these open interfaces UPDATE mrp_forecast_interface
operate in the same manner. SET process_status = 2,
request_id = NULL,
In the open interface tables, the column error_message = NULL
PROCESS_STATUS is used to indicate the WHERE process_status = 3
status of each record. The relevant values are AND request_id = <request id from previous
as follows: query>;

2 = To be processed This will reset those records so that they are


3 = In process picked up by the Planning Manager during its
4 = Errored during processing next cycle.
5 = Processed successfully
Other Useful Profile Options
The Planning Manager scans for rows with a
PROCESS_STATUS = 2. These records are Two other profile options that can be used when
then validated according to the rules in the diagnosing problems with the Planning Manager
Implementation manuals. If they are are MRP:Debug Mode and MRP:Trace Mode.
successfully processed, then the Both of these profile options can be set at the
PROCESS_STATUS is set to 5. If they contain user level.
some type of validation error, then
PROCESS_STATUS is set to 4, and the The Debug option will cause the Planning
ERROR_MESSAGE is populated appropriately. Manager to print more detailed information into
the log file. SQL statements being executed, as
The records with PROCESS_STATUS = 5 will well as information about specific sales orders,
remain in the interface table for the number of master schedules, etc. which are being
days specified by the profile option processed are included in the log file. When this
MRP:Interface Table History Days. option is set to Yes, the log file for the Planning
Manager, which can already be quite large, can
Under normal circumstances, records should grow at even a faster rate. When the profile
NOT remain in this table with a option is set to Yes, log files in the range of 30
PROCESS_STATUS of 3. Records should only megabytes per day would be common.
have this status while a worker is processing
those records. After completion, the status The Trace option will generate database trace
should be reset to either 4 or 5 as above. files for each Planning Manager run. The trace
files will be located in the directory specified by
If it appears that records are stuck in this table the init.ora parameter USER_DUMP_DEST. You
with PROCESS_STATUS = 3, issue the can then run the tkprof utility on the trace file to
following query from SQL*Plus to determine the see every SQL statement executed by the
request id of the process which left those Planning Manager. In addition, enable the Trace
records in that status: option if you wish to do an EXPLAIN PLAN on
the Planning Manager SQL for performance
SELECT DISTINCT(request_id) reasons.
FROM mrp_forecast_interface
Whether enabling or disabling these profile
options, if you want the settings of these profile
options to affect the behavior of the Planning
Manager, you must restart the Planning Manager
while signed on to the applications as the user
with the profile options set appropriately.

About The Author

Marc Slone is a Senior Technical Analyst for


Oracle Worldwide Customer Support in Orlando,
Florida. He currently supports the entire
manufacturing suite of products including Master
Scheduling/MRP, Work In Process, Cost
Management, Bills Of Material, and Engineering.
During his 1 1/2 years with Oracle, he supported
Oracle Order Entry in addition to the above
products.

Anda mungkin juga menyukai