"localhost:/firebird/data/ILICHEVSK2.FDB". Процедуры Previous topic Chapter index Next topic

ACC_AVALANDINCOMESTAT_CALC

 

Входные параметры

Параметр

Тип

Описание

PARTYID

INTEGER

 

PARTYDATE

DATE

 

CROPGHI

INTEGER

 

CLASSGHI

INTEGER

 

SORTID

INTEGER

 

DATE1

DATE

 

DATE2

DATE

 

 

Выходные параметры

Параметр

Тип

Описание

AVALIABLE

NUMERIC(15,3)

 

INCOME

NUMERIC(15,3)

 

INCOME4

NUMERIC(15,3)

 

INCOME5

NUMERIC(15,3)

 

OUTCOME

NUMERIC(15,3)

 

INCOME_WITH_PARTY

NUMERIC(15,3)

 

 

Описание

Бухгалтерия - Формы 1-зерно (полугодовая и месячная)

 

Определение

CREATE PROCEDURE ACC_AVALANDINCOMESTAT_CALC(
    PARTYID INTEGER,
    PARTYDATE DATE,
    CROPGHI INTEGER,
    CLASSGHI INTEGER,
    SORTID INTEGER,
    DATE1 DATE,
    DATE2 DATE)
RETURNS (
    AVALIABLE NUMERIC(15,3),
    INCOME NUMERIC(15,3),
    INCOME4 NUMERIC(15,3),
    INCOME5 NUMERIC(15,3),
    OUTCOME NUMERIC(15,3),
    INCOME_WITH_PARTY NUMERIC(15,3))
AS
declare variable TEMP numeric(15,3);
declare variable TEMP4 numeric(15,3);
declare variable TEMP5 numeric(15,3);
declare variable OPERATIONSUBTYPE integer;
declare variable TEMPPARTY integer;
declare variable TEMPSTORAGE integer;
declare variable INPARTY integer;
declare variable TEMPCLASS integer;
declare variable TEMPCROP integer;
declare variable ISINPERIOD integer;
begin
  INCOME = 0;
  INCOME4 = 0;
  INCOME5 = 0;
  OUTCOME = 0;
  AVALIABLE = 0;
  INCOME_WITH_PARTY = 0;

  if ((CROPGHI = -1) and (CLASSGHI = -1) and (SORTID = -1)) then begin
    suspend;
    exit;
  end

  for
    select coalesce(sum(abs(IT.WEIGHT)),0),
        sum(case
              when (IT.STORINGID = 1) then
                IT.WEIGHT
            end),
        sum(case
              when (IT.STORINGID = 7) then
                IT.WEIGHT
            end),
        OPERATION.OPERATIONSUBTYPE, IT.PARTYID,
        IT.STORAGEID, QUALITY.CROPID, QUALITY.CLASSID,
        case
          when ((IT.REGDATE >= :DATE1) and ((OPERATION.OPERATIONTYPE <> 4) or (IT.PARTYID = 122)) and (IT.PARTYID <> 121)) then
            1
          else 0
        end ISINPERIOD
      from IT
        left join QUALITY on (QUALITY.QUALITYID = IT.SAMPLERQUALITYID)
        left join CROP on (CROP.CROPID = QUALITY.CROPID)
        left join CLASS on (CLASS.CLASSID = QUALITY.CLASSID)
        left join STORAGE on (STORAGE.STORAGEID = IT.STORAGEID)
        left join OPERATION on (OPERATION.OPERATIONID = IT.OPERATIONID)
        left join INVOICES on (INVOICES.INVOICEID = IT.INVOICEID)
        left join CLIENTS on (CLIENTS.CLIENTID = INVOICES.SENDERID)
      where (IT.REGDATE <= :DATE2) and (IT.PARENTID >= 0) and (IT.STATE >= 0) and (not (IT.OPERATIONID in (9,31)))
        and ((CROP.CROPGHI = :CROPGHI) or ((:CROPGHI < 0) and (CROP.CROPTYPEID = (:CROPGHI * -1))))
        and ((CLASS.CLASSGHI = :CLASSGHI) or (:CLASSGHI = -1))
        and ((((QUALITY.SORTID = :SORTID) or (:SORTID = -1)) and (:SORTID >= -1))
             or (((QUALITY.SORTID <> (:SORTID * -1)) or (QUALITY.SORTID is null))
                  and (:SORTID < -1)))
        and (IT.WEIGHT is not null) and (IT.WEIGHT <> 0) and (CLIENTS.STORAGEID is null)
        and (STORAGE.STORAGETYPEID = 1) and (OPERATION.OPERATIONTYPE <> 6)
    group by OPERATION.OPERATIONSUBTYPE, IT.PARTYID, IT.STORAGEID,
        QUALITY.CROPID, QUALITY.CLASSID, ISINPERIOD
    into :TEMP, :TEMP4, :TEMP5, :OPERATIONSUBTYPE, :TEMPPARTY, :TEMPSTORAGE,
        :TEMPCROP, :TEMPCLASS, :ISINPERIOD
  do begin
    select GETWORKPARTIES.PARTYID
      from GETWORKPARTIES(:PARTYID, :PARTYDATE, :TEMPCROP, :TEMPCLASS, :TEMPSTORAGE)
    into :INPARTY;

    if (:OPERATIONSUBTYPE = 0) then begin
      if (:TEMPPARTY = :INPARTY) then
       INCOME_WITH_PARTY = :INCOME_WITH_PARTY + :TEMP;

      if (:ISINPERIOD = 1) then begin
        INCOME = :INCOME + :TEMP;
        INCOME4 = :INCOME4 + :TEMP4;
        INCOME5 = :INCOME5 + :TEMP5;
      end
    end
    else
      if ((:OPERATIONSUBTYPE = 1) and (:TEMPPARTY = :INPARTY)) then
        OUTCOME = :OUTCOME + :TEMP;
  end

  INCOME_WITH_PARTY = cast(:INCOME_WITH_PARTY as numeric(12,2)) / 1000;
  OUTCOME = cast(:OUTCOME as numeric(12,3)) / 1000;
  AVALIABLE = INCOME_WITH_PARTY - OUTCOME;
  INCOME = cast(:INCOME as numeric(12,3)) / 1000;
  INCOME4 = cast(:INCOME4 as numeric(12,3)) / 1000;
  INCOME5 = cast(:INCOME5 as numeric(12,3)) / 1000;

  suspend;
end

 

     Previous topic Chapter index Next topic