Files
Bridge-and-Join-s/deploy/depo/fancy-m2m/README.md
fontvielle 56efa9266c 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
2026-10-26 15:34:16 +03:00

45 lines
6.3 KiB
Markdown

# Расширение Fancy DEPO для M2M (bj2depo) — процедуры Фонтвьель
Код написан программистом Фонтвьель (В. Кокин) как собственное дополнение к Fancy DEPO — код Fancy не меняется,
это штатная для Fancy практика. Сняты из базы SQL002/BJ_DEPO_DATA (тестовая DEPO, 10.10.10.21) 22.10.2026 (`sys.sql_modules`) — с правками программиста 09–21.10; код без изменений, только `CREATE` → `CREATE OR ALTER` (примеры для теста — в комментариях `/* */` автора).
## Что делает
- `FTV_M2M_JOB` — точка входа джобы SQL Agent (bj ставит её как `bj2depo`, раз в N секунд; режим «bj» — bj вызывает сам):
берёт `FTV_M2M` со `STATE='TODO'` → `FTV_M2M_PROCESS_CREATE`; затем `FTV_M2M_EVENTS` со `STATE='TODO'` → `FTV_M2M_PROCESS_EVENTS`;
результат — `STATE` (SUCCESS/ERROR), `TimeBeg/TimeEnd`, `COMMENT` (текст ошибки // место // код).
- `FTV_M2M_PROCESS_CREATE @ID` — создаёт M2M-поручение DEPO (`OD_DOCS`, `OD_DOLS`, `D_CLISER_M2M`, `D_CLISER_M2M_DOL`, `OD_IN_DOCS/OD_OUT_DOCS`, `D_FILER`),
ищет клиента по паспорту (`OD_FACES`, `OD_CLIENTS`), наш счёт в НРД по `LINK_NUMBER`/`PLACE_NUMBER` (`OD_CLIENTS_REC`), пишет номера в `FTV_M2M.DOC`, `FTV_M2M_LINES.DOL`.
- `FTV_M2M_PROCESS_EVENTS @ID` — событие по строке (GUID+REFERENCE): решения, поручения, исполнение → операции зачисления/списания
(`U_OP_INV_ZACH`, `U_OP_INV_SPIS`) через `FTV_M2M_PROCESS_OPERATION` и проводки через `FTV_M2M_PROCESS_WIRING` (`OD_PR_INS_WIRS`, `OD_STEPS`).
- `FTV_M2M_PROCESS_OPERATION`, `FTV_M2M_PROCESS_WIRING` — служебные.
- `FTV_M2M_UPDATE_HANDBOOK @COMMENT out` — справочник участников M2M (`FTV_M2M_HANDBOOK`, его пишет bj) → юрлица и кодеры Fancy (`OD_FACES`, `OD_FACE_CODERS`, кодер `MNEM='M2M'`); вызывается из EVENTS по событию HANDBOOK.
- 22.10.2026: в OPERATION счёт ностро `313` (98010 — ведущий депозитарий, «НОСТРО депо базовый») вместо прежнего `314`.
- 24.10.2026 (правка программиста на боевой и тестовой DEPO, перенесена сюда 26.10): в OPERATION основание операции
«Отчёт депозитария» (`B_NUM`, `B_DATE` в `U_OP_INV_ZACH/SPIS`) — номер и дата отчёта НРД из `@PARAMETERS`
(«<номер> от <дд.мм.гггг>», событие `BJ_ORDER_ACCEPTED`), а не номер и дата M2M-поручения; комментарий операции —
без «Отчет НКО АО НРД <номер> от <дата>.». Без даты в `@PARAMETERS` операция не создаётся (ошибка преобразования
даты) — как и раньше во входящей записи `D_FILER`.
## От чего зависит на стороне Fancy (должно быть в DEPO клиента)
Таблицы поставки Fancy с поддержкой M2M (у Фонтвьель появились 25.08.2026): `D_CLISER_M2M`, `D_CLISER_M2M_DOL`, `OD_M2M_ACCS`,
`OD_ONLINE_M2M_DEPO` (+ триггер `OD_ONLINE_M2M_DEPO_II`); функции ядра `FU_NEXT_DOC_NUM`, `GEN_ID`, процедура `OD_PR_INS_WIRS`;
типы документов/шагов `OD_DOC_CATS`, `OD_STEP_TYPES`, `OD_SYS_TABS`. Наши трансферные таблицы `FTV_M2M*` создаёт bj («Трансферные таблицы DEPO»).
## Что привязано к базе Фонтвьель (параметризовать перед установкой у другого клиента)
| Где | Значение | Смысл | Как получить в чужой базе |
|---|---|---|---|
| CREATE/EVENTS/OPERATION | `@WHOS int = 383118` | ID лица депозитария (ООО «ИК Фонтвьель») — «кто» в документах | `SELECT FACE FROM OD_FACE_CODERS WHERE CODE = <код участника НРД>` (bj знает код: «Определить из DEPO») |
| EVENTS/OPERATION | `8106` | место/рынок «ММВБ — ПАО Московская Биржа» в операции | справочник мест DEPO клиента |
| EVENTS/OPERATION | `836` | тип счёта/валюта (комментарий «НОСТРО депо расчётный») | справочник DEPO клиента |
| EVENTS/OPERATION | `31` | тип документа «Отчёт депозитария» | `OD_DOC_CATS` клиента |
| все | `execute as user = 'SYSDBA'` | контекст выполнения | учётка SYSDBA есть в любой Fancy |
Предложение автору: вынести эти значения в таблицу `FTV_M2M_SETTINGS` (или вычислять по коду участника) — тогда набор ставится у любого клиента без правок.
## Порядок установки у клиента
1. bj → «Обмен Fancy → Подключение» (логин bj_user: datareader+datawriter на FTV_M2M*).
2. bj → «Трансферные таблицы DEPO»: создать (логином с правами) или скрипт DBA.
3. Этот каталог: выполнить 6 файлов в порядке WIRING → OPERATION → UPDATE_HANDBOOK → EVENTS → CREATE → JOB (CREATE OR ALTER, повторно безопасно). `FTV_M2M_PROCESS_EVENTS` вызывает `FTV_M2M_UPDATE_HANDBOOK` (событие HANDBOOK — справочник участников в юрлица Fancy).
Права: `GRANT EXECUTE ON dbo.FTV_M2M_JOB TO bj_user` (для режима «bj»).
4. bj → «Обработка DEPO»: режим `sql-auto` (bj создаёт джобу `bj2depo`: `EXEC dbo.FTV_M2M_JOB`, интервал по настройке) или `sql-manual`.
5. bj → «Проверить готовность»: событие `BJ_PING` должно получить STATE от джобы.