Скачиваний:
3
Добавлен:
29.03.2025
Размер:
1.02 Mб
Скачать

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. Предложенные решения позволяют описывать широкий спектр вариантов маршрутной технологии.

  2. Обеспечивается расчет сводных норм расхода материальных ресурсов заданного класса.

  3. Обеспечивается расчет сводных норм потребности в трудовых ресурсах для ГРЦ, по профессиям, подразделениям.

  4. Обеспечивается расчет требуемых ресурсов групповых рабочих центров.

  5. Дополнительно решения позволяют учитывать нормы расхода инструмента и вспомогательных материалов.

  6. Работа с параметризованными ТП не поддерживается

Список используемых источников

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 с.

Приложение

  1. Скрипы метаданных

/************** Расширение модели хранения *********/

/********** ГРЦ *********/

/********** Создание таблицы ГРЦ *********/

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

/*************************************************************/

Соседние файлы в папке 2