Кто что делает
| Сервис | Роль |
|---|---|
| bj (Bridge-and-Join-s) | обмен с НРД по MOEX МОСТ (M2MTR / M2MTD / M2MER, депо-поручения 16 и 16/1, отчёты MS010), сверка с DEPO/SPECTRE, блокировка и движение бумаг в QUIK МНП, личный кабинет. Пишет поручения и события в трансферные таблицы, читает события от DEPO. |
| bj2depo (джоба Fancy) | читает FTV_M2M / FTV_M2M_LINES → создаёт и меняет сущности DEPO (M2M-поручения D_CLISER_M2M, строки D_CLISER_M2M_DOL); обрабатывает события FTV_M2M_EVENTS от bj; пишет свои события для bj. |
Работаем только с НРД (MOEX МОСТ), СПБ нет. Переводятся только выпуски с ISIN, начинающимся на RU. База — наша копия DEPO на SQL002 (BJ_DEPO_DATA); джобу bj2depo нужно поднять на ней (сейчас она работает на SQL001/UPD_DE_DATA, и записи в нашей базе никто не забирает).
Какими идентификаторами располагает bj
| Сущность | Что есть у bj | Что можем передавать в таблицы |
|---|---|---|
| Депонент | ФИО + серия/номер паспорта из сообщения НРД. bj сам находит лицо в DEPO по паспорту (серия без пробелов, OD_FACES.DOC_SER/DOC_NUM). | DEPONENT_NAME, DEPONENT_DOC и DEPONENT_ID = OD_FACES.SELF_ID (мастер-ID лица; у дублей указывает на основную запись). |
| Контрагент (депозитарий) | код участника МОСТ (MC…, 12 знаков), депозитарный код НРД (HL…), ИНН, наименование из справочника участников M2M. В OD_FACES депозитариев-контрагентов нет (проверено по ИНН), есть только сам НКО АО НРД (ID 18174). | CONTRAGENT_M2M_CODE; при желании ИНН и наименование — доп. поля. |
| Бумага | ISIN + код НРД (напр. SBER/03); bj находит OD_VALUES.ID по ISIN (IS_IN=1 = принята на обслуживание). | ISIN, SEC_CODE и SHARE = OD_VALUES.ID. |
| Счёт клиента | bj находит открытый торговый счёт ВТНКЦ… (OD_CLIENTS, STATE=0). При нескольких договорах берётся самый ранний (правило депозитария). | OD_CLIENTS.ID и NUMBER. |
| Счёт депозитария (место хранения) | наш счёт в НРД HL171004001C + раздел 36MC04136…. В DEPO это запись OD_CLIENTS с NUMBER HL171004001C/253400M18U5TB02TW421/253400_X1A47/<раздел> (например ID 79 для раздела 36MC0413600000F00). OD_CLIENTS_REC.LINK_NUMBER у нас пустой везде. | PLACE_NUMBER = раздел (или ID записи OD_CLIENTS, если удобнее). |
| Причины отказа | коды M2M01…M2M10 по каждой бумаге (может быть несколько), при отказе НРД по поручению 16/16-1 — код и текст из MS010. | M2M_REJECT_CODE через ;, текст — в PARAMETERS. |
| Ключи | GUID перевода (из M2MTR) и REFERENCE строки (референс бумаги из M2MTR, M2M…). | как ключи FTV_M2M / FTV_M2M_LINES / FTV_M2M_EVENTS. |
Таблицы (как согласовано, поля, которые заполняет bj)
| Таблица | Поля от bj |
|---|---|
FTV_M2M | GUID, DIRECTION (IN — к нам зачисляют, OUT — мы списываем), CONTRAGENT_M2M_CODE, DEPONENT_NAME, DEPONENT_DOC, DEPONENT_ID (если нашли). Вставка вместе со строками в одной транзакции. |
FTV_M2M_LINES | GUID, REFERENCE, ISIN, SEC_CODE, SHARE (если нашли), AMOUNT (штуки, дробные для паёв), PLACE_NUMBER, DEPO_NUMBER — номер торгового счёта клиента ВТНКЦ… (джоба находит по нему DEPO). |
FTV_M2M_EVENTS | GUID, REFERENCE (пусто = по поручению целиком), EVENT_TYPE, EVENT_DATE (фактическое время события в bj), M2M_REJECT_CODE, PARAMETERS (параметры события, см. таблицу событий). |
COMMENT и STATE во всех таблицах заполняет только bj2depo (17.09.2026): bj их не пишет, STATE при вставке получает значение по умолчанию TODO. Номер документа DEPO bj2depo ставит в FTV_M2M.DOC (строки — DOL).
Поручение создаётся в DEPO на самом раннем этапе: сразу после записи в FTV_M2M (для входящих — как только пришёл M2MTR; для исходящих — как только наш M2MTR ушёл в НРД).
Правила для событий
- Одно событие — одна строка. Ключ идемпотентности:
GUID + REFERENCE + EVENT_TYPE; повтор не пишется. - Мастер — bj (17.09.2026): события пишет только bj (
BJ_*); bj2depo событий не пишет, результат обработки отражает вSTATE(SUCCESS/ERROR),COMMENT,TimeBeg/TimeEndсобытия и вFTV_M2M.DOC. STATEиCOMMENTпишет только bj2depo; bj при вставке их не заполняет.- Параметры события — в
PARAMETERS: номер депо-поручения НРД (CONTR_D_ID), номер поручения МНП, текст причины отказа. EVENT_DATE— фактическое время события в bj (МСК), не время вставки.- Порядок: события одного GUID обрабатываются по
ID. Событие по строке (REFERENCEзадан) относится к одной бумаге; безREFERENCE— ко всему поручению. - Коды отказа в
M2M_REJECT_CODEчерез;, как их даёт НРД (M2M01…M2M10); человекочитаемый текст — вPARAMETERS.
События от bj (обрабатывает bj2depo)
| EVENT_TYPE | Когда bj пишет | Уровень | Что ожидаем от bj2depo |
|---|---|---|---|
BJ_RECEIVED | пришёл входящий M2MTR от другого депозитария (мы зачисляем); одновременно вставлены FTV_M2M + LINES | поручение | создать M2M-поручение в DEPO, вернуть DEPO_ORDER_CREATED |
BJ_SENT | наш исходящий M2MTR ушёл в НРД (мы списываем) | поручение | то же для списания |
BJ_DECISION_CONFIRM / BJ_DECISION_REJECT | мы ответили контрагенту по бумаге (M2MTD); при отказе — коды | строка | проставить статус строки: принято / отказано с кодами |
BJ_CP_CONFIRM / BJ_CP_REJECT | контрагент ответил по нашему исходящему (M2MTD) | строка | то же для списания |
BJ_SERVICE_ERROR | сервис МОСТ отверг перевод (M2MER ERROR), код M2Mxx | поручение | закрыть поручение как отклонённое |
BJ_ORDER_SENT | подано депо-поручение 16 (списание) или 16/1 (зачисление) в НРД; в PARAMETERS — CONTR_D_ID (несколько — через ;) | поручение | привязать номер поручения НРД |
BJ_ORDER_ACCEPTED / BJ_ORDER_REJECTED | НРД принял (отчёт MS010) или отверг наше депо-поручение; при отказе — код и текст | поручение | проставить результат; при принятии — провести движение по счёту, если DEPO делает это по нашему сигналу (см. вопросы) |
BJ_ORDER_LATE | MS010 не получен за 5 минут после подачи (регламент) | поручение | для информации / контроля |
BJ_EXECUTED | перевод исполнен (по отчёту НРД) | поручение | закрыть как исполненное |
BJ_CANCELLED | перевод отозван / аннулирован / истёк срок 30 дней без исполнения | поручение | закрыть как отменённое |
BJ_GATEWAY_REJECT | шлюз bj отказал в исходящем переводе из ЛК до отправки в НРД (сверка: лицо, счёт, бумага, остаток, место хранения, блокировки; либо данные заявки некорректны). Код в M2M_REJECT_CODE (M2Mxx или QTY/PLACE/QUIK), причина в PARAMETERS; одновременно вставлены FTV_M2M (OUT) + LINES | строка | закрыть строку и документ как отклонённые (см. «Действия джобы»); пометить событие SUCCESS или ERROR — только после этого bj ставит заявке в ЛК «Отклонена» |
BJ_PING | проверка готовности обработчика из настроек bj (GUID случайный, без шапки в FTV_M2M) | служебное | ничего не делать, только пометить SUCCESS — bj ждёт отметку до 40 с и удаляет строку |
BJ_QUIK_BLOCKED / BJ_QUIK_RELEASED / BJ_QUIK_SIGNED / BJ_QUIK_DEPOSITED | блокировка / снятие / списание / зачисление в QUIK МНП; номер поручения МНП в PARAMETERS | строка | только для сверки QUIK ↔ DEPO, в DEPO ничего не менять |
События от bj2depo
Не используются (17.09.2026, программист Fancy: «мастером является bj»). Прежние DEPO_ORDER_CREATED / DEPO_ERROR отменены. bj узнаёт результат так:
- документ DEPO создан — номер в
FTV_M2M.DOC, строки —FTV_M2M_LINES.DOL; состояние документа bj читает вOD_DOCS.STATE; - событие обработано —
STATE = SUCCESS/ERRORиCOMMENTу самого событияBJ_*; поERRORоператор bj получает оповещение.
Порядок событий по этапам
| Входящий перевод (мы зачисляем) | Исходящий перевод (мы списываем) |
|---|---|
1. bj: FTV_M2M + LINES, BJ_RECEIVED | 1. bj: QUIK блокирует бумаги (BJ_QUIK_BLOCKED), M2MTR в НРД, FTV_M2M + LINES, BJ_SENT |
2. bj2depo: документ DEPO (FTV_M2M.DOC); bj сверяет строки с DEPO | 2. bj2depo: документ DEPO (FTV_M2M.DOC) |
3. bj: ответ контрагенту — BJ_DECISION_CONFIRM / BJ_DECISION_REJECT | 3. bj: ответ контрагента — BJ_CP_CONFIRM / BJ_CP_REJECT (при отказе QUIK снимает блокировку: BJ_QUIK_RELEASED) |
4. bj: подача 16/1 — BJ_ORDER_SENT | 4. bj: подача 16 — BJ_ORDER_SENT |
5. bj: BJ_ORDER_ACCEPTED (MS010) или BJ_ORDER_REJECTED; QUIK зачисляет — BJ_QUIK_DEPOSITED | 5. bj: BJ_ORDER_ACCEPTED / BJ_ORDER_REJECTED; QUIK списывает — BJ_QUIK_SIGNED |
6. bj2depo: по BJ_ORDER_ACCEPTED / BJ_EXECUTED — FTV_M2M_PROCESS_WIRING, документ «Обработано (ожидание формирования отчёта)»; 7. «Формирование отчёта» — сотрудник депозитария (по рассылке) или автомат документооборота | 6–7. то же для списания |
Отклонения: BJ_GATEWAY_REJECT (шлюз bj отказал до отправки в НРД; статус в ЛК — после обработки джобой), BJ_SERVICE_ERROR, BJ_ORDER_LATE (5 мин без MS010), BJ_CANCELLED (30 дней без исполнения), DEPO_ERROR. | |
Действия джобы по событиям: что делать с документом DEPO
Сейчас джоба создаёт документ по шапке и помечает события обработанными, но документ и его строки не меняются: после отказа документ остаётся в состоянии «Начальный ввод» и его приходится отменять руками, а после приёма остаток на счёте появляется, но документ в конечное состояние не переходит (проверено 14.09.2026 на документах 75070271 и 75070273). Ниже — что джобе нужно делать по каждому событию. Документ всегда находится по GUID, строка — по GUID + REFERENCE; событие без REFERENCE относится ко всему документу.
| Событие | Уровень | Что сделать в DEPO | Конечное состояние |
|---|---|---|---|
BJ_RECEIVED, BJ_SENT | документ | документ уже создан по шапке; ничего не делать, пометить SUCCESS | «Начальный ввод» (0) → можно «Начало обработки» (1) |
BJ_DECISION_REJECT (входящий: мы отказали), BJ_CP_REJECT (исходящий: отказал контрагент) | строка | в D_CLISER_M2M_DOL строки записать код из M2M_REJECT_CODE в M2M_STATUS/M2M_TEXT (текст из PARAMETERS). Если отказаны все строки документа — выполнить шаг «Отмена» (тип шага 0→REJ), как это делает оператор вручную | строка «отказ, M2Mxx»; документ «Отмена обработки» (3) |
BJ_DECISION_CONFIRM, BJ_CP_CONFIRM | строка | отметить строку как принятую (M2M_STATUS «принято»); движения по счёту пока нет — ждём поручение НРД | строка «принято»; документ «Начало обработки» (1) |
BJ_ORDER_SENT | документ | записать номер депо-поручения НРД (CONTR_D_ID из PARAMETERS); состояние — ожидание | «Ожидание доставки (ответа)» (10) или «Ожидание исполнения операции» (127) |
BJ_ORDER_ACCEPTED + BJ_EXECUTED | документ | реализовано 17.09.2026: bj2depo вызывает [dbo].[FTV_M2M_PROCESS_WIRING] @OPER_ID (ID документа) — директива «Обработать» для списания / зачисления; bj процедуру не вызывает. Дальше директива «Формирование отчёта»: сотрудники депозитария по почтовой рассылке или автомат документооборота (нужна лицензия) — средствами SQL отчёт не формируется | «Обработано (ожидание формирования отчёта)» → после отчёта — конечное |
BJ_GATEWAY_REJECT | строка | в D_CLISER_M2M_DOL строки записать код из M2M_REJECT_CODE и причину из PARAMETERS; если отказаны все строки — шаг «Отмена». Документ мог не создаться (например, бумаги с таким ISIN нет в OD_VALUES) — тогда достаточно пометить событие ERROR с текстом причины | строка «отказ шлюза»; документ «Отмена обработки» (3) |
BJ_ORDER_REJECTED, BJ_SERVICE_ERROR, BJ_CANCELLED | документ | записать причину (PARAMETERS / код) в документ, выполнить шаг «Отмена» | «Отмена обработки» (3) |
BJ_ORDER_LATE | документ | только пометка/комментарий («отчёт НРД не получен за 5 минут»); состояние не менять | без изменений |
BJ_QUIK_*, BJ_PING | служебные | ничего не делать, пометить SUCCESS | без изменений |
Названия и коды состояний — из справочника OD_DOC_STATES (D_CAT=0): 0 «Начальный ввод», 1 «Начало обработки (зарегистрирован)», 2 «Конец обработки (в архиве)», 3 «Отмена обработки», 10 «Ожидание доставки (ответа)», 127 «Ожидание исполнения операции». Шаг отмены, который выполнял оператор: OD_STEP_TYPES ID 75069472 «Отмена» (SYS_NAME 0->REJ, OUT_STATE 3).
Запрос, которым джоба находит отказы вместе с документом и строкой:
SELECT e.ID, e.GUID, e.REFERENCE, e.M2M_REJECT_CODE, e.PARAMETERS, m.DOC, l.DOL
FROM dbo.FTV_M2M_EVENTS e
JOIN dbo.FTV_M2M m ON m.GUID = e.GUID
JOIN dbo.FTV_M2M_LINES l ON l.GUID = e.GUID AND l.REFERENCE = e.REFERENCE
WHERE e.STATE = 'TODO' AND e.EVENT_TYPE IN ('BJ_DECISION_REJECT', 'BJ_CP_REJECT')
ORDER BY e.ID;
Для событий по документу целиком (REFERENCE пуст) джойн со строками не нужен:
SELECT e.ID, e.GUID, e.EVENT_TYPE, e.M2M_REJECT_CODE, e.PARAMETERS, m.DOC FROM dbo.FTV_M2M_EVENTS e JOIN dbo.FTV_M2M m ON m.GUID = e.GUID WHERE e.STATE = 'TODO' AND e.REFERENCE IS NULL ORDER BY e.ID;
Обратная связь в bj. bj сам читает состояние документа по номеру (OD_DOCS.STATE по FTV_M2M.DOC) и показывает его в карточке перевода; при ручной отмене в DEPO оператор bj получает оповещение. Поэтому отдельные события от джобы о смене состояния не требуются — достаточно, чтобы документ переходил в состояния из таблицы выше.
Справочник участников M2M (M2MTH) → таблица FTV_M2M_HANDBOOK
НРД ведёт справочник участников переводов по MOEX МОСТ: кто депозитарий, кто брокер, их коды участника и ИНН, плюс места расчётов. bj получает его от НРД (сообщение M2MTransferHandbook) при старте и обновляет раз в сутки; по нему bj определяет контрагента по ИНН из перевода и наполняет справочник депозитариев в QUIK МНП. Предлагаем отдавать его в DEPO целиком в отдельную таблицу — тогда CONTRAGENT_M2M_CODE из FTV_M2M раскрывается в ИНН и наименование, и по нему можно заводить контрагентов в DEPO.
Сейчас в справочнике 158 участников и 2 мест расчётов (получено 2026-09-09). Наш код участника — MC0413600000.
| Поле таблицы | Тип | Откуда у bj / что означает |
|---|---|---|
INN | varchar(12) | ИНН организации. Вместе с PARTICIPANT_CODE и KIND — ключ строки. |
PARTICIPANT_CODE | varchar(12) | код участника МОСТ (MC…, 12 знаков) — тот самый CONTRAGENT_M2M_CODE. У мест расчётов пусто. |
KIND | varchar(8) | DEPO — депозитарий, BROKER — брокер (одна организация может быть в обоих качествах — две строки), PLACE — место расчётов. |
NAME_FULL | nvarchar(255) | полное наименование (рус.) |
NAME_SHORT | nvarchar(128) | краткое наименование (рус.) |
NAME_DISPLAY | nvarchar(255) | отображаемое наименование (рус.) — то, что показываем в интерфейсах |
NAME_ENG | nvarchar(255) | наименование на английском (есть не у всех) |
HANDBOOK_AT | datetime | дата/время версии справочника НРД (CreationTimestamp) |
UPDATED_AT | datetime | когда bj записал строку |
ACTIVE | bit | всегда 1 (история не ведётся, таблица перезаписывается целиком) |
Обновление (согласовано). История не нужна: при каждом получении справочника от НРД bj удаляет все строки и записывает содержимое заново одной транзакцией (DEPO не видит пустую таблицу; DELETE вместо TRUNCATE, потому что TRUNCATE требует права ALTER) — аналог нового HANDBOOK.xml. Дополнительно перезапись повторяется при старте bj и раз в 6 часов. Просьба создать таблицу по скрипту ниже (создаёт наша сторона: у логина bj нет права CREATE TABLE в BJ_DEPO_DATA). Поля — как в описании; bj2depo использует INN, PARTICIPANT_CODE, NAME_SHORT. Английские наименования и места расчётов bj пишет, джоба их не использует.
Примеры реальных строк:
| INN | PARTICIPANT_CODE | KIND | NAME_DISPLAY |
|---|---|---|---|
7707025725 | MC0005600000 | DEPO | АО АКБ "ЦентроКредит" |
9714012520 | MC0418000000 | DEPO | ИК ФИАНИТ |
7831000034 | — | PLACE | АО "СПБ Банк" |
Как это связано с остальным: в FTV_M2M поле CONTRAGENT_M2M_CODE = PARTICIPANT_CODE строки с KIND=DEPO; ИНН отправителя/получателя в сообщениях НРД (TransferringDepository/ReceivingDepository INN) = INN. Тот же справочник bj загружает в QUIK МНП (таблица M2MDepoRecipients: ИНН + наименование).
Кто запускает обработку: джоба SQL Agent или bj
Обработка трансферных таблиц — это вызов процедуры FTV_M2M_JOB в базе DEPO. Есть два равноценных способа её запускать:
| Способ | Что нужно на сервере клиента | Плюсы / минусы |
|---|---|---|
A. Джоба SQL Agent bj2depo (как сейчас у нас: шаг exec FTV_M2M_JOB, каждые 10 с) | SQL Agent запущен; права на создание джобы (SQLAgentOperatorRole / sysadmin); учётка Agent с правами на BJ_DEPO_DATA | работает независимо от bj; но у каждого клиента нужно заводить джобу и права, а bj не видит её состояние без доступа к msdb |
| B. bj вызывает процедуру сам (Настройка → Обмен Fancy → «Обработка трансферных таблиц DEPO») | только GRANT EXECUTE ON dbo.FTV_M2M_JOB TO <логин bj> | одна настройка на все внедрения, состояние и ошибки видны в bj; обработка идёт, только пока работает bj |
Включать нужно один вариант, иначе процедура будет вызываться параллельно из двух мест. Просьба к разработчику: сделать FTV_M2M_JOB безопасной при повторном/параллельном вызове (обработка только строк со STATE='TODO', блокировка строки на время обработки) — тогда случайное двойное включение не навредит.
Результат выгрузки истории тестов (14.09.2026)
Кнопкой «Выгрузить историю в DEPO» на вкладке «Тестирование» bj записал в трансферные таблицы все переводы, проведённые на TEST3 (робот НРД и банк Зенит): 78 переводов, 252 события с реальными датами. Джоба bj2depo создала по каждому документ в DEPO (D_CLISER_M2M + строки), сама определила контрагента, депонента, бумагу и место хранения. Что при этом выяснилось:
- События по строкам (
BJ_DECISION_*,BJ_CP_*, с REFERENCE) джоба обрабатывает — SUCCESS. - События по поручению целиком (REFERENCE пуст:
BJ_SENT,BJ_RECEIVED,BJ_SERVICE_ERROR,BJ_ORDER_SENT,BJ_ORDER_ACCEPTED,BJ_EXECUTED) джоба отвергает с текстом «Не найдена строка M2M-поручение по GUID + REFERENCE». Просьба: для событий без REFERENCE применять действие к документу (или ко всем его строкам). - После обработки событий статусы в DEPO не меняются: у всех документов
DOC_STATUS=0, у строкM2M_STATUS=0,DEP_STATUS=0. Просьба согласовать отображение, например:BJ_CP_REJECT/BJ_DECISION_REJECT→ строка «отказ» с кодом в M2M_TEXT;BJ_CP_CONFIRM/BJ_DECISION_CONFIRM→ «принято»;BJ_ORDER_ACCEPTED/BJ_EXECUTED→ документ «исполнен»;BJ_SERVICE_ERROR/BJ_CANCELLED→ документ «отклонён / отменён». Тогда историю тестов можно будет просмотреть в DEPO с настоящими статусами. - Событие
BJ_PINGсейчас помечается ERROR — достаточно помечать SUCCESS без действий.
Примеры SQL
Так bj заведёт входящий перевод (одна транзакция):
BEGIN TRAN;
INSERT INTO dbo.FTV_M2M (GUID, DIRECTION, CONTRAGENT_M2M_CODE, DEPONENT_NAME, DEPONENT_DOC)
VALUES ('5325B860-3265-49B6-986D-FA84FB41FE27', 'IN', 'MC0034900000', N'Иванов Иван Иванович', '0000 000000');
INSERT INTO dbo.FTV_M2M_LINES (GUID, REFERENCE, ISIN, SEC_CODE, SHARE, AMOUNT, PLACE_NUMBER, DEPO_NUMBER)
VALUES ('5325B860-3265-49B6-986D-FA84FB41FE27', 'M2M0000002675550', 'RU000A107UL4', 'RU000A107UL4', 18824, 1, '36MC0413600000F00', N'ВТНКЦ00000001');
INSERT INTO dbo.FTV_M2M_EVENTS (GUID, REFERENCE, EVENT_TYPE, EVENT_DATE)
VALUES ('5325B860-3265-49B6-986D-FA84FB41FE27', NULL, 'BJ_RECEIVED', '2026-09-17T09:21:26.000'); -- время получения M2MTR в bj
COMMIT;
-- параметры события — в PARAMETERS, например подача поручения 16/1:
INSERT INTO dbo.FTV_M2M_EVENTS (GUID, REFERENCE, EVENT_TYPE, EVENT_DATE, PARAMETERS)
VALUES ('5325B860-3265-49B6-986D-FA84FB41FE27', NULL, 'BJ_ORDER_SENT', '2026-09-17T09:22:24.000', N'20608');
Так bj читает результат обработки (событий от bj2depo нет):
SELECT CAST(GUID AS varchar(36)) GUID, STATE, COMMENT, DOC FROM dbo.FTV_M2M WHERE GUID = @guid; SELECT ID, EVENT_TYPE, REFERENCE, STATE, COMMENT, TimeBeg, TimeEnd FROM dbo.FTV_M2M_EVENTS WHERE GUID = @guid ORDER BY ID;
Структура таблицы справочника и то, как bj её перезаписывает:
CREATE TABLE dbo.FTV_M2M_HANDBOOK (
ID int IDENTITY(1,1) PRIMARY KEY, INN varchar(12) NOT NULL, PARTICIPANT_CODE varchar(12) NULL, KIND varchar(8) NOT NULL,
NAME_FULL nvarchar(255) NULL, NAME_SHORT nvarchar(128) NULL, NAME_DISPLAY nvarchar(255) NULL, NAME_ENG nvarchar(255) NULL,
HANDBOOK_AT datetime NULL, UPDATED_AT datetime NOT NULL DEFAULT GETDATE(), ACTIVE bit NOT NULL DEFAULT 1);
-- при каждом получении справочника от НРД (одна транзакция):
BEGIN TRAN;
DELETE FROM dbo.FTV_M2M_HANDBOOK;
INSERT INTO dbo.FTV_M2M_HANDBOOK (INN, PARTICIPANT_CODE, KIND, NAME_FULL, NAME_SHORT, NAME_DISPLAY, NAME_ENG, HANDBOOK_AT, UPDATED_AT, ACTIVE)
VALUES ('7707025725', 'MC0005600000', 'DEPO', N'…', N'АО АКБ "ЦентроКредит"', N'…', N'…', @hb_at, GETDATE(), 1); -- и так по всем участникам
COMMIT;
Открытые вопросы
Закрыто 17.09.2026 (ответ программиста Fancy):
- таблица
FTV_M2M_HANDBOOKсоздана и заполняется bj; обработка справочника джобой — на последнем этапе проекта (директива вендора переносится с Fancy-скриптов на SQL); BJ_ORDER_ACCEPTED/BJ_EXECUTED— процедураFTV_M2M_PROCESS_WIRING(вызывает bj2depo), документ «Обработано (ожидание формирования отчёта)»;COMMENTиSTATEзаполняет только bj2depo; параметры — вPARAMETERS;EVENT_DATE— фактическое время события (в bj сделано 17.09);- событий от bj2depo нет, мастер — bj (
DEPO_ORDER_CREATED/DEPO_ERRORотменены); - счёт клиента —
FTV_M2M_LINES.DEPO_NUMBER(bj пишет номер ВТНКЦ… с 16.09).
Закрыто 15.09.2026: REFERENCE для всех исходящих присваивает bj (M2M…); джоба bj2depo на SQL002 / BJ_DEPO_DATA работает; BJ_QUIK_* — для истории, без действий.
Остаётся:
- События без
REFERENCE(по документу целиком:BJ_RECEIVED,BJ_SENT,BJ_ORDER_SENT,BJ_ORDER_ACCEPTED,BJ_EXECUTED,BJ_QUIK_*) джоба помечает ERROR «Не найдена строка M2M-поручение по GUID + REFERENCE // FTV_M2M_PROCESS_EVENTS // 69» — на 17.09 (перевод D744A410) так же. Для них строку искать не нужно: документ — поGUID. - Запись отказов в строки и шаг «Отмена» — в работе у программиста.
- Создание документа «Списание / Зачисление» — доработка у программиста.
- «Формирование отчёта» после «Обработано»: вручную по рассылке или лицензия на автомат документооборота — решение депозитария.
- Место хранения:
PLACEпоPLACE_NUMBER=36MC0413600000F00не проставляется; в DEPO запись называетсяHL171004001C/…/36MC0413600000F00— в каком виде передавать?