Входные параметры
Параметр | Тип | Описание |
---|---|---|
UWORDERDATE |
DATE |
|
UWACTDATE |
DATE |
|
UWORDERID |
INTEGER |
|
QUALITYBEFOREID |
INTEGER |
|
QUALITYAFTERID |
INTEGER |
|
CROPID |
INTEGER |
|
CLASSID |
INTEGER |
|
UWTYPEID |
INTEGER |
|
SORTID |
INTEGER |
|
CLIENTID |
INTEGER |
|
FINALCALCULATION |
INTEGER |
|
Выходные параметры
Параметр | Тип | Описание |
---|---|---|
BEFOREWEIGHT |
INTEGER |
|
STORAGEID |
INTEGER |
|
Описание
Расчет акта очистки после сформированного акта на сушку по реестрам
Определение
CREATE PROCEDURE UNDERWORK_CALCUWACT_REGISTERCL(
UWORDERDATE DATE,
UWACTDATE DATE,
UWORDERID INTEGER,
QUALITYBEFOREID INTEGER,
QUALITYAFTERID INTEGER,
CROPID INTEGER,
CLASSID INTEGER,
UWTYPEID INTEGER,
SORTID INTEGER,
CLIENTID INTEGER,
FINALCALCULATION INTEGER)
RETURNS (
BEFOREWEIGHT INTEGER,
STORAGEID INTEGER)
AS
declare variable METODSOLUTION integer;
declare variable SELECTEDWASTE integer;
declare variable WRITING_OFF integer;
declare variable CLEANINGBEGINDATE date;
declare variable CLEANINGENDDATE date;
declare variable NET integer;
declare variable WEIGHT integer;
declare variable HUMIDITYBEFORE numeric(9,2);
declare variable DIRTBEFORE numeric(9,2);
declare variable SCREENINGBEFORE numeric(9,2);
declare variable GRAINUNITBEFORE integer;
declare variable SMALLGRAINBEFORE numeric(9,2);
declare variable HUMIDITYAFTER numeric(9,2);
declare variable DIRTAFTER numeric(9,2);
declare variable SCREENINGAFTER numeric(9,2);
declare variable GRAINUNITAFTER integer;
declare variable SMALLGRAINAFTER decimal(9,2);
declare variable OWNERID integer;
declare variable REGISTERID integer;
declare variable ACROPID integer;
declare variable ACLASSID integer;
declare variable PARTYID integer;
declare variable INVOICE integer;
declare variable CONTRACTID integer;
declare variable STORINGID integer;
declare variable DIRTWEIGHT integer = 0;
declare variable SCREENWEIGHT integer = 0;
declare variable ALLNET integer = 0;
declare variable ALLDIRTWEIGHT integer = 0;
declare variable ALLSCREENWEIGHT integer = 0;
declare variable SETTLEMENTWASTEWEIGHT integer;
declare variable SETTLEMENTSCREENINGWEIGHT integer;
declare variable CLEAN numeric(9,2) = 0;
declare variable BEFORECLEANINGQUALITYID integer;
declare variable QUALITYNUMBERBEFORECLEAN integer;
declare variable HUMIDITY_BEFORECLEAN integer = 0;
declare variable HUMIDITYBEFORECLEAN numeric(9,2);
declare variable DIRT_BEFORECLEAN integer = 0;
declare variable DIRTBEFORECLEAN numeric(9,2);
declare variable SCREENING_BEFORECLEAN integer = 0;
declare variable SCREENINGBEFORECLEAN numeric(9,2);
declare variable GRAINUNITBEFORECLEAN integer;
declare variable SMALLGRAINBEFORECLEAN numeric(9,2);
declare variable AFTERCLEANINGQUALITYID integer;
declare variable QUALITYNUMBERAFTERCLEAN smallint;
declare variable HUMIDITY_AFTERCLEAN integer = 0;
declare variable HUMIDITYAFTERCLEAN numeric(9,2);
declare variable DIRT_AFTERCLEAN integer = 0;
declare variable DIRTAFTERCLEAN numeric(9,2);
declare variable SCREENING_AFTERCLEAN integer = 0;
declare variable SCREENINGAFTERCLEAN numeric(9,2);
declare variable GRAINUNITAFTERCLEAN integer;
declare variable SMALLGRAINAFTERCLEAN numeric(9,2);
declare variable RESULTQUALITYID integer;
declare variable ADIRTWEIGHT integer;
declare variable COEFFICIENT numeric(6,4);
declare variable INVENTORYID integer;
declare variable DELTAWEIGHT integer;
declare variable TARE integer;
declare variable QUALITYNUMBERFORAGE integer;
declare variable FORAGEHUMIDITY numeric(9,2);
declare variable HUMIDITYFORAGE numeric(9,2);
declare variable FORAGEDIRT numeric(9,2);
declare variable DIRTFORAGE numeric(9,2);
declare variable FORAGESCREENING numeric(9,2);
declare variable SCREENINGFORAGE numeric(9,2);
declare variable FORAGEGRAINUNIT integer;
declare variable GRAINUNITFORAGE integer;
declare variable FORAGESMALLGRAIN numeric(9,2);
declare variable SMALLGRAINFORAGE numeric(9,2);
declare variable W_FORAGE1C_A integer;
declare variable W_FORAGE1C_B integer;
declare variable W_FORAGE2C integer;
declare variable W_FORAGE3C integer;
declare variable W_SMALLGRAIN integer;
declare variable W_BYPRODUCT_A integer;
declare variable W_BYPRODUCT_B integer;
declare variable W_BYPRODUCT_D integer;
declare variable FORAGE_QUALITYID integer;
begin
select
coalesce(METODSOLUTION,0), SELECTEDWASTE, coalesce(WRITING_OFF,0)
from UWTYPES
where (UWTYPEID = :UWTYPEID)
into :METODSOLUTION, :SELECTEDWASTE, :WRITING_OFF;
BEFOREWEIGHT = 0;
ALLDIRTWEIGHT = 0;
CLEANINGBEGINDATE = null;
CLEANINGENDDATE = null;
if (:FINALCALCULATION = 1) then begin
delete from IT
where (IT.OPERATIONID = 4) and (IT.UWORDERID = :UWORDERID) and (IT.STATE = -999);
select QUALITY_SELECT.QUALITYNUMBER, QUALITY_SELECT.HUMIDITY,
QUALITY_SELECT.DIRT, QUALITY_SELECT.SCREENING, QUALITY_SELECT.GRAINUNIT
from QUALITY_SELECT(:QUALITYBEFOREID)
into :QUALITYNUMBERBEFORECLEAN, :HUMIDITYBEFORECLEAN, :DIRTBEFORECLEAN, :SCREENINGBEFORECLEAN, :GRAINUNITBEFORECLEAN;
select QUALITY_SELECT.QUALITYNUMBER, QUALITY_SELECT.HUMIDITY,
QUALITY_SELECT.DIRT, QUALITY_SELECT.SCREENING, QUALITY_SELECT.GRAINUNIT
from QUALITY_SELECT(:QUALITYAFTERID)
into :QUALITYNUMBERAFTERCLEAN, :HUMIDITYAFTERCLEAN, :DIRTAFTERCLEAN, :SCREENINGAFTERCLEAN, :GRAINUNITAFTERCLEAN;
if (:METODSOLUTION in (64,164)) then
select sum(WASTEWEIGHT), sum(SCREENINGWEIGHT)
from (
select
case
when (QUALITY.CLASSID = 41) then
IT.NET
end WASTEWEIGHT,
case
when (QUALITY.CLASSID <> 41) then
IT.NET
end SCREENINGWEIGHT
from IT
left join QUALITY on (QUALITY.QUALITYID = IT.LABQUALITYID)
left join CROP on (CROP.CROPID = QUALITY.CROPID)
where ((IT.UWORDERID = :UWORDERID) and (IT.NET > 0))
and ((IT.STATE > -1) and ((IT.OPERATIONID = 5) and (CROP.CROPTYPEID = 3)))
)
into :SETTLEMENTWASTEWEIGHT, :SETTLEMENTSCREENINGWEIGHT;
end
else begin
select QUALITY_SELECT.QUALITYNUMBER
from QUALITY_SELECT(:QUALITYBEFOREID)
into :QUALITYNUMBERBEFORECLEAN;
select QUALITY_SELECT.QUALITYNUMBER
from QUALITY_SELECT(:QUALITYAFTERID)
into :QUALITYNUMBERAFTERCLEAN;
select
cast(cast(100 * sum(cast(NET * DIRT / 100 as integer)) as numeric (15,4)) / sum(NET) as numeric (4,2)),
cast(cast(100 * sum(cast(NET * SCREENING / 100 as integer)) as numeric (15,4)) / sum(NET) as numeric (4,2))
from (
select
sum(IT.NET) NET, IT.REGISTERID REGISTERID, IT.RELATIONID UWORDERID,
min(QUALITY_SELECT.SCREENING) SCREENING, min(QUALITY_SELECT.DIRT) DIRT
from IT
left join INVOICEREGISTERS on (INVOICEREGISTERS.INVOICEREGISTERID = IT.REGISTERID)
left join QUALITY_SELECT(INVOICEREGISTERS.QUALITYID) on (0=0)
left join ITTRANSPORT on (ITTRANSPORT.INVENTORYID = IT.INVENTORYID)
where (IT.RELATIONID = :UWORDERID)
and ((ITTRANSPORT.DIRTWEIGHT > 0) or (ITTRANSPORT.HUMWEIGHT > 0))
and (IT.REGDATE between
(case
when (:METODSOLUTION >= 100) then
(coalesce ((select min(GWP.BEGINDATE)
from GETWORKPARTIES(1, null, :CROPID, :CLASSID, IT.STORAGEID) GWP),:UWORDERDATE))
else :UWORDERDATE
end)
and :UWACTDATE)
and (INVOICEREGISTERS.INVOICEREGISTERID is not null)
and ((IT.OPERATIONID = 1) and (IT.STATE > -1) and (IT.PARENTID <= 0))
group by IT.RELATIONID, IT.REGISTERID
order by IT.REGISTERID
)
group by UWORDERID
into :DIRTAFTERCLEAN, :SCREENINGAFTERCLEAN;
end
for
select
sum(IT.NET) NET, sum(IT.NET) - min(coalesce(ITDRY.NET,0)) WEIGHT,
sum(ITTRANSPORT.DIRTWEIGHT) DIRTWEIGHT, sum(coalesce(ITTRANSPORT.SCREENWEIGHT,0)) SCREENWEIGHT,
min(coalesce(DRYQUALITY.HUMIDITY,RQUALITY.HUMIDITY)) L_HUMIDITY, min(LQUALITY.DIRT) L_DIRT,
min(case
when (CROP.CROPTYPEID <> 5) then
LQUALITY.SCREENING
else LQUALITY.OILSEED
end) L_SCREENING,
min(LQUALITY.GRAINUNIT) L_GRAINUNIT, min(LQUALITY.SMALLGRAIN) L_SMALLGRAIN,
min(coalesce(DRYQUALITY.HUMIDITY,RQUALITY.HUMIDITY)) R_HUMIDITY, min(RQUALITY.DIRT) R_DIRT,
min(RQUALITY.SCREENING) R_SCREENING, min(RQUALITY.GRAINUNIT) R_GRAINUNIT,
min(RQUALITY.SMALLGRAIN) R_SMALLGRAIN,
min(IT.STORAGEID) STORAGEID, min(IT.OWNERID) OWNERID, IT.REGISTERID REGISTERID,
min(LQUALITY.CROPID) CROPID, min(LQUALITY.CLASSID) CLASSID, min(IT.PARTYID) PARTYID,
min(IT.INVOICEID), max(IT.CONTRACTID), min(IT.STORINGID) STORINGID
from IT
left join QUALITY_SELECT(IT.LABQUALITYID) LQUALITY on (0=0)
left join INVOICEREGISTERS on (INVOICEREGISTERS.INVOICEREGISTERID = IT.REGISTERID)
left join QUALITY_SELECT(INVOICEREGISTERS.QUALITYID) RQUALITY on (0=0)
left join ITTRANSPORT on (ITTRANSPORT.INVENTORYID = IT.INVENTORYID)
left join CROP on (CROP.CROPID = :CROPID)
left join IT ITDRY on ((ITDRY.REGISTERID = IT.REGISTERID) and (ITDRY.OPERATIONID = 9) and (ITDRY.STATE = -999))
left join QUALITY_SELECT(ITDRY.OPERATIONPARAM) DRYQUALITY on (0=0)
where (IT.RELATIONID = :UWORDERID)
and ((LQUALITY.DIRT > :DIRTAFTERCLEAN) or ((:SCREENINGAFTERCLEAN > 0) and (LQUALITY.SCREENING > :SCREENINGAFTERCLEAN)))
and (IT.REGDATE between
(case
when (:METODSOLUTION >= 100) then
(coalesce ((select min(GWP.BEGINDATE)
from GETWORKPARTIES(1, null, :CROPID, :CLASSID, IT.STORAGEID) GWP),:UWORDERDATE))
else :UWORDERDATE
end)
and :UWACTDATE)
and (INVOICEREGISTERS.INVOICEREGISTERID is not null)
and ((IT.OPERATIONID = 1) and (IT.STATE > -1) and (IT.PARENTID <= 0))
group by IT.REGISTERID
order by OWNERID, IT.REGISTERID
into :NET, :WEIGHT, :DIRTWEIGHT, :SCREENWEIGHT,
:HUMIDITYBEFORE, :DIRTBEFORE, :SCREENINGBEFORE, :GRAINUNITBEFORE, :SMALLGRAINBEFORE,
:HUMIDITYAFTER, :DIRTAFTER, :SCREENINGAFTER, :GRAINUNITAFTER, :SMALLGRAINAFTER,
:STORAGEID, :OWNERID, :REGISTERID,
:ACROPID, :ACLASSID, :PARTYID, :INVOICE, :CONTRACTID, :STORINGID
do begin
if ((SCREENINGAFTER > SCREENINGBEFORE) or (coalesce(SCREENINGAFTER,0) = 0)) then
SCREENINGAFTER = SCREENINGBEFORE;
if (:FINALCALCULATION = 1) then begin
if (HUMIDITYAFTERCLEAN is not null) then
HUMIDITYAFTER = :HUMIDITYAFTERCLEAN;
if (DIRTAFTERCLEAN is not null) then
DIRTAFTER = :DIRTAFTERCLEAN;
if (SCREENINGAFTERCLEAN is not null) then
SCREENINGAFTER = :SCREENINGAFTERCLEAN;
if (GRAINUNITAFTERCLEAN is not null) then
GRAINUNITAFTER = :GRAINUNITAFTERCLEAN;
end
BEFOREWEIGHT = BEFOREWEIGHT + WEIGHT;
ALLNET = ALLNET + NET;
-- DIRTWEIGHT = round(cast(WEIGHT as numeric(18,4)) * (DIRTBEFORE - DIRTAFTER) / 100);
ALLDIRTWEIGHT = ALLDIRTWEIGHT + DIRTWEIGHT;
if ((SCREENWEIGHT = 0) and (SETTLEMENTSCREENINGWEIGHT > 0)) then
SCREENWEIGHT = DIRTWEIGHT * SETTLEMENTSCREENINGWEIGHT / SETTLEMENTWASTEWEIGHT;
ALLSCREENWEIGHT = ALLSCREENWEIGHT + SCREENWEIGHT;
if (WEIGHT < 6000) then begin
HUMIDITY_BEFORECLEAN = HUMIDITY_BEFORECLEAN + cast(((cast(HUMIDITYBEFORE as numeric(12,1)) * WEIGHT) / 100) as numeric (12,4));
HUMIDITY_AFTERCLEAN = HUMIDITY_AFTERCLEAN + cast(((cast(HUMIDITYAFTER as numeric(12,1)) * WEIGHT) / 100) as numeric (12,4));
end
else begin
HUMIDITY_BEFORECLEAN = HUMIDITY_BEFORECLEAN + cast((cast(HUMIDITYBEFORE as numeric(12,1)) * WEIGHT) / 100 as integer);
HUMIDITY_AFTERCLEAN = HUMIDITY_AFTERCLEAN + cast((cast(HUMIDITYAFTER as numeric(12,1)) * WEIGHT) / 100 as integer);
end
DIRT_BEFORECLEAN = DIRT_BEFORECLEAN + cast((DIRTBEFORE * WEIGHT) / 100 as integer);
DIRT_AFTERCLEAN = DIRT_AFTERCLEAN + cast((DIRTAFTER * WEIGHT) / 100 as integer);
SCREENING_BEFORECLEAN = SCREENING_BEFORECLEAN + cast((SCREENINGBEFORE * WEIGHT) / 100 as integer);
SCREENING_AFTERCLEAN = SCREENING_AFTERCLEAN + cast((SCREENINGAFTER * WEIGHT) / 100 as integer);
if ((:FINALCALCULATION = 1) and (DIRTBEFORE > DIRTAFTER)
and ((not (:METODSOLUTION in (64,164))) or (:SETTLEMENTWASTEWEIGHT is not null))) then begin
select RESULTQUALITYID
from QUALITY_INSERT(null, :ACROPID, :ACLASSID, :SORTID, null, null, :HUMIDITYBEFORE,
null, null, null, :GRAINUNITBEFORE, null, null, :DIRTBEFORE, :SCREENINGBEFORE,
null, :SMALLGRAINBEFORE, null, null, null)
into :BEFORECLEANINGQUALITYID;
select RESULTQUALITYID
from QUALITY_INSERT(null, :ACROPID, :ACLASSID, :SORTID, null, null, :HUMIDITYBEFORE,
null, null, null, :GRAINUNITBEFORE, null, null, :DIRTAFTER, :SCREENINGAFTER,
null, :SMALLGRAINAFTER, null, null, null)
into :AFTERCLEANINGQUALITYID;
insert into IT (STORAGEID, GROSS, TARE, NET,
UWORDERID, LABQUALITYID, SAMPLERQUALITYID, REGDATE, OPERATIONID, WEIGHT, STATE,
OPERATIONPARAM, OWNERID, STORINGID, REGISTERID, PARTYID, INVOICEID, CONTRACTID)
values (:STORAGEID, :WEIGHT, :WEIGHT - :DIRTWEIGHT - :SCREENWEIGHT, :DIRTWEIGHT,
:UWORDERID, :BEFORECLEANINGQUALITYID, :BEFORECLEANINGQUALITYID, :UWACTDATE, 4, :SCREENWEIGHT, -999,
:AFTERCLEANINGQUALITYID, :OWNERID, :STORINGID, :REGISTERID, :PARTYID, :INVOICE, :CONTRACTID);
end
end
if (BEFOREWEIGHT <> 0) then begin
HUMIDITYBEFORECLEAN = cast(cast(HUMIDITY_BEFORECLEAN * 100 as numeric (12,4)) / BEFOREWEIGHT as numeric (4,2));
HUMIDITYAFTERCLEAN = cast(cast(HUMIDITY_AFTERCLEAN * 100 as numeric (12,4)) / BEFOREWEIGHT as numeric (4,2));
DIRTBEFORECLEAN = cast(cast(DIRT_BEFORECLEAN * 100 as numeric (12,4)) / BEFOREWEIGHT as numeric (4,2));
DIRTAFTERCLEAN = cast(cast(DIRT_AFTERCLEAN * 100 as numeric (12,4)) / BEFOREWEIGHT as numeric (4,2));
SCREENINGBEFORECLEAN = cast(cast(SCREENING_BEFORECLEAN * 100 as numeric (12,4)) / BEFOREWEIGHT as numeric (4,2));
SCREENINGAFTERCLEAN = cast(cast(SCREENING_AFTERCLEAN * 100 as numeric (12,4)) / BEFOREWEIGHT as numeric (4,2));
end
else begin
DIRTBEFORECLEAN = null;
DIRTAFTERCLEAN = null;
HUMIDITYBEFORECLEAN = null;
HUMIDITYAFTERCLEAN = null;
SCREENINGBEFORECLEAN = null;
SCREENINGAFTERCLEAN = null;
end
execute procedure QUALITY_UPDATE(0, :QUALITYBEFOREID, :CROPID, :CLASSID, :SORTID, null, :QUALITYNUMBERBEFORECLEAN,
:HUMIDITYBEFORECLEAN, null, null, null, :GRAINUNITBEFORECLEAN, null, null, :DIRTBEFORECLEAN, :SCREENINGBEFORECLEAN,
null, :SMALLGRAINBEFORECLEAN, null, null)
returning_values :QUALITYBEFOREID;
execute procedure QUALITY_UPDATE(0, :QUALITYAFTERID, :CROPID, :CLASSID, :SORTID, null, :QUALITYNUMBERAFTERCLEAN,
:HUMIDITYAFTERCLEAN, null, null, null, :GRAINUNITAFTERCLEAN, null, null, :DIRTAFTERCLEAN, :SCREENINGAFTERCLEAN,
null, :SMALLGRAINAFTERCLEAN, null, null)
returning_values :QUALITYAFTERID;
if ((DIRTBEFORECLEAN > DIRTAFTERCLEAN) and ((not (:METODSOLUTION in (64,164))) or (:SETTLEMENTWASTEWEIGHT is not null))) then
CLEAN = :DIRTBEFORECLEAN - :DIRTAFTERCLEAN;
if (:METODSOLUTION in (64,164)) then begin
-- корректировка отходов по вызенным
if (:FINALCALCULATION = 1) then
select UNDERWORK_CALCULATE_WASTE.ALLDIRTWEIGHT, UNDERWORK_CALCULATE_WASTE.ALLSCREENWEIGHT
from UNDERWORK_CALCULATE_WASTE(:UWORDERID, :UWTYPEID, :METODSOLUTION, :FINALCALCULATION, 0, 0, 0)
into :ALLDIRTWEIGHT, :ALLSCREENWEIGHT;
/*
if ((:FINALCALCULATION = 1) and (:METODSOLUTION in (64,164))) then begin
if (ALLDIRTWEIGHT <> SETTLEMENTWASTEWEIGHT) then begin
ADIRTWEIGHT = SETTLEMENTWASTEWEIGHT;
COEFFICIENT = cast((cast(SETTLEMENTWASTEWEIGHT as numeric (15,8)) / ALLDIRTWEIGHT) as numeric (5,4));
for
select max(IT.INVENTORYID), sum(IT.NET)
from IT
where ((IT.UWORDERID = :UWORDERID) and (IT.NET > 0))
and ((IT.STATE = -999) and (IT.OPERATIONID = 4))
group by IT.OWNERID
into :INVENTORYID, :WEIGHT
do begin
ALLDIRTWEIGHT = ALLDIRTWEIGHT - WEIGHT;
if (ALLDIRTWEIGHT = 0) then
DELTAWEIGHT = ADIRTWEIGHT - WEIGHT;
else DELTAWEIGHT = round(WEIGHT * COEFFICIENT) - WEIGHT;
if (DELTAWEIGHT <> 0) then begin
select IT.NET, IT.TARE, IT.INVOICEID
from IT
where (IT.INVENTORYID = :INVENTORYID)
into :NET, :TARE, :INVOICE;
update IT
set NET = :NET + :DELTAWEIGHT,
TARE = :TARE - :DELTAWEIGHT
where (INVENTORYID = :INVENTORYID);
end
ADIRTWEIGHT = ADIRTWEIGHT - WEIGHT - DELTAWEIGHT;
end
ALLDIRTWEIGHT = SETTLEMENTWASTEWEIGHT;
end
end
*/
WEIGHT = BEFOREWEIGHT;
for
select QUALITY_SELECT.CLASSID, sum(IT.NET),
sum(IT.NET * QUALITY_SELECT.HUMIDITY) / nullif(sum(IT.NET), 0),
sum(IT.NET * QUALITY_SELECT.DIRT) / nullif(sum(IT.NET), 0),
sum(IT.NET * QUALITY_SELECT.SCREENING) / nullif(sum(IT.NET), 0),
sum(IT.NET * QUALITY_SELECT.GRAINUNIT) / nullif(sum(IT.NET), 0),
sum(IT.NET * QUALITY_SELECT.SMALLGRAIN) / nullif(sum(IT.NET), 0)
from IT
left join QUALITY_SELECT(IT.LABQUALITYID) on (0=0)
left join CLASS on (CLASS.CLASSID = QUALITY_SELECT.CLASSID)
left join CROP on (CROP.CROPID = QUALITY_SELECT.CROPID)
where (IT.OPERATIONID in (5,14))
and (IT.REGDATE between
(case
when (:METODSOLUTION >= 100) then
(coalesce ((select min(GWP.BEGINDATE)
from GETWORKPARTIES(1, null, :CROPID, :CLASSID, :STORAGEID) GWP),:UWORDERDATE))
else :UWORDERDATE
end)
and :UWACTDATE)
and ((IT.STATE > -1) and (IT.STORAGEID = :STORAGEID) and (IT.UWORDERID = :UWORDERID))
group by QUALITY_SELECT.CLASSID
into :ACLASSID, :DIRTWEIGHT,
:FORAGEHUMIDITY, :FORAGEDIRT, :FORAGESCREENING, :FORAGEGRAINUNIT, :FORAGESMALLGRAIN
do begin
WEIGHT = WEIGHT - DIRTWEIGHT;
if (:ACLASSID = 39) then begin -- отходы 1 категори А
W_FORAGE1C_A = :DIRTWEIGHT;
select UWACTS.QUALITYID_1C_A
from UWACTS
where (UWACTS.UWORDERID = :UWORDERID)
into :FORAGE_QUALITYID;
end
else
if (:ACLASSID = 68) then begin -- отходы 1 категории Б
W_FORAGE1C_B = :DIRTWEIGHT;
select UWACTS.QUALITYID_1C_B
from UWACTS
where (UWACTS.UWORDERID = :UWORDERID)
into :FORAGE_QUALITYID;
end
else
if (:ACLASSID = 40) then begin -- отходы 2 категории
W_FORAGE2C = :DIRTWEIGHT;
select UWACTS.QUALITYID_2C
from UWACTS
where (UWACTS.UWORDERID = :UWORDERID)
into :FORAGE_QUALITYID;
end
else
if (:ACLASSID = 41) then begin -- отходы 3 категории
W_FORAGE3C = :DIRTWEIGHT;
select UWACTS.QUALITYID_3C
from UWACTS
where (UWACTS.UWORDERID = :UWORDERID)
into :FORAGE_QUALITYID;
end
else
if (:ACLASSID = 106) then begin -- мелкое зерно
W_SMALLGRAIN = :DIRTWEIGHT;
select UWACTS.QUALITYID_SMALLGRAIN
from UWACTS
where (UWACTS.UWORDERID = :UWORDERID)
into :FORAGE_QUALITYID;
end
else
if (:ACLASSID = 107) then begin -- побочн. продукт А
W_BYPRODUCT_A = :DIRTWEIGHT;
select UWACTS.QUALITYID_BY_PRODUCT_A
from UWACTS
where (UWACTS.UWORDERID = :UWORDERID)
into :FORAGE_QUALITYID;
end
else
if (:ACLASSID = 105) then begin -- побочн. продукт Б
W_BYPRODUCT_B = :DIRTWEIGHT;
select UWACTS.QUALITYID_BY_PRODUCT_B
from UWACTS
where (UWACTS.UWORDERID = :UWORDERID)
into :FORAGE_QUALITYID;
end
else
if (:ACLASSID = 999) then begin -- побочн. продукт Д
W_BYPRODUCT_D = :DIRTWEIGHT;
select UWACTS.QUALITYID_BY_PRODUCT_D
from UWACTS
where (UWACTS.UWORDERID = :UWORDERID)
into :FORAGE_QUALITYID;
end
else begin
W_SMALLGRAIN = :DIRTWEIGHT;
select UWACTS.QUALITYID_SMALLGRAIN
from UWACTS
where (UWACTS.UWORDERID = :UWORDERID)
into :FORAGE_QUALITYID;
end
select QUALITY_SELECT.HUMIDITY, QUALITY_SELECT.DIRT, QUALITY_SELECT.SCREENING,
QUALITY_SELECT.GRAINUNIT, QUALITY_SELECT.SMALLGRAIN, QUALITY_SELECT.QUALITYNUMBER
from QUALITY_SELECT(:FORAGE_QUALITYID)
left join CROP on (CROP.CROPID = QUALITY_SELECT.CROPID)
into :HUMIDITYFORAGE, :DIRTFORAGE, :SCREENINGFORAGE,
:GRAINUNITFORAGE, :SMALLGRAINFORAGE, :QUALITYNUMBERFORAGE;
if (:FINALCALCULATION = 1) then begin
if (HUMIDITYFORAGE is not null) then
FORAGEHUMIDITY = :HUMIDITYFORAGE;
if (DIRTFORAGE is not null) then
FORAGEDIRT = :DIRTFORAGE;
if (SCREENINGFORAGE is not null) then
FORAGESCREENING = :SCREENINGFORAGE;
if (GRAINUNITFORAGE is not null) then
FORAGEGRAINUNIT = :GRAINUNITFORAGE;
if (SMALLGRAINFORAGE is not null) then
FORAGESMALLGRAIN = :SMALLGRAINFORAGE;
end
else FORAGEHUMIDITY = HUMIDITYAFTERCLEAN;
execute procedure QUALITY_UPDATE(0, :FORAGE_QUALITYID, :CROPID, :CLASSID, :SORTID, null,
:QUALITYNUMBERFORAGE, :FORAGEHUMIDITY, null, null, null, :FORAGEGRAINUNIT, null, null,
:FORAGEDIRT, :FORAGESCREENING, null, :FORAGESMALLGRAIN, null, null)
returning_values :FORAGE_QUALITYID;
end
end
else begin
end
update UWORDERS
set BEFORECLEANINGWEIGHT = :BEFOREWEIGHT,
PARTYID = :PARTYID
where (UWORDERID = :UWORDERID);
update UWACTS
set WEIGHT = :WEIGHT,
FORAGE1C_A = nullif(:W_FORAGE1C_A,0),
FORAGE1C_B = nullif(:W_FORAGE1C_B,0),
FORAGE2C = coalesce(:W_FORAGE2C,0),
FORAGE3C = coalesce(:W_FORAGE3C,0),
FORAGE_SMALLGRAIN = nullif(:W_SMALLGRAIN,0),
FORAGE_BY_PRODUCT_A = nullif(:W_BYPRODUCT_A,0),
FORAGE_BY_PRODUCT_B = nullif(:W_BYPRODUCT_B,0),
FORAGE_BY_PRODUCT_D = nullif(:W_BYPRODUCT_D,0),
CLEAN = :CLEAN,
AFTERCLEANINGWEIGHT = :WEIGHT
where (UWORDERID = :UWORDERID);
suspend;
end