DEPO на Firebird в мастере: подготовка базы одним действием, как для MSSQL
Мастер, шаг «Учёт DEPO», и «Обмен с DEPO» в настройках: СУБД «Firebird» (Fancy на Firebird 2.5). - Подключение: драйвер nakagami/firebirdsql, путь к файлу базы или псевдоним, WIN1251. Запросы bj к DEPO (T-SQL) подключение переводит само (fancyfb.go): механически (dbo., TOP, ISNULL, GETDATE, LEN, N, exec) вне строк и комментариев, точные тексты — fsql/fb.go (каталоги, LIKE [_], COUNT(*) OVER, SELECT без FROM, PATINDEX); @имена — позиционные ?, GUID — в верхнем регистре. Системные запросы из кода — в fsql/depocatalog.go. - «Подготовить» логином SYSDBA (depo_setup_fb.go): проверка базы и UDF Fancy, логин SYSDBA_BJ (Fancy даёт права на документы логинам SYSDBA%; для Firebird — обычный пользователь), оператор-робот Fancy, кодировщик M2M, привязки FTV_M2M_SETTINGS по признакам Fancy, таблицы, процедуры, права; обработку запускает bj. «Получить скрипт» — то же для isql в WIN1251; письмо администратору, установка процедур, плашка обновления. - Скрипты Firebird встроены (depoprocs/firebird, тест сверяет с deploy/); количества — DOUBLE PRECISION: из диалекта 3 в базу диалекта 1 процедуру с NUMERIC(18,7) не создать. - Проверено на копии базы Fancy (отдельный экземпляр bj): мастер с нуля — все проверки, BJ_PING; тестовый режим DEPO — К1 Бубликов, зачисление и списание до исполнения без ошибок; очередь, справочник НРД. Тест FBLive готовит на базе все запросы bj к DEPO: 94 из 101, оставшиеся 7 — ЛК и ручной ввод (следующий этап). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
- ID — генератор + триггер (в 2.5 нет IDENTITY);
|
||||
- GUID — CHAR(36) в верхнем регистре (как отдаёт MSSQL uniqueidentifier);
|
||||
- COMMENT / M2M_REJECT_CODE varchar(MAX) — BLOB SUB_TYPE TEXT;
|
||||
- ACTIVE bit — SMALLINT;
|
||||
- ACTIVE bit — SMALLINT; AMOUNT numeric(25,7) — DOUBLE PRECISION, как количества в Fancy;
|
||||
- FTV_M2M_SETTINGS — привязки к справочникам клиента (в MSSQL-версии они зашиты в тексты процедур).
|
||||
Скрипт можно выполнять повторно: существующие объекты не пересоздаются (кроме триггеров и исключения). */
|
||||
|
||||
@@ -39,7 +39,7 @@ BEGIN
|
||||
TIMEEND TIMESTAMP,
|
||||
ISIN VARCHAR(12),
|
||||
SEC_CODE VARCHAR(255),
|
||||
AMOUNT NUMERIC(18,7),
|
||||
AMOUNT DOUBLE PRECISION,
|
||||
PLACE_NUMBER VARCHAR(128),
|
||||
LINK_NUMBER VARCHAR(64),
|
||||
DEPO_NUMBER VARCHAR(128),
|
||||
|
||||
@@ -12,7 +12,9 @@
|
||||
- в цикле по строкам поручения бумага/счета сбрасываются перед поиском (в MSSQL ненайденное значение
|
||||
оставалось от предыдущей строки).
|
||||
Тексты работают в обоих диалектах: база Fancy — диалект 1 (DATE хранит и время, "…" — строка, а не имя),
|
||||
поэтому COMMENT без кавычек, а дата без времени — через FTV_M2M_DAY. Проверено 27.10.2026 на обезличенной
|
||||
поэтому COMMENT без кавычек, а дата без времени — через FTV_M2M_DAY; количества — DOUBLE PRECISION, как в
|
||||
Fancy (NUMERIC(18,7) в диалекте 1 и так DOUBLE, а bj подключается в диалекте 3 и создать в базе диалекта 1
|
||||
процедуру с NUMERIC точнее 9 знаков не может). Проверено 27.10.2026 на обезличенной
|
||||
базе Fancy (Firebird 2.5, диалект 1, кодировка NONE) с UDF ib_Fansy и штатными триггерами.
|
||||
Порядок создания: вспомогательные, WIRING, OPERATION, UPDATE_HANDBOOK, EVENTS, CREATE, JOB. */
|
||||
|
||||
@@ -63,7 +65,7 @@ DECLARE VARIABLE D_CAT INTEGER;
|
||||
DECLARE VARIABLE SHARE INTEGER;
|
||||
DECLARE VARIABLE PLACE INTEGER;
|
||||
DECLARE VARIABLE DEPO INTEGER;
|
||||
DECLARE VARIABLE AMOUNT NUMERIC(18,7);
|
||||
DECLARE VARIABLE AMOUNT DOUBLE PRECISION;
|
||||
DECLARE VARIABLE CMT VARCHAR(255);
|
||||
DECLARE VARIABLE B_TYPE INTEGER;
|
||||
DECLARE VARIABLE B_NUM VARCHAR(255);
|
||||
@@ -165,7 +167,7 @@ DECLARE VARIABLE DIRECTION VARCHAR(64);
|
||||
DECLARE VARIABLE DD_DATE TIMESTAMP;
|
||||
DECLARE VARIABLE DD_NUM VARCHAR(64);
|
||||
DECLARE VARIABLE SHARE INTEGER;
|
||||
DECLARE VARIABLE AMOUNT NUMERIC(18,7);
|
||||
DECLARE VARIABLE AMOUNT DOUBLE PRECISION;
|
||||
DECLARE VARIABLE CLIENT INTEGER;
|
||||
DECLARE VARIABLE FACE INTEGER;
|
||||
DECLARE VARIABLE PLACE INTEGER;
|
||||
@@ -374,7 +376,7 @@ DECLARE VARIABLE PARAMETERS VARCHAR(4000);
|
||||
DECLARE VARIABLE DIRECTION VARCHAR(64);
|
||||
DECLARE VARIABLE CMT BLOB SUB_TYPE TEXT;
|
||||
DECLARE VARIABLE SHARE INTEGER;
|
||||
DECLARE VARIABLE AMOUNT NUMERIC(18,7);
|
||||
DECLARE VARIABLE AMOUNT DOUBLE PRECISION;
|
||||
DECLARE VARIABLE PLACE INTEGER;
|
||||
DECLARE VARIABLE CLIENT INTEGER;
|
||||
DECLARE VARIABLE FACE INTEGER;
|
||||
@@ -474,7 +476,7 @@ DECLARE VARIABLE DEPONENT_DOC VARCHAR(255);
|
||||
DECLARE VARIABLE REFERENCE VARCHAR(36);
|
||||
DECLARE VARIABLE ISIN VARCHAR(12);
|
||||
DECLARE VARIABLE SEC_CODE VARCHAR(255);
|
||||
DECLARE VARIABLE AMOUNT NUMERIC(18,7);
|
||||
DECLARE VARIABLE AMOUNT DOUBLE PRECISION;
|
||||
DECLARE VARIABLE PLACE_NUMBER VARCHAR(255);
|
||||
DECLARE VARIABLE LINK_NUMBER VARCHAR(128);
|
||||
DECLARE VARIABLE DEPO_NUMBER VARCHAR(128);
|
||||
|
||||
@@ -10,6 +10,24 @@
|
||||
| `20_FTV_M2M_GRANTS.sql` | права процедурам на таблицы Fancy и логину bj (`:BJ_USER`) на `FTV_M2M_JOB` и таблицы обмена |
|
||||
| `test/` | заглушки таблиц Fancy (по схеме MSSQL), прогон всех веток на встроенном Firebird 2.5.9 |
|
||||
|
||||
## Установка из bj
|
||||
|
||||
Мастер настройки bj, шаг «Учёт DEPO» → СУБД «Firebird» (27.10.2026): адрес сервера, порт 3050, путь к файлу базы
|
||||
на сервере (как в подключении Fancy) или псевдоним. «Дать логин администратора» — SYSDBA, разово, не сохраняется:
|
||||
bj проверит базу и функции Fancy (UDF), создаст логин bj `SYSDBA_BJ`, таблицы обмена, оператора Fancy для bj,
|
||||
кодировщик M2M, определит привязки `FTV_M2M_SETTINGS`, поставит процедуры и права и проверит обработку
|
||||
(`BJ_PING`). «Получить скрипт» — то же одним файлом для isql (WIN1251). Встроенные в bj копии этих файлов —
|
||||
`internal/lkgateway/depoprocs/firebird` (тест сверяет их с этим каталогом).
|
||||
|
||||
- Логин bj — `SYSDBA_BJ`: Fancy даёт права на документы только логинам `SYSDBA%` (`FU_HAVE_RIGHT`); для сервера
|
||||
Firebird это обычный пользователь — у него только выданные права: чтение учёта, таблицы обмена, `FTV_M2M_JOB`.
|
||||
Он же — оператор Fancy (`OD_OPERATORS`, «робот», `U_FACE` = депозитарий): по оператору Fancy нумерует документы.
|
||||
- Обработку запускает bj (SQL Server Agent нет).
|
||||
- Запросы bj к DEPO (T-SQL) подключение к Firebird переводит само: `internal/lkgateway/fancyfb.go`, точные
|
||||
переводы — `fsql/fb.go`. Проверка — `go test -run FBLive` с `BJ_FB_TEST_DSN` на копии базы клиента.
|
||||
|
||||
## Установка вручную
|
||||
|
||||
Порядок установки: 00 → заполнить `FTV_M2M_SETTINGS` → 10 → 20 (под SYSDBA или владельцем базы).
|
||||
|
||||
Файлы — в UTF-8, а база Fancy обычно в кодировке NONE с данными в WIN1251. Ставить в WIN1251, иначе русские
|
||||
@@ -35,7 +53,13 @@ isql -ch WIN1251 -user SYSDBA -i 10.sql <сервер>:<путь к базе>
|
||||
`D_FILER`; состояние `WAIT_RESP_DECIS`; кодировщик НДЦ; таблицы `D_CLISER_M2M*`, `U_OP_INV_ZACH/SPIS`.
|
||||
|
||||
Исправлено по итогам: генераторы `OD_DOCS_ID_GEN`/`OD_DOLS_ID_GEN`; `COMMENT` без кавычек (в диалекте 1 `"…"` —
|
||||
строка); дата без времени — через `FTV_M2M_DAY` (в диалекте 1 `CAST(… AS DATE)` время не отрезает).
|
||||
строка); дата без времени — через `FTV_M2M_DAY` (в диалекте 1 `CAST(… AS DATE)` время не отрезает); количества —
|
||||
`DOUBLE PRECISION`, как в Fancy (bj подключается в диалекте 3, а создать в базе диалекта 1 процедуру с `NUMERIC`
|
||||
точнее 9 знаков из диалекта 3 нельзя).
|
||||
|
||||
Через bj (отдельный экземпляр на копии базы): мастер с нуля — все проверки пройдены; тестовый режим DEPO — К1
|
||||
Бубликов, зачисление и списание SBER: поручение, события до `BJ_EXECUTED`, операции и проводки — без ошибок;
|
||||
очередь обмена, справочник НРД (171 строка) — работают.
|
||||
|
||||
Справочник участников — на настоящем справочнике НРД (169 участников, 2 места расчётов), записанном так же, как
|
||||
bj пишет его в MSSQL (полная перезапись `FTV_M2M_HANDBOOK` + событие `HANDBOOK`): первый прогон — 168 юрлиц с
|
||||
@@ -51,16 +75,20 @@ bj пишет его в MSSQL (полная перезапись `FTV_M2M_HANDBO
|
||||
поля и триггеры Fancy). На сервере Fancy она есть всегда. Тестовый стенд без Windows — Firebird 2.5 для
|
||||
Windows под wine с `ib_Fansy.dll` той же разрядности.
|
||||
2. **Кодировщик M2M** — юрлицо `OD_FACES` с `MNEM = 'M2M'`. В проверенной базе его не было; без него HANDBOOK и
|
||||
создание поручений падают с понятной ошибкой. Завести в Fancy или так (остальные поля заполнят триггеры Fancy):
|
||||
создание поручений падают с понятной ошибкой. Установка из bj заводит его сама; вручную (остальные поля
|
||||
заполнят триггеры Fancy):
|
||||
`INSERT INTO OD_FACES (ID, S_TYPE, NAME, MNEM) VALUES (GEN_ID(OD_FACES_ID_GEN, 1), 1, 'Кодировщик M2M (справочник участников НРД)', 'M2M');`
|
||||
3. **Оператор**: логин, под которым bj вызывает `FTV_M2M_JOB`, должен быть в `OD_OPERATORS` (`USER_ID` = логин,
|
||||
`U_FACE` = `OD_SETS.WHOS`). `FU_NEXT_DOC_NUM` берёт депозитарий и префикс номера по текущему пользователю;
|
||||
триггеры Fancy проверяют права оператора (кроме `UPDATE … ID = 0`). Проверено под SYSDBA.
|
||||
3. **Оператор**: логин, под которым bj вызывает `FTV_M2M_JOB`, должен начинаться с `SYSDBA` (иначе триггер
|
||||
`OD_DOCS_BI`: «Создание документа запрещено для данного пользователя») и быть в `OD_OPERATORS` (`USER_ID` = логин,
|
||||
`U_FACE` = `OD_SETS.WHOS`): `FU_NEXT_DOC_NUM` берёт депозитарий и префикс номера по текущему пользователю.
|
||||
Установка из bj заводит `SYSDBA_BJ` оператором-роботом сама.
|
||||
4. **Привязки `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`. В проверенной базе счета,
|
||||
категория, биржа и тип основания совпали с Фонтвьель (313, 836, 255, 8106, 31) — справочники поставки Fancy;
|
||||
`WHOS` и `CORR_FACE` — свои (`OD_SETS.WHOS`; НРД — юрлицо с `MNEM = 'НДЦ'`).
|
||||
`WHOS` и `CORR_FACE` — свои (`OD_SETS.WHOS`; НРД — юрлицо с `MNEM = 'НДЦ'`). Установка из bj определяет все
|
||||
привязки сама (оператор bj, `D_FILER`, счета `98010`/`98070.04`, мнемоники `ММВБ` и `НДЦ`, «Отчет депозитария»,
|
||||
частая рубрика `D_FILER`); неопределённые показывает в итоге установки.
|
||||
5. **Кодировка и диалект**: `RDB$DATABASE.RDB$CHARACTER_SET_NAME`, `MON$DATABASE.MON$SQL_DIALECT`. При NONE или
|
||||
WIN1251 — ставить в WIN1251 (см. выше); текст ошибки в `FTV_M2M_JOB` приводится к WIN1251.
|
||||
6. **Числа состояний** в `PROCESS_EVENTS` (`STATE = 1, 2, 3, 8`) — как у Фонтвьель; в проверенной базе поручения
|
||||
|
||||
Reference in New Issue
Block a user