Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

МиСПрИС_Задание2_2_Петрова_Романова_Заболотников_9373

.pdf
Скачиваний:
26
Добавлен:
20.06.2023
Размер:
1.48 Mб
Скачать

group 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