From 52b813617a1f18ea1c370ef5dbf2a03570a75990 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Wed, 21 Oct 2026 00:08:27 +0400 Subject: [PATCH] =?UTF-8?q?fix(web):=20=D1=81=D0=B8=D0=BD=D1=85=D1=80?= =?UTF-8?q?=D0=BE=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B2=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=B5=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=84?= =?UTF-8?q?=D1=80=D0=BE=D0=BD=D1=82=D0=B0=20=D1=81=20arm-web@test=20(de4e4?= =?UTF-8?q?77)=20(#146)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Перенесён диапазон arm-web a3c0010..de4e477 (1 коммитов, 4 файлов набора синхронизации) скриптом docs/scripts/sync-web.sh. После переноса web/ и arm-web@test идентичны по набору. Коммиты arm-web: - e202711 fix(DocumentReview): просмотр ОСВ как в 1С — строки счетов и субсчетов, без строк-показателей (#51, AURORA-1702, AURORA-1703) Co-Authored-By: sync-web.sh --- web/src/types/api.ts | 3 + .../widgets/DocumentReview/OsvDocument.tsx | 21 ++- .../widgets/DocumentReview/osvRows.test.ts | 149 ++++++++++++++++-- web/src/widgets/DocumentReview/osvRows.ts | 60 +++++-- 4 files changed, 190 insertions(+), 43 deletions(-) diff --git a/web/src/types/api.ts b/web/src/types/api.ts index 52e0e9a..c6e0850 100644 --- a/web/src/types/api.ts +++ b/web/src/types/api.ts @@ -127,6 +127,8 @@ export interface IssueCountsOut { } /** Уровень строки ОСВ (DBML `osv_group_type`). */ export type OsvGroupType = 'ACCOUNT' | 'DEPARTMENT' | 'COUNTERPARTY' | 'CONTRACT' | 'OTHER'; +/** Вид сумм строки ОСВ (`osv_data_type`): BU, SUM — рубли; NU, CURRENCY, QUANTITY — строки-показатели под строкой БУ. */ +export type OsvDataType = 'BU' | 'NU' | 'CURRENCY' | 'QUANTITY' | 'SUM'; export interface EntryOut { id: string; @@ -136,6 +138,7 @@ export interface EntryOut { row_value: string | null; group_type: OsvGroupType | null; group_name: string | null; + data_type: OsvDataType | null; account_code: string | null; counterparty_name: string | null; counterparty_inn: string | null; diff --git a/web/src/widgets/DocumentReview/OsvDocument.tsx b/web/src/widgets/DocumentReview/OsvDocument.tsx index e162784..2e0661c 100644 --- a/web/src/widgets/DocumentReview/OsvDocument.tsx +++ b/web/src/widgets/DocumentReview/OsvDocument.tsx @@ -10,11 +10,15 @@ import { IssuesPanel } from './IssuesPanel'; import { confirmButtonStyle } from './ReviewCard'; import { expectedActualText, failureKey } from './checkText'; import { confirmErrorInfo } from './confirmError'; -import { AMOUNT_KEYS, type AmountKey, type OsvRow, flattenEntries } from './osvRows'; +import { AMOUNT_KEYS, type AmountKey, type OsvRow, filterRows, flattenEntries } from './osvRows'; import { osvBodyHeight } from './osvTableSize'; /** Ширина колонки суммы: «17 780 468 796,56» помещается в одну строку, «Итого по документу» не переносится и не обрезается. */ const MONEY_WIDTH = 160; +/** Отступ одного уровня вложенности в колонке аналитики, px. */ +const INDENT = 16; +/** Строки-группы (счёт, субсчёт, подразделение с вложенными строками) — жирным, как промежуточные итоги в 1С. */ +const groupRowStyle = { fontWeight: 600 }; const money = (key: AmountKey, title: string) => ({ key, @@ -48,7 +52,8 @@ function buildColumns(options: ColumnsOptions): ColumnsType { title: analyticsHint ? {analyticsTitle} : analyticsTitle, dataIndex: 'analytics', width: 320, - render: (v: string | null) => v ?? '—', + // отступ по уровню вложенности — дерево строк как в 1С + render: (v: string | null, row: OsvRow) => {v ?? '—'}, }, ...(hasCounterparties ? [{ key: 'inn', title: 'ИНН', dataIndex: 'inn', width: 120 }] : []), group('Сальдо на начало периода', [money('opening_debit', 'Дебет'), money('opening_credit', 'Кредит')]), @@ -57,15 +62,6 @@ function buildColumns(options: ColumnsOptions): ColumnsType { ]; } -/** Поиск по аналитике (и по ИНН, если он есть) без учёта регистра и фильтр по субсчёту — на клиенте: строки документа уже загружены целиком. */ -function filterRows(rows: OsvRow[], query: string, account: string | undefined): OsvRow[] { - const q = query.trim().toLowerCase(); - return rows.filter( - (row) => - (!account || row.account === account) && (!q || (row.analytics ?? '').toLowerCase().includes(q) || (row.inn ?? '').includes(q)), - ); -} - interface ConfirmProblem { code: string | undefined; message: string; @@ -164,7 +160,7 @@ export function OsvDocument({ document, onChanged }: { document: DocumentOut; on />