Execute ibeblock as begin stmt = ' alter procedure update Dost Cena ( I data date, I pos Nomer double precision, I ignore Config smallint) as declare variable data date; declare variable pos Nomer double precision



Дата24.03.2017
Размер19.63 Kb.
execute ibeblock as begin STMT = ' ALTER PROCEDURE Update_Dost_Cena ( I_Data DATE, I_Pos_Nomer DOUBLE PRECISION, I_Ignore_Config SMALLINT) AS DECLARE VARIABLE Data DATE; DECLARE VARIABLE Pos_Nomer DOUBLE PRECISION; DECLARE VARIABLE Dost_Kol DOUBLE PRECISION; DECLARE VARIABLE Dost_Cena DOUBLE PRECISION; DECLARE VARIABLE Stara_Cena DOUBLE PRECISION; DECLARE VARIABLE Nova_Cena DOUBLE PRECISION; DECLARE VARIABLE Nal_Kol DOUBLE PRECISION; DECLARE VARIABLE Greshki VARCHAR(100); DECLARE VARIABLE Pred_Data DATE; DECLARE VARIABLE Beznal SMALLINT; DECLARE VARIABLE N_Prod_Kol DOUBLE PRECISION; DECLARE VARIABLE N_Dost_Kol DOUBLE PRECISION; DECLARE VARIABLE N_Vatr_Kol DOUBLE PRECISION; DECLARE VARIABLE Autoupdate_Sred_Dost_Cena SMALLINT; DECLARE VARIABLE L_Nul_Kol VARCHAR(100); DECLARE VARIABLE L_Otr_Kol VARCHAR(80); DECLARE VARIABLE L_Nul_Znamenatel VARCHAR(50); DECLARE VARIABLE L_Dost_Kol VARCHAR(30); DECLARE VARIABLE L_Vnimanie_Kam VARCHAR(30); DECLARE VARIABLE L_Sr_Dost_Cena VARCHAR(50); DECLARE VARIABLE L_Otr_Dost_Kol VARCHAR(80); DECLARE VARIABLE Razhodi DOUBLE PRECISION; DECLARE VARIABLE Stara_Cena_S_Razhodi DOUBLE PRECISION; DECLARE VARIABLE Nova_Cena_S_Razhodi DOUBLE PRECISION; BEGIN -- greshki --''��������: ������ ��������� ���������� �� ��� � 0! ��������� � �������� ���������� �������� ����!'' select sgm.localized_text from sys$get_message(33) sgm into :L_NUL_KOL; -- ''��������: ����������� ������� ���������� ���'' select sgm.localized_text from sys$get_message(34) sgm into :L_OTR_KOL; --''��������: ����� ���������� (���.���. ���'' select sgm.localized_text from sys$get_message(35) sgm into :L_NUL_ZNAMENATEL; --''+ ����.���. �� ���=0)!'' select sgm.localized_text from sys$get_message(36) sgm into :L_DOST_KOL; --''��������: ���'' select sgm.localized_text from sys$get_message(37) sgm into :L_VNIMANIE_KAM; --'' ��� ���. ���., �� ��� ������ �������� ����!'' select sgm.localized_text from sys$get_message(38) sgm into :L_SR_DOST_CENA; --''��������: ����������� ��������� ���������� ���'' select sgm.localized_text from sys$get_message(39) sgm into :l_otr_dost_kol; if ((i_ignore_config is null) or (i_ignore_config=0)) then begin select AUTOUPDATE_SRED_DOST_CENA from config into :AUTOUPDATE_SRED_DOST_CENA; if (AUTOUPDATE_SRED_DOST_CENA=0) then exit; -- 1 �������� end -- 0 �� �������� ���������� ���� beznal = null; select beznalichen from pozicii where nomer = :I_POS_NOMER into :beznal; if (beznal = 1) then Exit; -- �� ���������� �� �� �������� ������ ����. ���� delete from dost_ceni where (data>=:I_data) and (pos_nomer=:i_pos_nomer); FOR select d.data, dd.pos_nomer, sum(dd.kol), sum(dd.stoinost_bez_dds), sum(dd.kol * dd.RAZHOD_ZA_EDINICA_KOL) -- B.Belchev 01.08.2008 ������� �� ��������� from dostavki_de dd join dostavki d on d.nomer=dd.dostavka_nomer where (d.data=:i_data) and (dd.pos_nomer=:i_pos_nomer) group by d.data, dd.pos_nomer into :data, :POS_NOMER, :dost_kol, :dost_cena, :razhodi DO begin greshki=null; pred_data=data-1; dost_kol=coalesce(dost_kol, 0); dost_cena=coalesce(dost_cena, 0); razhodi = coalesce(razhodi, 0); -- B.Belchev 01.08.2008 ������� �� ��������� -- ���� �� ���� ��������� if (:dost_kol=0) then begin -- ��� ��������� ���������� �� ��� � 0 �� ���� �� �� ������ ������ ������������� �������� ���� �� ��� -- ������ �� �������� ����� ����������. ��� ������ ������� �� ����� �������� ���������� �������� ���� �� ��� select first 1 dd.ed_cena, dd.RAZHOD_ZA_EDINICA_KOL -- B.Belchev 01.08.2008 ������� �� ��������� from dostavki d join dostavki_De dd on dd.dostavka_nomer=d.nomer where d.data=:data and dd.pos_nomer=:POS_NOMER order by d.nomer desc into :dost_cena, :razhodi; --greshki=''��������: ������ ��������� ���������� �� ��� � 0! ��������� � �������� ���������� �������� ����!''; greshki=:L_NUL_KOL; end else begin dost_cena=:dost_cena/:dost_kol; razhodi = :razhodi/:dost_kol; -- B.Belchev 01.08.2008 ������� �� ��������� end stara_cena=null; select first 1 dost_cena, DOST_CENA_S_RAZHOD from dost_ceni -- B.Belchev 01.08.2008 ������� �� ��������� where pos_nomer = :pos_nomer and data<= :data order by data desc into :STARA_CENA, :STARA_CENA_S_RAZHODI; -- B.Belchev 01.08.2008 ������� �� ��������� /* select gn.nal_kol from getnalich_art(:pred_data,:POS_NOMER,null) gn into :nal_kol; -- ������ ������: � ��������� ���������� ��� ������ ��� (����� ���. ���.) ����� � ����������� ���������� �� ����������. ���� �� ���� �� � ����. ����� �� �� ������� ���� ������� ���������, ���� �� �� ���� ��� ����������� �� ���������� �� � ������ ��������, ���� � ���� ����� �� ����� �� ����������. ���� �� ������, ������ ���� ���������� �������� ������� �������� �������� ����. ��������� �� ����� �� ���������� �� � �������� �������� � �� ���� �� ���� �� ���������� ����. ��������� �� ��������� ����� �� � = ��������� - ��������� - ����. ���. ��. ���� � ��������� � ��������� �� �� ����� ���, �.�. ��� �������� ����� �� ���������� ��� ��. */ nal_kol=null; select ( select sum(pd.kol) from prodazbi_de pd left join prodazbi p on p.nomer=pd.prodazba_nomer where p.data<=:pred_data and pd.pos_nomer=po.nomer and p.anuliran=0 and p.status_prodazba is null) prod_kol, ( select sum(dd.kol) from dostavki_de dd left join dostavki d on d.nomer=dd.dostavka_nomer where d.data<=:pred_data and dd.pos_nomer=po.nomer and d.status_dostavka is null) dost_kol, ( select sum(vd.kol) from vatr_sklad_de vd left join vatr_sklad v on v.nomer=vd.vatr_sklad_nomer where v.data<=:pred_data and vd.pos_nomer=po.nomer and v.STATUS_VATR_SKLAD is null) vatr_kol from pozicii po where po.beznalichen=0 and po.nomer=:pos_nomer INTO :n_prod_kol, :n_dost_kol, :n_vatr_kol; nal_kol=coalesce(n_dost_kol,0)-coalesce(n_prod_kol,0)-coalesce(n_vatr_kol,0); if ( ((nal_kol<0) or (Dost_Kol<0) or (:nal_kol+:dost_kol)=0) or ((:nal_kol<>0) and (:stara_cena is null)) ) then begin stara_cena=coalesce(stara_Cena, 0); STARA_CENA_S_RAZHODI=coalesce(STARA_CENA_S_RAZHODI, 0);-- B.Belchev 01.08.2008 ������� �� ��������� nova_cena=dost_cena; NOVA_CENA_S_RAZHODI = :NOVA_CENA + :RAZHODI; -- B.Belchev 01.08.2008 ������� �� ��������� if (nal_kol<0) then --greshki=''��������: ����������� ������� ���������� ��� ''||:pred_data||''!''; greshki=:L_OTR_KOL||'' ''||:pred_data||''!''; else if (nal_kol+dost_kol=0) then --greshki=''��������: ����� ���������� (���.���. ��� ''||:pred_data||'' + ����.���. �� ���=0)!''; greshki=:L_NUL_ZNAMENATEL||'' ''||:pred_data||'' ''||:L_DOST_KOL; else if ((:nal_kol<>0) and (:stara_cena is null)) then --greshki=''��������: ��� ''||:pred_data||'' ��� ���. ���., �� ��� ������ �������� ����!''; greshki=:L_VNIMANIE_KAM||'' ''||:pred_data||'' ''||:L_SR_DOST_CENA; if (Dost_Kol<0) then -- �������� �� � ������ ����. ��� �� � <0, � ����.���+�����.��� �� � >0! --greshki=''��������: ����������� ��������� ���������� ��� ''||:pred_data||''!''; greshki=:l_otr_dost_kol||'' ''||:pred_data||''!''; end else begin stara_cena=coalesce(stara_Cena, 0); STARA_CENA_S_RAZHODI=coalesce(STARA_CENA_S_RAZHODI, 0);-- B.Belchev 01.08.2008 ������� �� ��������� nova_cena=(:nal_kol*:stara_cena+:dost_kol*:dost_cena)/(:nal_kol+:dost_kol); -- NOVA_CENA_S_RAZHODI = :NOVA_CENA + :RAZHODI; -- B.Belchev 01.08.2008 ������� �� ��������� NOVA_CENA_S_RAZHODI = (:nal_kol*:STARA_CENA_S_RAZHODI+:dost_kol*(:dost_cena + :RAZHODI))/(:nal_kol+:dost_kol); -- B.Belchev 07.07.2009 ������� �� ��������� - ������� end insert into dost_ceni (data, pos_nomer, dost_cena, staro_nal_kol, stara_dost_cena, obshto_dost_kol, sredna_dost_cena, greshki, DOST_CENA_S_RAZHOD, STARA_DOST_CENA_S_RAZHOD, SREDNA_DOST_CENA_S_RAZHOD) values (:data, :pos_nomer, :nova_cena, :nal_kol, :stara_cena, :dost_kol, :dost_cena, :greshki, :NOVA_CENA_S_RAZHODI, :STARA_CENA_S_RAZHODI, :NOVA_CENA_S_RAZHODI); -- B.Belchev 01.08.2008 ������� �� ��������� end END '; EXECUTE STATEMENT STMT; commit; end

Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©obuch.info 2019
отнасят до администрацията

    Начална страница