Селектор разрядности (AURORA-1650) считал базой рубли, хотя в базе суммы хранятся в тыс. руб. (формы 1/4, сателлиты формы 2, лимитные строки АХР после AURORA-1897). По умолчанию стояло «в руб.», и тысячи показывались под видом рублей; при выборе «в тыс. руб.» значения делились ещё раз. Делитель также применялся к количествам, площади, ставке НДС, курсу, кодам и ID — не только к деньгам. Редактор ячейки не учитывал разрядность. - web/src/components/RealtimeTable/utils/moneyUtils.js — новый модуль: UNIT_IN_RUB, getDisplayFactor(baseUnit, denomination), getMoneyUnit (денежная единица колонки по accessorKey/sheetName, с явным columnDef.moneyUnit как переопределением), TEXT_COLUMN_IDS (перенесён из Cell.jsx), resolveDenomination/DEFAULT_DENOMINATION, AHR_LIMIT_SHEET. Модуль не импортирует конфиги форм — работает под node --test. - useDenomination.js — значение по умолчанию 'thousand', ключ хранения со суффиксом _denomination_v2 (старые 'rub'/'thousand' больше не читаются со старым смыслом); getDenominationDivisor убран. - tableColumns.jsx/Cell.jsx — displayDivisor заменён на displayFactor (умножение, не деление), множитель считается на колонку через getMoneyUnit/getDisplayFactor с учётом sheetName; isEditable запрещает редактирование денежной ячейки, если разрядность не базовая; на листе AHR_LIMIT множитель всегда 1 (значения в рублях, как есть). - SettingPanel.jsx — селектор скрыт на листе AHR_LIMIT, рядом с ним подсказка «Ввод сумм — в тыс. руб.». - SvodPage/Svod2Page/ProjectSummariesPage — масштабирование по meta.money вместо regex по id/блок-листа текстовых id; построители колонок проставляют meta.money на денежных метриках. - DenominationSelect.jsx — «в млн руб.», «в млрд руб.» без точки. Тесты: web/src/components/RealtimeTable/utils/moneyUtils.test.js (node --test), полный набор web/src/components/RealtimeTable/utils — 52/52 зелёных. npm run build проходит. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
15 lines
601 B
JavaScript
15 lines
601 B
JavaScript
import { FormControl, MenuItem, Select } from '@mui/material';
|
||
|
||
const DenominationSelect = ({ value, onChange, minWidth = 140 }) => (
|
||
<FormControl size='small' sx={{ minWidth }}>
|
||
<Select value={value} onChange={(event) => onChange(event.target.value)} aria-label='Разрядность значений'>
|
||
<MenuItem value='rub'>в руб.</MenuItem>
|
||
<MenuItem value='thousand'>в тыс. руб.</MenuItem>
|
||
<MenuItem value='million'>в млн руб.</MenuItem>
|
||
<MenuItem value='billion'>в млрд руб.</MenuItem>
|
||
</Select>
|
||
</FormControl>
|
||
);
|
||
|
||
export default DenominationSelect;
|