Мастер, шаг «Учёт 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
11 KiB
Обмен 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/DAY (вспомогательные), 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 |
Установка из 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, иначе русские тексты процедур попадут в базу в UTF-8:
iconv -f utf-8 -t cp1251 10_FTV_M2M_PROCS.sql > 10.sql
isql -ch WIN1251 -user SYSDBA -i 10.sql <сервер>:<путь к базе>
(в IBExpert — кодировка подключения WIN1251, файл открыть в UTF-8).
Проверено на базе Fancy
27.10.2026, обезличенная база Fancy: Firebird 2.5.9, ODS 11.2, диалект 1, кодировка NONE, UDF ib_Fansy и
штатные триггеры Fancy. Прошли установка 00–20, справочник участников (HANDBOOK), поручения IN и OUT, события до
BJ_EXECUTED: операции зачисления и списания, входящие записи по отчёту НРД, проводки через OD_PR_INS_WIRS.
Ошибки (неизвестный контрагент, повтор GUID, неизвестное событие, нет строки поручения) — текст в COMMENT.
Подтвердилось: имена и колонки таблиц; FU_NEXT_DOC_NUM (CAT_SYS_NAME, D_DATE, DIRECTION, FOR_DOC) — выполняемая,
принимает SYS_NAME или ID категории; OD_PR_INS_WIRS — 31 входной и 4 выходных параметра; D_CLISER_M2M.DOC_GUID
— VARCHAR(36); флаги LAST_FLAG = 1, E_DATE = '9999-01-01'; категории I_CLISER_M2M_ZACH/SPIS, OP_INV_ZACH/SPIS,
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) время не отрезает); количества —
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 юрлиц с
кодами M2M, повторный — «никаких изменений не обнаружено». Исправлено относительно MSSQL-версии (там осталось):
- место расчётов без кода участника (
KIND = 'PLACE', например «СПБ Банк») — юрлицо создаётся без кода M2M (OD_FACE_CODERS.CODE—NOT NULL; в MSSQL-версии справочник падает целиком, если места ещё нет в Fancy); - один ИНН дважды в справочнике (СПБ Банк — место расчётов и депозитарий) — одно юрлицо, код добавляет шаг 3 (в MSSQL-версии — два одинаковых юрлица).
Проверить у клиента
- UDF Fancy
ib_Fansy: без неё не читаютсяOD_DOCS,OD_BALANCESи не ставятся процедуры (вычисляемые поля и триггеры Fancy). На сервере Fancy она есть всегда. Тестовый стенд без Windows — Firebird 2.5 для Windows под wine сib_Fansy.dllтой же разрядности. - Кодировщик M2M — юрлицо
OD_FACESсMNEM = 'M2M'. В проверенной базе его не было; без него HANDBOOK и создание поручений падают с понятной ошибкой. Установка из bj заводит его сама; вручную (остальные поля заполнят триггеры Fancy):INSERT INTO OD_FACES (ID, S_TYPE, NAME, MNEM) VALUES (GEN_ID(OD_FACES_ID_GEN, 1), 1, 'Кодировщик M2M (справочник участников НРД)', 'M2M'); - Оператор: логин, под которым bj вызывает
FTV_M2M_JOB, должен начинаться сSYSDBA(иначе триггерOD_DOCS_BI: «Создание документа запрещено для данного пользователя») и быть вOD_OPERATORS(USER_ID= логин,U_FACE=OD_SETS.WHOS):FU_NEXT_DOC_NUMберёт депозитарий и префикс номера по текущему пользователю. Установка из bj заводитSYSDBA_BJоператором-роботом сама. - Привязки
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 = 'НДЦ'). Установка из bj определяет все привязки сама (оператор bj,D_FILER, счета98010/98070.04, мнемоникиММВБиНДЦ, «Отчет депозитария», частая рубрикаD_FILER); неопределённые показывает в итоге установки. - Кодировка и диалект:
RDB$DATABASE.RDB$CHARACTER_SET_NAME,MON$DATABASE.MON$SQL_DIALECT. При NONE или WIN1251 — ставить в WIN1251 (см. выше); текст ошибки вFTV_M2M_JOBприводится к WIN1251. - Числа состояний в
PROCESS_EVENTS(STATE = 1, 2, 3, 8) — как у Фонтвьель; в проверенной базе поручения дошли доSTATE = 2, сверить сOD_DOC_STATESклиента.
Открытые вопросы логики (те же, что в MSSQL-версии)
BJ_ORDER_REJECTEDне обрабатывается — уходит в «неизвестное событие» (вопрос программисту от 16.10.2026).BJ_CP_CONFIRMс направлением OUT перехватывается веткойBJ_DECISION_CONFIRMвыше.- Депонент не найден — поручение создаётся без депонента, ошибки нет. Ищется по имени и серии+номеру документа:
при пустой серии (
NULL) не находится.