Files
Bridge-and-Join-s/deploy/depo/fancy-m2m/FTV_M2M_PROCESS_WIRING.sql
T

173 lines
4.6 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
CREATE OR ALTER procedure [dbo].[FTV_M2M_PROCESS_WIRING] (@OPER_ID int)
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;