SET TERM ^ ; create or alter procedure PR_GET_CORUPTED_Z_REPORTS returns ( DOC_ID integer, STATUS integer, DEVICE_NUM DM_TEXT, VSHIFT integer, COMMITDATE DM_DATETIME, SUMM1 DM_DOUBLE, SUMM1_Z DM_DOUBLE, SUMM2 DM_DOUBLE, SUMM2_Z DM_DOUBLE, SUMM3 DM_DOUBLE, SUMM3_Z DM_DOUBLE) as declare variable SUMM1_S DM_DOUBLE; declare variable SUMM2_S DM_DOUBLE; declare variable SUMM1_B DM_DOUBLE; declare variable SUMM2_B DM_DOUBLE; declare variable VERB DM_TEXT_BIG; begin --******************************************************************************** --*********** Процедура выводит расхождения по сменам за последний год *********** --******************************************************************************** /*summ1 - наличность (ПРОДАЖИ_НАЛ - ВОЗВРАТЫ_НАЛ + ВНЕСЕНИЯ - ИЗЪЯТИЯ) summ2 - сменный итог (ПРОДАЖИ_ВСЕ_ВИДЫ_ОПЛАТ) summ3 - выручка (ПРОДАЖИ_ВСЕ_ВИДЫ_ОПЛАТ - ВОЗВРАТЫ_ВСЕ_ВИДЫ_ОПЛАТ) summ4 - несгораемая сумма*/ for select id, status, DEVICE_NUM, VSHIFT, d.commitdate, SUMM1, SUMM2, SUMM3 from docs d where doc_type = 13 and d.commitdate> dateadd(YEAR,-1,current_timestamp) into :doc_id, :status, :DEVICE_NUM, :VSHIFT, :COMMITDATE, :SUMM1_Z, :SUMM2_Z, :SUMM3_Z do begin --Собрали продажи по смене select COALESCE(sum(abs(summ1)),0),COALESCE(sum(abs(summ2)),0) from docs d where doc_type =3 and DEVICE_NUM=:DEVICE_NUM and VSHIFT=:VSHIFT and d.commitdate between :COMMITDATE-10 and :COMMITDATE+10 into :summ1_s,:summ2_s; --Собрали возвраты по смене select COALESCE(sum(summ1),0),COALESCE(sum(summ2),0) from docs d where doc_type =9 and DEVICE_NUM=:DEVICE_NUM and VSHIFT=:VSHIFT and d.commitdate between :COMMITDATE-10 and :COMMITDATE+10 into :summ1_b,:summ2_b; --Собрали итоговые суммы summ1 = :summ1_s-summ1_b; summ2 = :summ1_s+:summ2_s; summ3 = :summ2-(:summ1_b+:summ2_b); --Выводим на экран, если есть расхождение больше 1 рубля if (exists(select id from docs d where id = :doc_id and (abs(summ1-:summ1) > 1 or abs(summ2-:summ2) > 1 or abs(summ3-:summ3) > 1))) then suspend; end end^ SET TERM ; ^ /* Следующие операторы GRANT сгенерированы автоматически */ GRANT SELECT ON DOCS TO PROCEDURE PR_GET_CORUPTED_Z_REPORTS; /* Существующие привилегии на эту процедуру */ GRANT EXECUTE ON PROCEDURE PR_GET_CORUPTED_Z_REPORTS TO SYSDBA;