CREATE OR ALTER PROCEDURE GET_DATE_DATA ( DATE_FR DATE, DATE_TO DATE, PROFIT NUMERIC(4,3), RECTYPE NUMERIC(1,0), TAC10 NUMERIC(4,3), TAC18 NUMERIC(4,3))RETURNS ( DATE_IN DATE, DOZES NUMERIC(7,3), SL_ALL NUMERIC(11,2), MANCOST NUMERIC(11,2), EXCISE NUMERIC(11,2), WATER NUMERIC(8,4), RO_SUMM NUMERIC(13,4), FSUM NUMERIC(11,2), CASH NUMERIC(11,2), DIFF NUMERIC(5,4), NO_TAC NUMERIC(11,2), MATERIALS NUMERIC(8,4), EXPENSES NUMERIC(8,2), RENTAB NUMERIC(8,2), RID INTEGER, TAC NUMERIC(11,2), BASE_TAC NUMERIC(2,0), PRICE_NTAC NUMERIC(11,2))AS--DECLARE VARIABLE MF INTEGER;DECLARE VARIABLE DIFF_2 NUMERIC(8,2);DECLARE VARIABLE DIFF_4 NUMERIC(8,4);DECLARE VARIABLE TAC2 NUMERIC(1,0);DECLARE VARIABLE ING_SUMM NUMERIC(13,8);DECLARE VARIABLE AUX2_SUM NUMERIC(11,2);DECLARE VARIABLE TAC_V NUMERIC(17,7);BEGIN IF ( RECTYPE >= 0 ) THEN BEGIN FOR SELECT RECEPT.DATE_IN, RECEPT.DOZES, RECEPT.SL_ALL, RECEPT.MANCOST, RECEPT.EXCISE, RECEPT.WATER_SUM, GET_RECOTHER_SUM.RO_SUMM, RECEPT.FSUM, RECEPT.CASH, RECEPT.TAC2, SUM(REC_INGRID.QUANT*REC_INGRID.PRICE) AS S1, GET_RECOTHER_SUM.AUX2_SUM, RECEPT.RID, RECEPT.PRICE_NTAC FROM RECEPT LEFT JOIN REC_INGRID ON RECEPT.RID = REC_INGRID.RID LEFT JOIN GET_RECOTHER_SUM(:DATE_FR, :DATE_TO) ON RECEPT.RID = GET_RECOTHER_SUM.RID WHERE (RECEPT.DATE_IN BETWEEN :DATE_FR AND :DATE_TO) AND RECEPT.MEDEST 1 AND RTYPE=:RECTYPE GROUP BY RECEPT.DATE_IN, RECEPT.DOZES, RECEPT.SL_ALL, RECEPT.MANCOST, RECEPT.EXCISE, RECEPT.WATER_SUM, GET_RECOTHER_SUM.RO_SUMM, RECEPT.FSUM, RECEPT.CASH, RECEPT.TAC2, GET_RECOTHER_SUM.AUX2_SUM, RECEPT.RID, RECEPT.PRICE_NTAC INTO :DATE_IN, :DOZES, :SL_ALL, :MANCOST, :EXCISE, :WATER, :RO_SUMM, :FSUM, :CASH, :TAC2, :ING_SUMM, :AUX2_SUM, :RID, :PRICE_NTAC DO BEGIN MATERIALS = ( :ING_SUMM - :WATER/:DOZES + :RO_SUMM ) * :DOZES + AUX2_SUM; EXPENSES = :MANCOST + ( RO_SUMM + ING_SUMM ) * :DOZES + AUX2_SUM; RENTAB = EXPENSES * :PROFIT; IF ( :EXCISE IS NULL ) THEN EXCISE = 0; IF ( TAC2 = 1 ) THEN BEGIN NO_TAC = ( (:SL_ALL-:EXCISE)/(100 + :TAC18*100))*100; TAC_V = :NO_TAC * :TAC18; BASE_TAC = :TAC18 * 100; END ELSE BEGIN NO_TAC = ((:SL_ALL-:EXCISE)/(100 + :TAC10*100))*100; TAC_V = :NO_TAC * :TAC10; BASE_TAC = :TAC10 * 100; END DIFF_2 = ROUNDING( :ING_SUMM - :WATER + :RO_SUMM, 2); DIFF_4 = ROUNDING( :ING_SUMM - :WATER + :RO_SUMM, 4); DIFF = ROUNDING( :DIFF_2 - :DIFF_4, 4); TAC = ROUNDING( :TAC_V, 2); SUSPEND; END END ELSE BEGIN FOR SELECT RECEPT.DATE_IN, RECEPT.DOZES, RECEPT.SL_ALL, RECEPT.MANCOST, RECEPT.EXCISE, RECEPT.WATER_SUM, GET_RECOTHER_SUM.RO_SUMM, RECEPT.FSUM, RECEPT.CASH, RECEPT.TAC2, SUM(REC_INGRID.QUANT*REC_INGRID.PRICE) AS S1, GET_RECOTHER_SUM.AUX2_SUM, RECEPT.RID, RECEPT.PRICE_NTAC FROM RECEPT LEFT JOIN REC_INGRID ON RECEPT.RID = REC_INGRID.RID LEFT JOIN GET_RECOTHER_SUM(:DATE_FR, :DATE_TO) ON RECEPT.RID = GET_RECOTHER_SUM.RID WHERE (RECEPT.DATE_IN BETWEEN :DATE_FR AND :DATE_TO) AND RECEPT.MEDEST 1 GROUP BY RECEPT.DATE_IN, RECEPT.DOZES, RECEPT.SL_ALL, RECEPT.MANCOST, RECEPT.EXCISE, RECEPT.WATER_SUM, GET_RECOTHER_SUM.RO_SUMM, RECEPT.FSUM, RECEPT.CASH, RECEPT.TAC2, GET_RECOTHER_SUM.AUX2_SUM, RECEPT.RID, RECEPT.PRICE_NTAC INTO :DATE_IN, :DOZES, :SL_ALL, :MANCOST, :EXCISE, :WATER, :RO_SUMM, :FSUM, :CASH, :TAC2, :ING_SUMM, :AUX2_SUM, :RID, :PRICE_NTAC DO BEGIN MATERIALS = ( :ING_SUMM - :WATER/:DOZES + :RO_SUMM ) * :DOZES + AUX2_SUM; EXPENSES = :MANCOST + ( RO_SUMM + ING_SUMM ) * :DOZES + AUX2_SUM; RENTAB = EXPENSES * :PROFIT; -- НДС 10 ИЛИ 18 IF ( TAC2 = 1 ) THEN BEGIN NO_TAC = ((:SL_ALL-:EXCISE)/(100 + :TAC18*100))*100; TAC_V = :NO_TAC * :TAC18; BASE_TAC = :TAC18 * 100; END ELSE BEGIN NO_TAC = ((:SL_ALL-:EXCISE)/(100 + :TAC10*100))*100; TAC_V = :NO_TAC * :TAC10; BASE_TAC = :TAC18 * 100; END DIFF_2 = ROUNDING( :ING_SUMM - :WATER + :RO_SUMM, 2); DIFF_4 = ROUNDING( :ING_SUMM - :WATER + :RO_SUMM, 4); DIFF = ROUNDING( :DIFF_2 - :DIFF_4, 4); TAC = ROUNDING( :TAC_V, 2); SUSPEND; END ENDEND