b2f8652381
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
173 lines
4.6 KiB
Transact-SQL
173 lines
4.6 KiB
Transact-SQL
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;
|