МиСПрИС_Задание2_2_Петрова_Романова_Заболотников_9373
.pdfgroup by A,FOO.oRes
loop
oInEl := F3.A; oQ := F3.SUMQ; vRes := F3.OREs;
if(oRes=1) then oRes:= vRes; return next;
end if; end loop;
end if; END loop;
END loop; else
return next; end if;
end
$$ LANGUAGE plpgsql;
-----------------------------ВЫВОД СВОДНЫХ НОРМ МАТЕРИАЛЬНЫХ РЕСУРСОВ-
-------------------------------
/*функция: ВЫВОД СВОДНЫХ НОРАМ МАТ РЕСУРСОВ ДЛЯ ИД ИЗДЕЛИЯ вход: IDPROD - ид. исходного изделия,
Q - кличество изделия
выход: NAMEIND - индекс входящего ресурса
NAMEIN - имя входящего ресурса
CLRESNAME - имя класса входящего ресурса
CLRESID - индекс класса входящего ресурса
COUNTQ - расход
SHNAMEUOM - краткое наименование ЕИ ресурса входящего
NAMEUOM - наименование ЕИ ресурса входящего
IDUOM - индекс ЕИ ресурса входящего
FLAG - флаг ошибки
эффекты: 1) если изделия с ид. IDPROD нет, то flag = 0, а остальное
NULL;
31
2) если изделия с ид. IDPROD не имеет вх. ресурсов, то flag
=1, а остальное NULL;
требования:1)изделие с ид. IDPROD должно существовать в TM */
create or replace function SHOW_MR(IDPROD integer, Q double precision) returns table (NAMEIND integer,NAMEIN TEXT, CLRESNAME text,CLRESID INT, COUNTQ double precision, SHNAMEUOM text,NAMEUOM text,IDUOM INT, FLAG integer)
as $$
declare F RECORD; begin
for F in select OINEL,OQ,ORES from SUM_MR(IDPROD,Q) as SUMR loop
NAMEIND:= F.OINEL;
COUNTQ:=F.OQ;
FLAG:= F.ORES;
select name_product, ID_CLASS from product where nameind = id_product into namein,CLRESID;
select name_CLASS, ID_UOM from classificator where CLRESID = id_CLASS into CLRESNAME,IDUOM;
select name_uom,short_name_uom from unit_of_measure where IDUOM = id_uom into NAMEUOM,SHNAMEUOM;
if (CLRESID != 27) THEN return next;
end if; END loop; end
$$ LANGUAGE plpgsql;
------------------------------СВОДНЫЕ НОРМЫ ТРУДОВЫХ РЕСУРСОВ---------
-----------------------------
/*функция: СВОДНЫЕ НОРМЫ ТРУДОВЫХ РЕСУРСОВ ДЛЯ ИД ИЗДЕЛИЯ вход: pIdEl - ид. исходного изделия,
pQ - количество изделия выход: oIdGRC - ид. ГРЦ
32
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
*/
create or replace function TR_TO(pIdEl integer, pQ double precision) returns table(oIdGRC integer, oTpz double precision, oTst double precision, oTsum double precision, oIdClProf integer, oIdKval integer,oRes integer)
as $$
declare vIdTO integer; declare vInTO integer; declare vIdEl integer; declare vQ double precision; declare vvQ double precision;
declare vForQ double precision; declare vRes integer;
declare f record; declare F2 RECORD; declare F3 RECORD; begin
/*Проверка наличия изделия в справочнике*/
select count(*) from PRODUCT where ID_PRODUCT = pIdEl into oRes;
/*Проверка допустимого значения количества*/ if((pQ < 0.001) or (pQ is null)) then
oRes = 0; end if;
if( oRes>0)then
/*По всем операциям изделия, начиная с последней*/
33
for f in select p1.ID_TO, p1.CL_PROF,p1.GRC, p1.T_ST,p1.T_PZ,p1.qual from TM p1
where p1.FOR_PROD=pIdEl order by p1.NUM desc
loop
vIdTO = f.ID_TO; oIdClProf = F.CL_PROF; oIdGRC = F.GRC;
oTst = F.T_ST;
oTpz = F.T_PZ; oIdKval = F.QUAL; oTsum= oTst*pQ + oTpz;
oTst=oTst*pQ; return next;
/*По всем входным ресурсам текущей операции*/ for F2 in select IN_TO, Q, FOR_Q from IN_RES
where OUT_TO= vIdTO loop
vInTO = F2.IN_TO; vQ = F2.Q;
vForQ = F2.FOR_Q;
select p2.FOR_PROD from TM p2 where p2.ID_TO=vInTO into vIdEl;
/*Исключаем ресурсы с тем же изделием */ if(vIdEl <> pIdEl) then
vvQ=pQ*vQ/vForQ;
/*расчет для нового изделия из входного ресурса*/ for F3 in select tr.oIdGRC , tr.oTpz,
tr.oTst, tr.oTsum, tr.oIdClProf, tr.oIdKval, tr.oRes
from TR_TO(vIdEl,vvQ) as tr
loop
oIdGRC = f3.oIdGRC; oTpz = f3.oTpz; oTst = f3.oTst; oTsum = f3.oTsum;
oIdClProf = f3.oIdClProf; oIdKval = f3.oIdKval;
34
oRes = f3.oRes; return next;
end loop; end if;
end loop;
end loop;
else
return next; end if;
end
$$ LANGUAGE plpgsql;
----------------------фУНКЦИЯ ОТОБРАЖЕНИЯ СВОДНЫХ НОРМ РАСХОДА ТРУДОВЫХ РЕСУРСОВ--------------
/*функция: ОТОБРАЖЕНИЕ СВОДНЫХ НОРМ ТРУДОВЫХ РЕСУРСОВ ДЛЯ ИД ИЗДЕЛИЯ вход: IDPROD - ид. исходного изделия,
Q - количество изделия выход: oIdGRC - ид. ГРЦ
namergrc - наименование ГРЦ
IdClProf oIdGRC - ид. ГРЦ
namergrc - наименование ГРЦ
IdClProf oIdGRC - ид. ГРЦ
namergrc - наименование ГРЦ
IdClProf - ид. класса профессионала nameProf - наименование профессионала
IdKval - ид. квалификации
nameKval - наименование квалификации
Tpz - вермя пз
Tst - время штучное
Tsum - суммарное время
эффекты: 1) если изделия с ид. IDPROD нет, то все вых параметры равны NULL, oRes=0;
2)Tsum = oTsum= oTst*pQ + oTpz;
3)если pQ <0.001 или pQ is nullthen oRes=0;
требования:1)изделие с ид. IDPROD должно существовать в TM 2) pQ > 0.001
*/
35
create or replace function SHOW_TR(IDPROD integer, Q double precision) returns table (IdGRC integer, namergrc text, IdClProf integer, nameProf text, IdKval integer, nameKval text, Tpz double precision, Tst double precision, Tsum double precision)
as $$
declare F RECORD; begin
for F in select tt.oIdGRC, SUM(tt.oTpz) as STPZ, SUM(tt.oTst) as STST, SUM(tt.oTsum) as SST, tt.oIdClProf , tt.oIdKval from tr_to(IDPROD,Q) as tt group by oIdGRC,oIdClProf,oIdKval
loop
IdGRC := F.oIdGRC;
Tpz := F.STPZ;
Tst := F.STST;
Tsum := F.SST;
IdClProf := F.oIdClProf;
IdKval := F.oIdKval;
select grc_name from grc where IdGRC = id_grc into namergrc;
select name_class from classificator where IdClProf = id_class into nameProf;
select name_ev from enum_value where id_value = IdKval into nameKval;
return next; END loop;
end
$$ LANGUAGE plpgsql;
----------------------------------------------ЗАПОЛНЕНИЕ ТАБЛИЦ-------
----------------------------
--Единицы измерения select add_uom('ч','час');
select add_uom('ед','единица'); select add_uom('м','метр'); select add_uom('т','тонна'); select add_uom('мм','милиметр'); select add_uom('кг','килограм');
36
select add_uom('шт','штука'); select add_uom('л','литр');
---Вершина классификатора
select add_class('Изделия',null,7);
select add_class('Субъект хозяйственной деятельности',null,null); select add_class('Профессия',null,null);
select add_class('Операция',null,null);
---Классификатор изделия
select add_class('Продукт',1,7); select add_class('Деталь',1,7); select add_class('Материал',1,4); select add_class('Инструмент',1,7);
select add_class('Средства труда',1,null);
select add_class('Велосипед',5,7); select add_class('Прогулочный',28,7);
---Классификатор Материалов select add_class('Металл',7,4); select add_class('Резина',7,4); select add_class('Краска',7,8); select add_class('Пластик',7,4);
---Классификатор СХД
select add_class('Производственное предприятие',2,null); select add_class('Цех',2,null);
select add_class('Участок',2,null);
---Классификатор профессий
select add_class('Оператор станков ЧПУ',3,null); select add_class('Сварщик',3,null);
select add_class('Маляр',3,null); select add_class('Слесарь',3,null); select add_class('Токарь',3,null); select add_class('Заготовитель',3,null); select add_class('Сборщик',3,null);
37
---Классификатор операций
select add_class('Резка',4,null); select add_class('Штамповка',4,null); select add_class('Сварка',4,null); select add_class('Покраска',4,null); select add_class('Сборка',4,null); select add_class('Регулировка',4,null); select add_class('Заготовка',4,null); select add_class('Токарная ЧПУ',4,null); select add_class('Шлифовка',4,null);
---Структура предприятия
select add_shd('Велосипедный завод', 'ВелЗав',9,null); select add_shd('Цех 1', 'Ц1',10,1);
select add_shd('Цех 2', 'Ц2',10,1);
select add_shd('Участок 1_1', 'Уч1_1',11,2); select add_shd('Участок 1_2', 'Уч1_2',11,2); select add_shd('Участок 2_1', 'Уч2_1',11,3); select add_shd('Участок 2_2', 'Уч2_2',11,3);
---Список ГРЦ
select add_grc('Стенд сборки','СтСб',8,7); select add_grc('Стенд регулировки','СтРе',8,7);
select add_grc('Сварочный полуавтомат','СвПо',8,5); select add_grc('Пила дисковая','СтСб',8,4);
select add_grc('Штамповочный пресс','ШтПр',8,5); select add_grc('Шлфовальный станок','ШлСт',8,6); select add_grc('Линия покраски','ЛиПо',8,6); select add_grc('Заготовительный стенд','ЗаСт',8,4); select add_grc('Отрезной станок','ОтСт',8,4);
select add_grc('Токарный обрабатывающий центр','ТоОбЦе',8,5);
---Добавим перечисление
select add_enum('Квалификация');
38
select add_value('1 разряд', 1); select add_value('2 разряд', 1); select add_value('3 разряд', 1); select add_value('4 разряд', 1); select add_value('5 разряд', 1); select add_value('6 разряд', 1); select add_value('7 разряд', 1);
---Добавим инструенты
select add_product('Инструент Заготовки', 27); select add_product('Инструент Токарный', 27); select add_product('Инструент Покрасочный', 27); select add_product('Инструент Шлифовальный', 27);
select add_product('Инструент Заготовки Резины', 27); select add_product('Инструент Сборочный', 27); select add_product('Инструент Сварки', 27);
select add_product('Инструент Регулировки', 27);
---Добавим материалы
select add_product('Резина ABC', 7); select add_product('Металл A', 7); select add_product('Металл B', 7); select add_product('Пластик A', 7); select add_product('Краска 1', 7);
---Добавим детали
select add_product('Рама', 6); select add_product('Болт', 6); select add_product('Колесо', 6); select add_product('Руль', 6);
---Добавим готовый продукт select add_product('Орион', 29);
---Добавим Технические операции
select add_tm(13,22,30,6,1,0.200,0.100); select add_tm(11,22,30,4,1,0.100,0.100); select add_tm(5,24,17,6,8,0.500,0.200); select add_tm(6,24,17,7,8,0.200,0.200); select add_tm(9,22,30,6,1,0.300,0.200);
39
select add_tm(14,21,14,4,7,0.100,0.200); select add_tm(9,26,16,5,6,0.100,0.400); select add_tm(9,25,12,6,10,0.300,0.100); select add_tm(12,22,30,5,1,0.300, 0.100); select add_tm(12,26,16,6,6,0.200, 0.200); select add_tm(12,25,12,7,10,0.200, 0.100);
select add_tm(9,24,16,5,8,0.100,0.400); --рама заготовка select add_tm(9,20,13,6,3,0.300,0.100); --рама сварка select add_tm(9,26,16,5,6,0.200,0.100); --рама шлифовка select add_tm(9,23,15,6,2,0.300,0.200); --рама регулировка select add_tm(9,21,14,5,7,0.100,0.100); --рама покрас
select add_tm(9,25,12,6,10,0.300,0.100); --рама сварка
---Добавим техОпер для инструентов
select add_tm(15,22,30,5,1,0.200, 0.100); --сборка и сборочн инстр select add_tm(1,24,17,6,8,0.100, 0.200); --заготовка и загот инстр select add_tm(16,24,17,6,8,0.100, 0.200); --заготовка и загот инстр select add_tm(4,21,14,7,7,0.300, 0.200); --покраска
select add_tm(3,26,16,4,6,0.300, 0.200); --шлифовка select add_tm(2,25,12,4,10,0.200, 0.100); --ЧПУ select add_tm(17,20,13,4,3,0.300, 0.100); --сварка
select add_tm(18,23,15,4,2,0.300, 0.200); --регулировка
--ДЛЯ рамы
select add_inres(18,4,8,1); -- заготовка металла select add_inres(18,13,0.1,1); --инструмент заготовки select add_inres(19,23,0.01,1); --инструмент сварки select add_inres(20,12,0.1,1);--инструмент шлифовки select add_inres(21,24,0.01,1);--инструмент регулировки select add_inres(22,11,0.1,1);--инструмент покраски select add_inres(22,6,1,1);--краска покраски
40