56efa9266c
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
48 lines
5.0 KiB
Markdown
48 lines
5.0 KiB
Markdown
# Обмен M2M с Fancy DEPO на Firebird 2.5
|
||
|
||
Перенос трансферных таблиц и процедур обработки MSSQL-версии (`deploy/depo/fancy-m2m`, Фонтвьель, тексты от
|
||
22.10.2026, `FTV_M2M_PROCESS_OPERATION` — от 24.10.2026) на Firebird 2.5. Логика процедур та же; отличия перечислены в шапке `10_FTV_M2M_PROCS.sql`.
|
||
|
||
| Файл | Что делает |
|
||
|---|---|
|
||
| `00_FTV_M2M_TABLES.sql` | таблицы `FTV_M2M*`, генераторы и триггеры ID, исключение `FTV_M2M_ERROR`, таблица привязок `FTV_M2M_SETTINGS` |
|
||
| `10_FTV_M2M_PROCS.sql` | процедуры: `FTV_M2M_FAIL/GET/DT` (вспомогательные), `PROCESS_WIRING`, `PROCESS_OPERATION`, `UPDATE_HANDBOOK`, `PROCESS_EVENTS`, `PROCESS_CREATE`, `JOB` |
|
||
| `20_FTV_M2M_GRANTS.sql` | права процедурам на таблицы Fancy и логину bj (`:BJ_USER`) на `FTV_M2M_JOB` и таблицы обмена |
|
||
| `test/` | заглушки таблиц Fancy (по схеме MSSQL), прогон всех веток на встроенном Firebird 2.5.9 |
|
||
|
||
Порядок установки: 00 → заполнить `FTV_M2M_SETTINGS` → 10 → 20 (под SYSDBA или владельцем базы).
|
||
|
||
## Проверить и уточнить на базе клиента
|
||
|
||
Процедуры проверены только на заглушках, собранных по схеме Fancy MSSQL. Fancy на MSSQL — перевод
|
||
Firebird-версии (`GEN_ID`, `f_*`, триггер `OD_DOCS_BU v4.59`), поэтому имена таблиц и колонок, скорее всего,
|
||
совпадают. Подтвердить на копии базы клиента:
|
||
|
||
1. **Генераторы ID**: `OD_DOC_ID_GEN`, `OD_DOL_ID_GEN`, `OD_STEPS_ID_GEN`, `OD_FACES_ID_GEN` — есть ли с такими
|
||
именами (`SELECT RDB$GENERATOR_NAME FROM RDB$GENERATORS`).
|
||
2. **`FU_NEXT_DOC_NUM`**: параметры `(CAT_SYS_NAME, D_DATE, DIRECTION, FOR_DOC)`, возвращает `(NUM, NEW_DATE)`;
|
||
выполняемая (`EXECUTE PROCEDURE`), а не селективная.
|
||
3. **`OD_PR_INS_WIRS`**: 31 входной параметр в порядке MSSQL-версии, 4 выходных (`NEW_ID, WIR_LIST, DEB_ID, KRD_ID`).
|
||
4. **`D_CLISER_M2M.DOC_GUID`**: тип колонки. Процедуры пишут GUID строкой `CHAR(36)` в верхнем регистре; если
|
||
в Fancy это `CHAR(16) CHARACTER SET OCTETS` или строка с фигурными скобками — менять сравнение и запись.
|
||
5. **Флаги**: `OD_FACES.LAST_FLAG = 1`, `E_DATE = '9999-01-01'`, `OD_CLIENTS_REC.E_DATE = '9999-01-01'` — те же
|
||
значения в Firebird-версии (не `'T'`/`'F'`).
|
||
6. **Оператор**: под каким логином bj подключается к базе и заведён ли он в `OD_OPERATORS` (`USER_ID` = логин).
|
||
`FU_NEXT_DOC_NUM` берёт `WHOS` и префикс номера из `OD_OPERATORS`/`OD_SETS` по текущему пользователю; триггеры
|
||
Fancy проверяют права оператора (кроме `UPDATE … ID = 0`). В MSSQL-версии это обходилось `execute as SYSDBA`.
|
||
7. **Привязки `FTV_M2M_SETTINGS`** — ID из справочников клиента: `WHOS` (депозитарий), `OPER_USER`, `FILER_CAT`
|
||
(категория `D_FILER`), `D_NUM`/`K_NUM` (балансовые счета 98010 и 98070), `MARKET` (Мосбиржа), `B_TYPE`
|
||
(«Отчёт депозитария» в `DEPO96_DCLA`), `CORR_FACE` (НКО АО НРД), `FILER_RUBRICA`.
|
||
8. **Справочники по имени**: категории `I_CLISER_M2M_ZACH/SPIS`, `OP_INV_ZACH/SPIS`; состояния `WAIT_RESP_DECIS`,
|
||
`WAIT_OPER`; директива `PROCESS`; кодировщики `OD_FACES.MNEM = 'M2M'` и `'НДЦ'`. Таблицы `D_CLISER_M2M`,
|
||
`D_CLISER_M2M_DOL`, `U_OP_INV_ZACH/SPIS` — пользовательские (настройка M2M в Fancy), у клиента их может не быть.
|
||
9. **Кодировка базы**: WIN1251 (`RDB$DATABASE.RDB$CHARACTER_SET_NAME`). Текст ошибки из контекста приводится к
|
||
WIN1251 — при другой кодировке поменять в `FTV_M2M_JOB`.
|
||
10. **Числа состояний** в `PROCESS_EVENTS` (`STATE = 1, 2, 3, 8`) — как у Фонтвьель; сверить с `OD_DOC_STATES`.
|
||
|
||
## Открытые вопросы логики (те же, что в MSSQL-версии)
|
||
|
||
- `BJ_ORDER_REJECTED` не обрабатывается — уходит в «неизвестное событие» (вопрос программисту от 16.10.2026).
|
||
- `BJ_CP_CONFIRM` с направлением OUT перехватывается веткой `BJ_DECISION_CONFIRM` выше.
|
||
- Депонент не найден — поручение создаётся без депонента, ошибки нет.
|