Расширение Fancy DEPO для M2M (процедуры Фонтвьель, снято 23.09): тексты, зависимости, параметры для установки у другого клиента

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
This commit is contained in:
zuevav
2026-09-23 16:48:25 +03:00
parent cb67875f7b
commit b2f8652381
6 changed files with 910 additions and 0 deletions
@@ -0,0 +1,172 @@
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;