CREATE OR ALTER procedure [dbo].[FTV_M2M_PROCESS_WIRING] (@OPER_ID int) --grant execute on FTV_M2M_PROCESS_WIRING to public; as set nocount on; /* --Выполняет директиву "Обраотать" для документа "Зачисление" или "Списание" --Все значения переменных берем только из самого документа, М2М-поручения и трансфертные таблицы тут не используются exec FTV_M2M_PROCESS_WIRING 75069916; */ if user = 'dbo' execute as user = 'SYSDBA'; declare @USER int = 84; declare @DIRECTION varchar(3), @D_CAT int, @SHARE int, @PLACE int, @DEPO int, @AMOUNT numeric(22,7), @COMMENT varchar(255), @B_TYPE int, @B_NUM varchar(255), @B_DATE datetime, @WIR_DATE datetime, @D_NUM int, @K_NUM int, @MARKET int, @NAME varchar(255), @TEXT_B_TYPE varchar(255), @WIR_ID int; declare @D_REG_1 int, @K_REG_1 int, @D_REG_2 int, @K_REG_2 int, @D_REG_3 int, @K_REG_3 int, @D_REG_4 int, @K_REG_4 int, @D_REG_5 int, @K_REG_5 int, @D_REG_6 int, @K_REG_6 int; declare @DIR_ID int, @OUT_STATE int, @STEP_ID int; --НАПРАВЛЕНИЕ if exists (select top 1 DOC from U_OP_INV_ZACH where DOC = @OPER_ID) set @DIRECTION = 'IN'; else if exists(select top 1 DOC from U_OP_INV_SPIS where DOC = @OPER_ID) set @DIRECTION = 'OUT'; else begin print 'Не найден документ ID = ' + trim(str(@OPER_ID)); return; --TODO исключительная ситуация end; --ПРОВЕРКИ, ЧТО ДОКУМЕНТ МОЖНО ПРОВОДИТЬ --Состояние документа --Связь с M2M --TODO --ЗНАЧЕНИЯ ПЕРЕМЕННЫХ if @DIRECTION = 'IN' begin --Смотрим шапку операции select @D_CAT = D.D_CAT, @D_NUM = H.D_NUM, @K_NUM = H.K_NUM, @B_TYPE = H.B_TYPE, @B_NUM = H.B_NUM, @B_DATE = H.B_DATE, @SHARE = H.SHARE, @AMOUNT = H.AMOUNT, @PLACE = H.PLACE, @DEPO = H.DEPO, @MARKET = H.MARKET, @WIR_DATE = H.WIR_DATE, @NAME = 'Зачисление' from OD_DOCS D left join U_OP_INV_ZACH H ON H.DOC = D.ID where D.ID = @OPER_ID; --D_REG select @D_REG_1 = C.SELF_ID, @D_REG_2 = C.FACE, @D_REG_3 = 0, @D_REG_4 = 0, @D_REG_5 = 0, @D_REG_6 = @PLACE from OD_CLIENTS C where C.ID = @PLACE; --K_REG select @K_REG_1 = C.SELF_ID, @K_REG_2 = @MARKET, @K_REG_3 = 0, @K_REG_4 = @D_REG_1, @K_REG_5 = @PLACE, @K_REG_6 = @DEPO from OD_CLIENTS C where C.ID = @DEPO; end else if @DIRECTION = 'OUT' begin --Смотрим шапку операции select @D_CAT = D.D_CAT, @D_NUM = H.K_NUM, --реверс @K_NUM = H.D_NUM, --реверс @B_TYPE = H.B_TYPE, @B_NUM = H.B_NUM, @B_DATE = H.B_DATE, @SHARE = H.SHARE, @AMOUNT = H.AMOUNT, @PLACE = H.PLACE, @DEPO = H.DEPO, @MARKET = H.MARKET, @WIR_DATE = H.WIR_DATE, @NAME = 'Списание' from OD_DOCS D left join U_OP_INV_SPIS H ON H.DOC = D.ID where D.ID = @OPER_ID; --K_REG select @K_REG_1 = C.SELF_ID, @K_REG_2 = C.FACE, @K_REG_3 = 0, @K_REG_4 = 0, @K_REG_5 = 0, @K_REG_6 = @PLACE from OD_CLIENTS C where C.ID = @PLACE; --D_REG select @D_REG_1 = C.SELF_ID, @D_REG_2 = @MARKET, @D_REG_3 = 0, @D_REG_4 = @K_REG_1, @D_REG_5 = @PLACE, @D_REG_6 = @DEPO from OD_CLIENTS C where C.ID = @DEPO; end; --ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ select @TEXT_B_TYPE = NAME from OD_SYS_TABS where CODE = 'DEPO96_DCLA' and NUM = @B_TYPE; set @COMMENT = FORMATMESSAGE('%s; %s N%s от %s', @COMMENT, @TEXT_B_TYPE, @B_NUM, convert(varchar, @B_DATE, 104)); --ДИРЕКТИВА select @DIR_ID = ID, @OUT_STATE = OUT_STATE from OD_STEP_TYPES where SYS_NAME = 'PROCESS' and D_CAT = @D_CAT; exec GEN_ID 'OD_STEPS_ID_GEN', 1, @STEP_ID out; insert into OD_STEPS (ID, DOC, S_TYPE, S_DATE, ERR_CODE, OUT_STATE, OPER) values (@STEP_ID, @OPER_ID, @DIR_ID, GETDATE(), 0, @OUT_STATE, @USER); --update OD_STEPS set OPER = @USER where ID = @STEP_ID; может и не пригодится --ПРОВОДКА exec OD_PR_INS_WIRS null, 4, @WIR_DATE, @NAME, @COMMENT, @AMOUNT, @AMOUNT, null, 0, 0, null, @STEP_ID, null, @USER, 'F', @D_NUM, @SHARE, @D_REG_1, @D_REG_2, @D_REG_3, @D_REG_4, @D_REG_5, @D_REG_6, --дебет @K_NUM, @SHARE, @K_REG_1, @K_REG_2, @K_REG_3, @K_REG_4, @K_REG_5, @K_REG_6, --кредит @WIR_ID out, null, null, null; --return --СОСТОЯНИЕ ДОКУМЕНТА update OD_DOCS set STATE = @OUT_STATE where ID = @OPER_ID; --select @WIR_ID; --select * from OD_WIRING where ID = @WIR_ID;