
- •Задание на работу
- •Аннотация
- •Введение
- •1. Анализ предметной области
- •1.1. Маршрутная технология и маршрутные карты
- •1.2. Разработка функциональных требований к подсистеме
- •1.3. Разработка модели классов этапа анализа
- •2. Разработка модели классов этапа проектирования
- •3. Разработка модели хранения
- •4. Разработка процедур поддержки работы с маршрутными спецификациями
- •5. Подготовка примера маршрутной спецификации изделия
- •6. Тестирование процедур работы со спецификацией изделия
- •Список используемых источников
- •Приложение
6. Тестирование процедур работы со спецификацией изделия
Найти технологический маршрут изделия Д3 Вал (рис. 29)
select * from FIND_TM (67).
Рис. 29. Результат поиска технологического маршрута изделия 67 Вал
Расчет сводных норм расхода материальных ресурсов заданного класса (рис. 30):
select * from SUM_MR_CLASS(69, 21,10)/*69 С1 Блок, 21 Материал, 10 Количество*/
Рис.30. Результаты расчета сводных норм расхода материальных ресурсов заданного класса 21 Материалы
Тестирование процедуры расчета трудовых затрат TR_TO. Запрос для изделия С1 Блок, ид. 69 в количестве 10 штук :
select oIdGRC,oIdClProf,oIdKval, SUM(oTpz),SUM(oTst),SUM(oTsum)
from TR_TO(69, 10)
group by oIdGRC,oIdClProf,oIdKval
Результат выполнения запроса представлен на рис. 31, где SUM – суммарное п.з. время, SUM1 – суммарное время обработки, SUM2 – общее время занятости соответствующего ГРЦ по заданной профессии и квалификации.
Рис. 31. Результаты расчета норм труда
Выводы
Предложенные решения позволяют описывать широкий спектр вариантов маршрутной технологии.
Обеспечивается расчет сводных норм расхода материальных ресурсов заданного класса.
Обеспечивается расчет сводных норм потребности в трудовых ресурсах для ГРЦ, по профессиям, подразделениям.
Обеспечивается расчет требуемых ресурсов групповых рабочих центров.
Дополнительно решения позволяют учитывать нормы расхода инструмента и вспомогательных материалов.
Работа с параметризованными ТП не поддерживается
Список используемых источников
1. Data Definition Guide : файл DataDef.pdf
2. Language Reference Guide: файл LangRef.pdf
3. Архитектура информационных систем. Учебник. М.,Издательский центр «Академия», 2012
4. Информационное обеспечение жизненного цикла изделий. Учебное пособие: СПб, Издательство Политехнического университета, 2012
5. Приемы объектно-ориентированного проектирования. Паттерны проектирования: Изд-во «ПИТЕР», 2008
6. Проектирование корпоративных информационных систем.: СПб, Изд-во СПбГЭТУ «ЛЭТИ», 2013
7. В.А.Дубенецкий, А.Г. Кузнецов Использование объектных моделей при создании информационных систем: учебно-методическое пособие. СПбГЭТУ «ЛЭТИ», 2016. 220 с.
8. В.А.Дубенецкий, А.Г. Кузнецов Проектирование информационных систем с использованием UML: учебно-методическое пособие. СПбГЭТУ «ЛЭТИ», 2016. 62 с.
Приложение
Скрипы метаданных
/************** Расширение модели хранения *********/
/********** ГРЦ *********/
/********** Создание таблицы ГРЦ *********/
CREATE TABLE GRC (
ID_GRC INTEGER NOT NULL P,
SHORT_NAME VARCHAR(50),
NAME VARCHAR(250),
ID_CL INTEGER NOT NULL,
PLACE INTEGER NOT NULL,
);
ALTER TABLE GRC ADD PRIMARY KEY (ID_GRC);
ALTER TABLE GRC ADD FOREIGN KEY (ID_CL) REFERENCES CHEM_CLASS;
ALTER TABLE GRC ADD FOREIGN KEY (PLACE) REFERENCES SHD;
/********** Создание генератора ГРЦ *********/
CREATE GENERATOR SPEC_PROD_GEN;
create procedure GEN_ID_GRC
returns (
ONEW integer)
as
begin
/*функция: возвращает новый уникальный идентификатор*/
oNew=GEN_ID(GRC,1); /*вызов генератора*/
suspend;
end
/**************************************************************/
/**************************************************************//********** Технологический маршрут ************/
/**** Создание таблицы ТЕХНОЛОГИЧЕСКИЙ МАРШРУТ TM *********/
CREATE TABLE TM (
ID_TO INTEGER NOT NULL,
FOR_PROD integer NOT NULL,
NUM integer NOT NULL,
CL_TO integer NOT NULL,
CL_PROF integer NOT NULL,
KVAL integer NOT NULL,
GRC integer NOT NULL,
T_PZ double precision NOT NULL,
T_ST double precision NOT NULL);
ALTER TABLE TM ADD PRIMARY KEY (ID_TO);
ALTER TABLE TM ADD FOREIGN KEY (CL_TO) REFERENCES CHEM_CLASS;
ALTER TABLE TM ADD FOREIGN KEY (CL_PROF) REFERENCES CHEM_CLASS;
ALTER TABLE TM ADD FOREIGN KEY (KVAL) REFERENCES ENUM_VAL;
ALTER TABLE TM ADD FOREIGN KEY (ID_GRC) REFERENCES GRC;
ALTER TABLE TM ADD FOREIGN KEY (FOR_PROD) REFERENCES PROD;
/********** Создание генератора TM *********/
CREATE GENERATOR TM_GEN;
create procedure GEN_ID_TO
returns (
ONEW integer)
as
begin
/*функция: возвращает новый уникальный идентификатор*/
oNew=GEN_ID(TM,1); /*вызов генератора*/
suspend;
end
/**************************************************************/
/**************************************************************/
/***** Создание таблицы Входной ресурс ТО IN_RES *********/
CREATE TABLE IN_RES (
OUT_TO INTEGER NOT NULL,
IN_TO integer NOT NULL,
Q double precision NOT NULL,
FOR_Q double precision NOT NULL);
ALTER TABLE IN_RES ADD FOREIGN KEY (OUT_TO) REFERENCES TM;
ALTER TABLE IN_RES ADD FOREIGN KEY (IN_TO) REFERENCES TM;
/**************************************************************/
/************* Процедуры работы с ТМ *******************/
/********************* Найти ТМ *********/
create or alter procedure FIND_TM (
PIDEL integer)
returns (
oIdTO integer,
ONUM integer,
OIDClTO integer,
OSHNAMETO varchar(15),
ONAMETO varchar(50),
OIDGRC integer,
OSHNAMEGRC varchar(15),
ONAMEGRC varchar(50),
OIDPLACE integer,
OSHNAMEPLACE varchar(15),
ONAMEPLACE varchar(50),
OIDPROF integer,
OSHNAMEPROF varchar(15),
ONAMEPROF varchar(50),
OIDKVAL integer,
OSHNAMEKVAL varchar(15),
OTPZ double precision,
OTST double precision,
OIDINRES integer,
OSHNAMEINRES varchar(15),
ONAMEINRES varchar(50),
OIDCLINRES integer,
OSHNAMECLINRES varchar(15),
ONAMECLINRES varchar(50),
OQ double precision,
OFORQ double precision,
ORES integer)
as
declare variable VYESTM integer;
declare variable VIDINTO integer;
begin
/*функция: возвращает ТМ со списком входных ресурсов каждой операции позиции
вход: pIdEl - ид. изделия
выход: oNum – порядковый номер ТО,
oIdTO – ид. ТО,
oIdClTO integer,
oShNameTO – обозн. класса ТО,
oNameTO – имя класса ТО,
oIdGRC – ид. ГРЦ,
oShNameGRC – обозн. ГРЦ,
oNameGRC – имя ГРЦ,
oIdPlace – ид. места,
oShNamePlace – обозн. места,
oNamePlace – имя места ,
oIdProf – ид. профессии,
oShNameProf – обозн. проф.,
oNameProf – имя проф.,
oIdKval – ид. квалификации,
oShNameKval – обозн. квал.,
oTPZ - Тпз,
oTSt - Тшт,
oIdInRes – ид. вх. ресурса,
oShNameInRes – обозн. вх. ресурса,
oNameInRes – имя вх. ресурса,
oIdClInRes – ид. класса вх. ресурса,
oShNameClInRes – обозн. класса вх. ресурса,
oNameClInRes – имя класса вх ресурса,
oQ – расход ресурса,
oForQ – для количества,
oRes - 0 - ошибка, 1 – ТМ найден
эффекты: 1) при отсутствии входных ресурсов все выходные равны 0 или "", oRes = 1
2) при отсутствии изделия все выходные равны 0 или "", oRes = 0
требования: изделие с ид. pIdEl должно быть в PROD*/
ONUM = 0;
OIDTO = 0;
OSHNAMETO = "";
ONAMETO = "";
OIDGRC = 0;
OSHNAMEGRC = "";
ONAMEGRC = "";
OIDPLACE = 0;
OSHNAMEPLACE = "";
ONAMEPLACE = "";
OIDPROF = 0;
OSHNAMEPROF = "";
ONAMEPROF = "";
OIDKVAL = 0;
OSHNAMEKVAL = "";
OTPZ = 0;
OTST = 0;
OIDINRES = 0;
OSHNAMEINRES = "";
ONAMEINRES = '';
OIDCLINRES = 0;
OSHNAMECLINRES = "";
ONAMECLINRES = "";
OQ = 0;
OFORQ = 0;
ORES = 0;
select count(*)
from TM
where FOR_PROD = :PIDEL
into :oRes;
if (:oRes > 0) then
begin
/*Для каждой операции ТМ найти по ид. имена и обозначения*/
for select P1.ID_TO, P1.NUM, P1.CL_TO, P1.CL_PROF, P1.KVAL, P1.ID_GRC, P1.T_PZ, P1.T_ST
from TM P1
where P1.FOR_PROD = :PIDEL
order by P1.NUM
into :OIDTO, :ONUM, :OIDCLTO, :OIDPROF, :OIDKVAL, :OIDGRC, :OTPZ, :OTST
do
begin
select SHORT_NAME, NAME
from CHEM_CLASS
where ID_CLASS = :OIDClTO
into :OSHNAMETO, :ONAMETO;
select SHORT_NAME, NAME
from CHEM_CLASS
where ID_CLASS = :OIDPROF
into :OSHNAMEPROF, :ONAMEPROF;
select SHORT_NAME
from ENUM_VAL
where ID_VAL = :OIDKVAL
into :OSHNAMEKVAL;
select SHORT_NAME, NAME, PLACE
from GRC
where ID_GRC = :OIDGRC
into :OSHNAMEGRC, :ONAMEGRC, :OIDPLACE;
select SHORT_NAME, NAME
from SHD
where ID_SHD = :OIDPLACE
into :OSHNAMEPLACE, :ONAMEPLACE;
/*Для каждого входного ресурса oIdTO найти имена составляющих*/
for select IN_TO, Q, FOR_Q
from IN_RES
where OUT_TO = :OIDTO
into :VIDINTO, :OQ, :OFORQ
do
begin
select P2.FOR_PROD
from TM P2
where P2.ID_TO = :VIDINTO
into :OIDINRES;
select SHORT_NAME, NAME, ID_CL
from PROD
where ID_PROD = :OIDINRES
into :OSHNAMEINRES, :ONAMEINRES, :OIDCLINRES;
select SHORT_NAME, NAME
from CHEM_CLASS
where ID_CLASS = :OIDCLINRES
into :OSHNAMECLINRES, :ONAMECLINRES;
suspend;
end
end
end
else
begin
ORES = 0;
suspend;
end
end
******************** Сводные нормы расхода *************
create or alter procedure MR_Q (
PIDTO integer, PQ double precision)
returns ( OINEL integer, OQ double precision,oRes integer)
as
declare variable VINEL integer;
declare variable vIdEl integer;
declare variable vYesTM integer;
declare variable vYesRes integer;
declare variable VQ double precision;
declare variable VVQ double precision;
declare variable vForQ double precision;
declare variable VVINEL integer;
declare variable vInTO integer;
declare variable vIdTO integer;
begin
/* Функция: Расчет норм расхода материальных ресурсов для pIdTO
Вход: pIdTO - ид. исходноq операции,
pQ - для количества,
Выход: oInEl - ид. входного изделия,
oQ - требуемое количество,
oRes - наличие ошибки 0, отсутствие ошибки > 0
Эффекты: 1) При отсутствии изделия с ид. pIdEl вых. параметры равны 0, oRes=0;
Требования: Наличие в PROD изделия с ид. pIdEl
Разработал:
28.07.2021 ________
*/
/*Инициализация переменных */
OINEL = 0;
OQ=0;
vInEl=0;
vQ=0;
vvQ=0;
vForQ=1;
vvInEl=0;
vInTO=0;
oRes=0;
/*Находим ид. изделия для pIdTO */
select FOR_PROD from TM
where ID_TO=:pIdTO
into :vIdEl;
if(:vIdEl > 0) then
vYesTM=1;
select count(*) from IN_RES
where OUT_TO=:pIdTO
into :vYesRes;
if (:vYesTM > 0) then
begin
oRes=1;
if(:vYesRes>0) then
begin
/*Для каждого входного ресурса pIdTO*/
for select IN_TO,Q,FOR_Q from IN_RES
where OUT_TO=:pIdTO
into :vInTO,:vQ,:vForQ
do
begin
vInEl=0;
vvQ=0;
select p2.FOR_PROD from TM p2
where p2.ID_TO=:vInTO
into :vInEl;
if (:vInEl>0) then
begin
vvQ=vQ*pQ/vForQ;
oQ=vvQ;
oInEl=vInEl;
suspend;
end
end
end
else
begin
oInEl=0;
oQ=0;
suspend;
end
end
else
begin
oInEl = 0;
oQ = 0;
suspend;
end
end
/*************************************************************/
/*********** Суммарный расход материальных ресурсов *********/
create or alter procedure SUM_MR(pIdEl integer, pQ double precision)
returns(oInEl integer, oQ double precision, oRes integer)
as
declare variable vIdTO integer;
declare variable vRes integer;
begin
/*функция: Расчет сводных норм материальных ресурсов для изделия pIdEl
вход: pIdEl - ид. исходного изделия,
выход: oInEl - ид. входного ресурса
oQ - расход
oRes - 0 - ошибка, > 0- без ошибки
эффекты: 1) если изделия с ид. pIdEl нет, то oInEl=0, oQ=0, oRes=0;
2) если изделия с ид. pIdEl не имеет вх. ресурсов, то oInEl=0, oQ=0, oRes=1;
требования:1)изделие с ид. pIdEl должно существовать в TM
разработал:
28.07.2021
*/
oInEl=0;
oRes=0;
oQ=0;
select count(*) from PROD
where ID_PROD=:pIdEl
into :oRes;
if(:oRes>0) then
begin
for select ID_TO from TM
where FOR_PROD=:pIdEl
order by NUM desc
into :vIdTO
do
begin
for select oInEl,SUM(oQ),oRes from MR_Q(:vIdTO,:pQ)
group by oInEl,oRes
into :oInEl,:oQ,:vRes
do
begin
if(:oInEl <> :pIdEl and oInEl>0) then
begin
suspend;
for select oInEl, SUM(oQ),:oRes from SUM_MR(:oInEl,:oQ)
group by oInEl,oRes
into :oInEl, :oQ,:vRes
do
begin
if(:oRes=1) then oRes= vRes;
suspend;
end
end
end
end
end
else
suspend;
end
/*************************************************************/
/**************** Трудовые ресурсы в ТМ ***************/
create or alter procedure TR_TO(pIdEl integer, pQ double precision)
returns(oIdGRC integer, oTpz double precision,oTst double precision,
oTsum double precision, oIdClProf integer, oIdKval integer,oRes integer)
as
declare variable vIdTO integer;
declare variable vInTO integer;
declare variable vIdEl integer;
declare variable vQ double precision;
declare variable vvQ double precision;
declare variable vForQ double precision;
declare variable vRes integer;
begin
/*функция: Расчет сводных норм трудовых ресурсов для изделия pIdEl
вход: pIdEl - ид. исходного изделия,
выход: oIdGRC - ид. ГРЦ
oTpz - пз время
oTst - штучное время
oTsum - суммарное время
oIdClProf- ид. профессии
oIdKval - ид. квалификации
oRes - 0 - ошибка, > 0- без ошибки
эффекты: 1) если изделия с ид. pIdEl нет, то все вых параметры равны 0, oRes=0;
2) Tsum = oTsum= oTst*pQ + oTpz;
3) если pQ <0.001 или pQ is nullthen oRes=0;
требования:1)изделие с ид. pIdEl должно существовать в TM
2) pQ > 0.001
разработал: Дубенецкий В.А.
28.07.2021
*/
oIdGRC=0;
oTpz=0;
oTst=0;
oTsum=0;
oIdClProf=0;
oIdKval=0;
/*Проверка наличия изделия в справочнике*/
select count(*) from PROD
where ID_PROD =:pIdEl
into :oRes;
/*Проверка допустимого значения количества*/
if((:pQ <0.001) or (:pQ is null)) then oRes=0;
if(:oRes>0)then
/*По всем операциям изделия, начиная с последней*/
for select p1.ID_TO, p1.CL_PROF,p1.ID_GRC, p1.T_ST,p1.T_PZ,p1.KVAL from TM p1
where p1.FOR_PROD=:pIdEl
order by p1.NUM desc
into :vIdTO,:oIdClProf,:oIdGRC,:oTst,:oTpz,oIdKval
do
begin
oTsum= oTst*pQ + oTpz;
oTst=oTst*pQ;
suspend;
/*По всем входным ресурсам текущей операции*/
for select IN_TO, Q, FOR_Q from IN_RES
where OUT_TO= :vIdTO
into :vInTO,:vQ,:vForQ
do
begin
select p2.FOR_PROD from TM p2
where p2.ID_TO=:vInTO
into :vIdEl;
/*Исключаем ресурсы с тем же изделием */
if(:vIdEl <> :pIdEl) then
begin
vvQ=pQ*vQ/vForQ;
/*расчет для нового изделия из входного ресурса*/
for select oIdGRC, oTpz, oTst, oTsum, oIdClProf, oIdKval,oRes
from TR_TO(:vIdEl,:vvQ)
into :oIdGRC,:oTpz, :oTst, :oTsum, :oIdClProf, :oIdKval,:oRes
do
begin
suspend;
end
end
end
end
else
suspend;
end
/*************************************************************/