DEPO: основание операции M2M — номер и дата отчёта НРД (правка программиста 24.10 с боя)

FTV_M2M_PROCESS_OPERATION: B_NUM/B_DATE операции зачисления/списания берутся из PARAMETERS
события BJ_ORDER_ACCEPTED («<номер> от <дд.мм.гггг>», отчёт НРД), а не из M2M-поручения;
комментарий операции без «Отчет НКО АО НРД …». Текст снят с тестовой DEPO (там та же правка
24.10 00:04, на боевой — 24.10 00:02; логину bj текст на боевой не виден). Без переноса
повторная установка процедур из bj вернула бы старый текст.

Firebird-версия — та же правка; прогон на заглушках: изменилось только основание и комментарий.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-26 15:34:16 +03:00
parent 3a3bfa82af
commit 56efa9266c
7 changed files with 42 additions and 25 deletions
@@ -1,5 +1,5 @@
/* Bridge&Join — процедуры обработки M2M для Fancy DEPO на Firebird 2.5.
Перенос процедур MSSQL-версии (Фонтвьель, тексты от 22.10.2026) на PSQL. Логика та же; отличия:
Перенос процедур MSSQL-версии (Фонтвьель, тексты от 22.10.2026, OPERATION — от 24.10.2026) на PSQL. Логика та же; отличия:
- raiserror → FTV_M2M_FAIL: текст причины кладётся в контекст транзакции и поднимается исключение FTV_M2M_ERROR;
FTV_M2M_JOB пишет этот текст в COMMENT (в Firebird 2.5 текст исключения в WHEN не доступен; контекст
возвращает строку без кодировки — приводится к WIN1251, кодировке базы Fancy);
@@ -207,38 +207,41 @@ BEGIN
INSERT INTO OD_DOCS (ID, NUM, PARAM, D_CAT, D_DATE, STATE, DIRECTION, WHOS, KVIT)
VALUES (:OPER_ID, :NUM, NULL, :D_CAT, :OPER_DATE, 0, 0, :WHOS, :CLISER_ID);
/* Отчёт НРД из PARAMETERS — «<номер отчёта> от <дд.мм.гггг>»: номер — до первого пробела, дата — после
последнего. Основание операции (B_NUM, B_DATE) и входящая запись — по отчёту НРД, а не по M2M-поручению
(MSSQL-версия, правка программиста 24.10.2026). */
P = TRIM(PARAMETERS);
REP_NUM = LEFT(P, POSITION(' ' IN P || ' ') - 1);
REP_DATE = CAST(RIGHT(P, POSITION(' ' IN REVERSE(P)) - 1) AS DATE);
IF (DIRECTION = 'IN') THEN
BEGIN
CMT = 'Отчет НКО АО НРД ' || COALESCE(PARAMETERS, '') || '. Перевод M2M (без поручения), GUID ' || GUID || ', референс ' || REFERENCE;
CMT = 'Перевод M2M (без поручения), GUID ' || GUID || ', референс ' || REFERENCE;
INSERT INTO U_OP_INV_ZACH
(DOC, DD_TYPE, DD_DATE, DD_NUM, SHARE, AMOUNT, BLANKS, PLACE, D_NUM, DEPO, K_NUM, MARKET,
CONDITION, IS_REG, TAX_R, B_TYPE, B_DATE, B_NUM, WIR_DATE, NOTIFY_DATE, REG_DATE, IS_BLOCK, FROM_FACE, REJECT_REASON, "COMMENT")
VALUES
(:OPER_ID, 1 /* клиентское */, :DD_DATE, :DD_NUM, :SHARE, :AMOUNT, NULL, :PLACE, :ACC_D, :CLIENT, :ACC_K, :MARKET,
NULL, NULL, NULL, :B_TYPE, :CLISER_DATE, :CLISER_NUM, :OPER_DATE, :OPER_DATE, :OPER_DATE, 0, :FACE, NULL, :CMT);
NULL, NULL, NULL, :B_TYPE, :REP_DATE, :REP_NUM, :OPER_DATE, :OPER_DATE, :OPER_DATE, 0, :FACE, NULL, :CMT);
END
ELSE IF (DIRECTION = 'OUT') THEN
BEGIN
CMT = 'Отчет НКО АО НРД ' || COALESCE(PARAMETERS, '') || '. Перевод M2M, GUID ' || GUID || ', референс ' || REFERENCE;
CMT = 'Перевод M2M, GUID ' || GUID || ', референс ' || REFERENCE;
INSERT INTO U_OP_INV_SPIS
(DOC, DD_TYPE, DD_DATE, DD_NUM, SHARE, AMOUNT, BLANKS, PLACE, D_NUM, DEPO, K_NUM, MARKET,
OLD_CONDITIONS, IS_REG, TAX_R, B_TYPE, B_DATE, B_NUM, WIR_DATE, NOTIFY_DATE, REG_DATE, IS_BLOCK, FROM_FACE, REJECT_REASON, "COMMENT")
VALUES
(:OPER_ID, 1 /* клиентское */, :DD_DATE, :DD_NUM, :SHARE, :AMOUNT, NULL, :PLACE, :ACC_D, :CLIENT, :ACC_K, :MARKET,
NULL, NULL, NULL, :B_TYPE, :CLISER_DATE, :CLISER_NUM, :OPER_DATE, :OPER_DATE, :OPER_DATE, 0, :FACE, NULL, :CMT);
NULL, NULL, NULL, :B_TYPE, :REP_DATE, :REP_NUM, :OPER_DATE, :OPER_DATE, :OPER_DATE, 0, :FACE, NULL, :CMT);
END
/* Входящая запись (отчёт НРД). PARAMETERS — «<номер отчёта> от <дд.мм.гггг>»: номер — до первого пробела,
дата — после последнего. */
/* Входящая запись (отчёт НРД) */
FILER_ID = GEN_ID(OD_DOC_ID_GEN, 1);
FILER_DATE = CURRENT_TIMESTAMP;
EXECUTE PROCEDURE FU_NEXT_DOC_NUM ('D_FILER', :FILER_DATE, 1, :FILER_ID) RETURNING_VALUES :FILER_NUM, :NEW_DATE;
INSERT INTO OD_DOCS (ID, NUM, D_CAT, D_DATE, STATE, DIRECTION, WHOS)
VALUES (:FILER_ID, :FILER_NUM, :FILER_CAT, :FILER_DATE, 2, 1, :WHOS);
P = TRIM(PARAMETERS);
REP_NUM = LEFT(P, POSITION(' ' IN P || ' ') - 1);
REP_DATE = CAST(RIGHT(P, POSITION(' ' IN REVERSE(P)) - 1) AS DATE);
INSERT INTO D_FILER (DOC, PASS_KIND, RUBRICA, "COMMENT", DOC_NUM, DOC_DATE, CORR_FACE, FUND, ACCOUNT, PLACE, ORI_DATE, CHILD_CAT, MESS)
VALUES (:FILER_ID, 8, :RUBRICA, 'Отчет (перевод через MOEX-МОСТ)', :REP_NUM, :REP_DATE, :CORR_FACE,
:FACE, :CLIENT, :PLACE, :FILER_DATE, NULL, 'MS010 / ' || :GUID || ' / ' || :REFERENCE);