DEPO: BJ_PING без ошибки «Не указан REFERENCE», BJ_RECEIVED не падает в «неизвестное событие»; страница DEPO короче

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-22 15:26:35 +03:00
parent cfc97787d0
commit 005c5e8368
4 changed files with 25 additions and 14 deletions
@@ -76,6 +76,10 @@ if @EVENT_TYPE = 'HANDBOOK' begin
end;
--1a. BJ_PING — проверочное событие bj (без GUID и REFERENCE): отметить обработанным, документ не трогать
if @EVENT_TYPE = 'BJ_PING' return;
--2. Критические ошибки (TODO другте обязательные поля)
if @GUID is null raiserror ('Не указан GUID', 16, 1);
if @REFERENCE is null raiserror ('Не указан REFERENCE', 16, 1);
@@ -103,6 +107,7 @@ if @EVENT_TYPE = 'BJ_RECEIVED' begin
update OD_DOCS set ID = 0, STATE = 1 where ID = @CLISER_ID; --START = Начало обработки (зарегистрирован)
end
else
if @EVENT_TYPE = 'BJ_SENT' begin
select @STATE = ID from OD_DOC_STATES where SYS_NAME = 'WAIT_RESP_DECIS';
update OD_DOCS set ID = 0, STATE = @STATE where ID = @CLISER_ID; --WAIT_RESP_DECIS = Ожидание ответа Response/Decision
@@ -1,29 +1,31 @@
{{define "content"}}
<div class="hero">
<h1 class="hero-greeting">Обмен с DEPO (Fancy)</h1>
<span class="hero-status">Переводы M2M, которые bj передал в депозитарную систему через трансферные таблицы базы {{.DB}} (FTV_M2M / FTV_M2M_LINES / FTV_M2M_EVENTS). Job bj2depo создаёт по ним документы в DEPO и отвечает событиями; bj ведёт статусы, документ и ошибки.</span>
<span class="hero-status">Переводы M2M, переданные в DEPO (база {{.DB}}), и документы, созданные по ним.</span>
</div>
{{if .Flash}}<div class="card" style="background:var(--accent-weak)">{{.Flash}}</div>{{end}}
<div class="card">
<h2>Как идёт обмен</h2>
<p class="muted" style="line-height:1.7">
<h2>Состояние обмена</h2>
<div style="display:flex;gap:18px;flex-wrap:wrap;font-size:13px;margin-top:6px">
<span>Переводов: <b>{{.Sum.Total}}</b></span>
<span>Ждут обработки: <b>{{.Sum.Pending}}</b></span>
<span>С документом DEPO: <b>{{.Sum.WithDoc}}</b></span>
<span>С ошибками: <b style="{{if .Sum.Errors}}color:var(--err){{end}}">{{.Sum.Errors}}</b></span>
{{if not .Sum.LastEventAt.IsZero}}<span>Последнее событие: <b>{{wall .Sum.LastEventAt}}</b></span>{{end}}
<span>Справочник НРД в DEPO: {{if .Sum.HasHandbook}}<b>{{.Sum.Handbook}}</b> участников{{if not .Sum.HandbookAt.IsZero}} (обновлён {{wall .Sum.HandbookAt}}){{end}}{{else}}<span class="muted">таблица FTV_M2M_HANDBOOK не создана</span>{{end}}</span>
</div>
<p class="muted" style="font-size:12.5px;margin:8px 0 0">Обработчик DEPO: {{if eq .Fancy.DepoJobMode "bj"}}{{if .Fancy.DepoJobLast}}последний вызов {{.Fancy.DepoJobLast}}{{else}}{{.JobMode}}{{end}}{{else}}{{.JobMode}}{{if .Fancy.DepoJobCheck}} · проверка готовности: {{if .Fancy.DepoJobCheckOK}}OK{{else}}не пройдена{{end}}{{end}}{{end}}{{if can "admin"}} · <a href="/admin/setup#fancy">настройки</a>{{end}}</p>
<details style="margin-top:10px"><summary class="muted" style="cursor:pointer;font-size:12.5px">Как это работает</summary>
<p class="muted" style="line-height:1.7;font-size:12.5px">
<span class="badge awaiting_decision">FTV_M2M</span> bj записывает перевод (шапка + строки по бумагам) и событие <code>BJ_*</code> со STATE=<b>TODO</b> →
<span class="badge awaiting_decision">bj2depo</span> процедура FTV_M2M_JOB ({{.JobMode}}) читает события, создаёт документ 16/16-1 в DEPO, отвечает <code>DEPO_ORDER_CREATED</code> (номер документа) или <code>DEPO_ERROR</code> →
<span class="badge sent">документ</span> bj следит за состоянием документа (OD_DOCS: начальный ввод → конец обработки / отмена) и при отмене оповещает →
<span class="badge confirmed">события НРД</span> по ответам MS010 и M2M bj дописывает <code>BJ_ORDER_ACCEPTED / BJ_EXECUTED / BJ_REJECTED / BJ_CANCELLED</code>.
Опрос таблиц — раз в минуту.{{if internalDocs}} Подробности и словарь событий — <a href="/admin/help/fancy-events">страница для программиста Fancy</a>.{{end}}
</p>
<div style="display:flex;gap:18px;flex-wrap:wrap;font-size:13px;margin-top:6px">
<span>Переводов: <b>{{.Sum.Total}}</b></span>
<span>Ждут job: <b>{{.Sum.Pending}}</b></span>
<span>С документом DEPO: <b>{{.Sum.WithDoc}}</b></span>
<span>С ошибками: <b style="{{if .Sum.Errors}}color:var(--err){{end}}">{{.Sum.Errors}}</b></span>
{{if not .Sum.LastEventAt.IsZero}}<span>Последнее событие: <b>{{wall .Sum.LastEventAt}}</b></span>{{end}}
<span>Справочник НРД в DEPO: {{if .Sum.HasHandbook}}<b>{{.Sum.Handbook}}</b> участников{{if not .Sum.HandbookAt.IsZero}} (обновлён {{wall .Sum.HandbookAt}}){{end}}{{else}}<span class="muted">таблица FTV_M2M_HANDBOOK не создана</span>{{end}}</span>
<span>Job bj2depo: {{.JobMode}}{{if eq .Fancy.DepoJobMode "bj"}}{{if .Fancy.DepoJobLast}} · последний вызов: {{.Fancy.DepoJobLast}}{{if not .Fancy.DepoJobLastAt.IsZero}} ({{msk .Fancy.DepoJobLastAt}}){{end}}{{end}}{{else if .Fancy.DepoJobCheck}} · проверка готовности: {{if .Fancy.DepoJobCheckOK}}OK{{else}}не пройдена{{end}}{{if not .Fancy.DepoJobCheckAt.IsZero}} ({{msk .Fancy.DepoJobCheckAt}}){{end}}{{end}} · <a href="/admin/setup#fancy">настройки</a></span>
</div>
</details>
</div>
{{if or .Failures (not .RunAsOK)}}<div class="card" style="border:1px solid var(--err)">
@@ -109,7 +109,6 @@
<span class="muted" style="font-size:12px">для вариантов с джобой bj пишет служебное событие BJ_PING и ждёт до 40 с, пока обработчик его отметит</span>
</div>
{{if .Settings.Fancy.DepoJobCheck}}<p style="margin-top:10px;font-size:13px;{{if .Settings.Fancy.DepoJobCheckOK}}color:var(--ok){{else}}color:var(--err){{end}}">{{if .Settings.Fancy.DepoJobCheckOK}}✓{{else}}✗{{end}} {{.Settings.Fancy.DepoJobCheck}} <span class="muted">({{.Settings.Fancy.DepoJobCheckAt.Format "02.01.2006 15:04"}})</span></p>{{end}}
{{if .Settings.Fancy.DepoProcCheck}}<p style="margin-top:4px;font-size:13px;{{if .Settings.Fancy.DepoProcCheckOK}}color:var(--ok){{else}}color:var(--warn){{end}}">Обработка событий (процедуры): {{if .Settings.Fancy.DepoProcCheckOK}}✓{{else}}⚠{{end}} {{.Settings.Fancy.DepoProcCheck}}</p>{{end}}
{{if and (eq .Settings.Fancy.DepoJobMode "bj") .Settings.Fancy.DepoJobLast}}<p class="muted" style="font-size:12px;margin-top:6px">Последний вызов процедуры — {{.Settings.Fancy.DepoJobLast}}</p>{{end}}
{{end}}
</div>
@@ -136,7 +135,7 @@
{{range depoProcList}}<label style="font-weight:600;font-size:13px">{{.Name}}<textarea name="proc_{{.Name}}" rows="10" spellcheck="false" style="width:100%;font-family:ui-monospace,monospace;font-size:11.5px">{{depoProcText $.Settings.Fancy .Name}}</textarea></label>{{end}}
<div><button type="submit" class="btn">Сохранить тексты</button> <span class="muted" style="font-size:12px">пустое поле или совпадение со встроенным — вернуть исходную версию; изменённые ставятся при «Установить» и при «Подготовить» в мастере</span></div>
</form></details>
{{if .Settings.Fancy.DepoProcCheck}}<p style="margin-top:6px;font-size:13px;{{if .Settings.Fancy.DepoProcCheckOK}}color:var(--ok){{else}}color:var(--warn){{end}}">{{if .Settings.Fancy.DepoProcCheckOK}}✓{{else}}⚠{{end}} {{.Settings.Fancy.DepoProcCheck}}</p>{{end}}
{{if .Settings.Fancy.DepoProcCheck}}<p style="margin-top:6px;font-size:13px;{{if .Settings.Fancy.DepoProcCheckOK}}color:var(--ok){{else}}color:var(--warn){{end}}">{{if .Settings.Fancy.DepoProcCheckOK}}✓{{else}}⚠{{end}} {{.Settings.Fancy.DepoProcCheck}}{{if not .Settings.Fancy.DepoProcCheckAt.IsZero}} <span class="muted">· {{msk .Settings.Fancy.DepoProcCheckAt}}</span>{{end}}</p>{{end}}
</div>
{{end}}