From aa896cb80ead61d2342a714d022075835a1c66e1 Mon Sep 17 00:00:00 2001 From: loppi Date: Thu, 10 Apr 2025 12:36:59 +0700 Subject: [PATCH 01/10] [+] Added Cell.dropDownSelector() method #SCR-38 --- API/scripts.om.d.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/API/scripts.om.d.ts b/API/scripts.om.d.ts index 10f7372..0086aff 100644 --- a/API/scripts.om.d.ts +++ b/API/scripts.om.d.ts @@ -25,6 +25,21 @@ export interface Cell { dropDown(): Labels; getFormatType(): string; isEditable(): boolean; + dropDownSelector(): DropDownSelector; +} + +export interface DropDownSelector { + totalCount(): number; + /** + * @param chunkSize Default: 1000 + */ + generator(chunkSize: number | null): IterableIterator; +} + +export interface DropDownSelectorChunk { + start(): number; + count(): number; + all(): Label[]; } export interface Cells { From 7822db52a56ecd6842e2015fba274dddca260d37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9C=D0=B0?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D0=BE=D0=B2?= Date: Mon, 28 Apr 2025 14:44:16 +0300 Subject: [PATCH 02/10] file separation --- API/views.md | 389 ++------------------------------------------------- 1 file changed, 8 insertions(+), 381 deletions(-) diff --git a/API/views.md b/API/views.md index 5294b54..12249b7 100644 --- a/API/views.md +++ b/API/views.md @@ -113,7 +113,7 @@ cleanCellsData(cubesIdentifiers?: number[]): this; ```js cubeCellSelector(identifier: string | number): CubeCellSelectorBuilder; ``` -Возвращает интерфейс [`CubeCellSelectorBuilder`](./cubeCell.md#cube-cell-selector-builder) выборки клеток для куба `identifier`. `identifier` должен быть именем или [`longId`](#long-id) куба. При указании некорректного `identifier` выбрасывается исключение. +Возвращает интерфейс [`CubeCellSelectorBuilder`](./cubeCell.md#cube-cell-selector-builder) выборки клеток для куба `identifier`. `identifier` должен быть именем или [`longId`](./readingGrid.md#long-id) куба. При указании некорректного `identifier` выбрасывается исключение.   @@ -121,14 +121,14 @@ cubeCellSelector(identifier: string | number): CubeCellSelectorBuilder; cubeCellUpdater(identifier: string | number): CubeCellUpdaterBuilder; ``` -Возвращает интерфейс [`CubeCellUpdaterBuilder`](./cubeCell.md#cube-cell-updater-builder) обновления клеток куба с именем или идентификатором `identifier` по формуле. `identifier` должен быть именем или [`longId`](#long-id) куба. При указании некорректного `identifier` выбрасывается исключение. +Возвращает интерфейс [`CubeCellUpdaterBuilder`](./cubeCell.md#cube-cell-updater-builder) обновления клеток куба с именем или идентификатором `identifier` по формуле. `identifier` должен быть именем или [`longId`](./readingGrid.md#long-id) куба. При указании некорректного `identifier` выбрасывается исключение.   ```js getCubeInfo(identifier: string | number): CubeInfo; ``` -Возвращает интерфейс [`CubeInfo`](./cubeCell.md#cube-info) для получения информации о кубе `identifier`. `identifier` должен быть именем или [`longId`](#long-id) куба. При указании некорректного `identifier` выбрасывается исключение. +Возвращает интерфейс [`CubeInfo`](./cubeCell.md#cube-info) для получения информации о кубе `identifier`. `identifier` должен быть именем или [`longId`](./readingGrid.md#long-id) куба. При указании некорректного `identifier` выбрасывается исключение.   @@ -217,9 +217,9 @@ rowsFilter(data: string | string[] | number | number[]): this; `string[]` — массив названий строк; -`number` — [`longId`](#long-id) строки; +`number` — [`longId`](./readingGrid.md#long-id) строки; -`number[]` — массив [`longId`](#long-id) строк. +`number[]` — массив [`longId`](./readingGrid.md#long-id) строк. Возвращает `this`. @@ -235,7 +235,7 @@ columnsFilter(data: string | string[] | number | number[]): this; ```js withoutValues(): this; ``` -Устанавливает признак загрузки с сервера данных без значений ячеек. В этом случае функции интерфейса [`Cell`](#cell) [`getValue()`](#cell.get-value), [`getNativeValue()`](#cell.get-native-value) и [`getContextValue()`](#get-context-value) будут возвращать `null`, однако функции [`Cell`](#cell).[`setValue()`](#cell.set-value), [`Cells`](#cells).[`setValue()`](#cells.set-value) и [`CellBuffer`](./common.md#cell-buffer).[`apply()`](./common.md#cell-buffer.apply) не теряют свою магическую силу. Возвращает `this`. +Устанавливает признак загрузки с сервера данных без значений ячеек. В этом случае функции интерфейса [`Cell`](./readingGrid.md#cell) [`getValue()`](./readingGrid.md#cell.get-value), [`getNativeValue()`](./readingGrid.md#cell.get-native-value) и [`getContextValue()`](./readingGrid.md#get-context-value) будут возвращать `null`, однако функции [`Cell`](./readingGrid.md#cell).[`setValue()`](./readingGrid.md#cell.set-value), [`Cells`](./readingGrid.md#cells).[`setValue()`](./readingGrid.md#cells.set-value) и [`CellBuffer`](./common.md#cell-buffer).[`apply()`](./common.md#cell-buffer.apply) не теряют свою магическую силу. Возвращает `this`. Эта функция существенно ускоряет работу в тех случаях, когда нужно записать данные, но не читать их. @@ -245,11 +245,11 @@ withoutValues(): this; ```js addDependentContext(identifier: number): this; ``` -Добавляет в фильтр по строкам весь зависимый контекст переданного [`longId`](#long-id) `identifier`: материнские и дочерние элементы всех уровней. +Добавляет в фильтр по строкам весь зависимый контекст переданного [`longId`](./readingGrid.md#long-id) `identifier`: материнские и дочерние элементы всех уровней. Если эта функция многократно вызывается с аргументами, один из которых является потомком остальных (порядок вызовов не имеет значения), то это считается уточнением запроса, и результат будет равносилен однократному вызову с этим аргументом. -Если для полученного [`Grid`](#grid) установлен фильтр [`GridPageSelector`](#grid-page-selector) (или несколько), а `identifier` — это [`longId`](#long-id) элемента измерения одного из этих фильтров, то в соответствующем фильтре будет программно установлен этот элемент. +Если для полученного [`Grid`](#grid) установлен фильтр [`GridPageSelector`](#grid-page-selector) (или несколько), а `identifier` — это [`longId`](./readingGrid.md#long-id) элемента измерения одного из этих фильтров, то в соответствующем фильтре будет программно установлен этот элемент. Возвращает `this`. @@ -481,379 +481,6 @@ for (const chunk of range.generator(1000)) {   -### Интерфейс GridRangeChunk -```ts -interface GridRangeChunk { - cells(): Cells; - rows(): Labels; - columns(): Labels; -} -``` -Интерфейс для обработки куска [`GridRange`](#grid-range). - -  - -```js -cells(): Cells; -``` -Возвращает ссылку на набор ячеек [`Cells`](#cells) текущего куска. - -  - -```js -rows(): Labels; -``` -Возвращает интерфейс [`Labels`](#labels), представляющий заголовки строк. - -  - -```js -columns(): Labels; -``` -Возвращает интерфейс [`Labels`](#labels), представляющий заголовки столбцов. - -  - -### Интерфейс Labels -```ts -interface Labels { - start(): number; - count(): number; - all(): LabelsGroup[]; - get(index: number): LabelsGroup | null; - chunkInstance(): GridRangeChunk; - findLabelByLongId(longId: number): Label | null; -} -``` -Интерфейс, представляющий набор объектов [`LabelsGroup`](#labels-group), то есть набор заголовков строк/столбцов с их возможно многоуровневой структурой. Как правило, его можно получить функциями интерфейса [`GridRangeChunk`](#grid-range-chunk). - -  - -```js -start(): number; -``` -Возвращает номер первой строки/столбца текущего [`GridRangeChunk`](#grid-range-chunk) в таблице [`Grid`](#grid). - -  - -```js -count(): number; -``` -Возвращает количество строк/столбцов в наборе. - -Если `this` относится к строкам, то это значение, которое было посчитано в функции [`GridRange`](#grid-range).[`generator(size)`](#generator) на основе аргумента `size`. - -Если `this` относится к столбцам, то это в точности значение аргумента `columnCount` функции [`Grid`](#grid).[`range(rowStart, rowCount, columnStart, columnCount)`](#range). - -  - -```js -all(): LabelsGroup[]; -``` -Возвращает массив объектов заголовков каждой строки/столбца [`LabelsGroup`](#labels-group). - -  - -```js -get(index: number): LabelsGroup | null; -``` -Аналог `all()[index]`. В случае некорректного индекса возвращает `null`. - -  - -```js -chunkInstance(): GridRangeChunk; -``` -Возвращает обратную ссылку на [`GridRangeChunk`](#grid-range-chunk), из которого был получен `this`. - -  - -```js -findLabelByLongId(longId: number): Label | null; -``` -Возвращает объект [`Label`](#label) по его [`longId`](#long-id), если он присутствует в `this`, иначе — `null`. - -  - -## Интерфейс LabelsGroup -```ts -interface LabelsGroup { - all(): Label[]; - first(): Label; - cells(): Cells; -} -``` -Интерфейс, представляющий многоуровневый набор заголовков конкретной строки или столбца. - -  - -```js -all(): Label[]; -``` -Возвращает массив конкретных заголовков [`Label`](#label). - -  - -```js -first(): Label; -``` -Аналог `all()[0]`. - -  - -```js -cells(): Cells; -``` -Возвращает интерфейс [`Cells`](#cells), предоставляющий доступ к ячейкам данной строки или столбца. - -В случае плоской таблицы [`возвращает`](../appendix/constraints.md#flat-table) `null`. - -  - -### Интерфейс EntityInfo (Label) -```ts -interface Label { - longId(): number; - name(): string; - code(): string | null; - alias(): string; - label(): string; - parentLongId(): number; - hierarchyLongId(): number; -} - -interface EntityInfo = Label; -``` -Интерфейс сущности. Как правило, представляет собой один из заголовков строки или столбца. - -  - - -```js -longId(): number; -``` -Возвращает внутренний идентификатор сущности в системе, уникальный в пределах модели. - -  - - -```js -name(): string; -``` -Возвращает имя сущности. - -  - -```js -code(): string; -``` -Возвращает код сущности. В Optimacros всего две сущности могут иметь код: элементы справочников и кубы. - -  - - -```js -alias(): string; -``` -Возвращает отображаемое имя. - -Если `this` является сущностью элемента справочника, в настройках которого задано некоторое свойство в качестве отображаемого имени (опция `Отображение`), и для этой сущности задано значение этого свойства, то возвращает значение этого свойства. - -Иначе возвращает [`name()`](#label.name). - -  - -```js -label(): string; -``` -То же, что и [`alias()`](#alias). - -  - -```js -parentLongId(): number; -``` -Если сущность является элементом, у которого есть родительский элемент, то возвращает [`longId`](#long-id) сущности родителя. - -Если родительской сущности нет, возвращает `-1`. - -  - -```js -hierarchyLongId(): number; -``` -Если сущность является элементом или сабсетом справочника (включая справочники времени и версий), возвращает [`longId`](#long-id) самого справочника. Если родительского справочника нет, возвращает `-1`. На данный момент этот метод может некорректно работать в зависимости от способа получения `EntityInfo`, для корректной работы рекомендуется получать сущность с помощью интерфейса [`EntitiesInfo`](./common.md#entities-info). - -  - -### Интерфейс Cells -```ts -interface Cells { - all(): Cell[]; - first(): Cell | null; - setValue(value: number | string | boolean | null): this; - count(): number; - chunkInstance(): GridRangeChunk; - getByIndexes(indexes: number[]): Cells; -} -``` -Интерфейс, представляющий (как правило, прямоугольный) набор клеток таблицы. - -  - -```js -all(): Cell[]; -``` -Возвращает одномерный массив всех клеток [`Cell`](#cell). - -  - -```js -first(): Cell | null; -``` -Аналог `all()[0]`. Возвращает `null`, если массив клеток пустой. - -  - - -```js -setValue(value: number | string | boolean | null): this; -``` -Устанавливает одно и то же значение для всех клеток. Отрабатывает в момент вызова и мгновенно приводит к пересчёту зависимых от них клеток. Поэтому ***не*** рекомендуется к использованию в больших мультикубах. Возвращает `this`. - -  - -```js -count(): number; -``` -Возвращает количество клеток в наборе. - -  - - -```js -chunkInstance(): GridRangeChunk; -``` -Возвращает обратную ссылку на [`GridRangeChunk`](#grid-range-chunk), из которого был получен `this`. - -  - -```js -getByIndexes(indexes: number[]): Cells; -``` -Производит выборку из одномерного представления клеток объекта `this` по индексам `indexes` и возвращает новый объект [`Cells`](#cells). В этом случае функция [`chunkInstance()`](#chunk-instance) для нового объекта будет возвращать ссылку на тот же самый объект [`GridRangeChunk`](#grid-range-chunk), что и для `this`. Это *единственный* способ создать непрямоугольный объект [`Cells`](#cells). - -  - -### Интерфейс Cell -```ts -interface Cell { - setValue(value: number | string | boolean | null): this; - - getValue(): number | string | null; - getVisualValue(): string | null; - getNativeValue(): number | string | null; - getContextValue(): string | null; - - definitions(): number[]; - columns(): LabelsGroup | null; - rows(): LabelsGroup | null; - - dropDown(): Labels; - getFormatType(): string; - isEditable(): boolean; -} -``` -Интерфейс, представляющий клетку таблицы. - -  - - -```js -setValue(value: number | string | boolean | null): this; -``` -Устанавливает значение клетки. Отрабатывает в момент вызова и мгновенно приводит к пересчёту зависимых клеток. Поэтому ***не*** рекомендуется к использованию в больших мультикубах. Возвращает `this`. - -  - - -```js -getValue(): number | string | null; -``` -Возвращает значение клетки, которое видит пользователь. Если клетка имеет логический формат, то возвращается строковое значение `'true'` или `'false'`. - -  - -```js -getVisualValue(): string | null; -``` -Возвращает отображаемое значение в ячейке, если куб в формате даты или справочника, для других форматов куба возвращает `null`. - -  - - -```js -getNativeValue(): number | string | null; -``` -Возвращает самородное значение клетки, зависящее от формата. Если клетка имеет формат справочника, то возвращается [`longId`](#long-id). - -В противном случае возвращает то же, что и [`getValue()`](#cell.get-value). - -  - - -```js -getContextValue(): string | null; -``` -Если ячейка имеет формат справочника, в настройках которого задано некоторое свойство `prop` в качестве отображаемого имени (опция `Отображение`), и для этой ячейки задано значение этого свойства, то возвращает строку, состоящую из имени, двойной вертикальной черты и значения свойства `prop`, например, `'#5||Берлин'`. - -В противном случае возвращает `null`. - -  - -```js -definitions(): number[]; -``` -То же, что и [`CubeCell.definitions()`](./cubeCell.md#cube-cell.definitions). - -  - -```js -columns(): LabelsGroup | null; -``` -Возвращает многоуровневый набор заголовков [`LabelsGroup`](#labels-group) конкретного столбца, или `null`, если у клетки нет измерений на столбцах. - -  - -```js -rows(): LabelsGroup | null; -``` -Возвращает многоуровневый набор заголовков [`LabelsGroup`](#labels-group) конкретной строки, или `null`, если у клетки нет измерений на строках. - -  - -```js -dropDown(): Labels; -``` -Возвращает набор заголовков строк [`Labels`](#labels) выпадающего списка, который в интерфейсе пользователя Optimacros можно получить кликом по треугольнику внутри ячейки. Эта функция считается неэффективной, так как выгружает справочник целиком. Лучше зайти в нужный справочник и итерироваться по нему. - -  - -```js -getFormatType(): string; -``` -Возвращает строку с форматом клетки. Возможные значения: `'NUMBER'`, `'BOOLEAN'`, -`'ENTITY'`, `'TIME_ENTITY'`, `'LINE_ITEM_SUBSET'`, `'VERSION'`, `'TEXT'`, `'DATE'`, `'NONE'`. - -  - -```js -isEditable(): boolean; -``` -Возвращает признак возможности редактирования ячейки пользователем. - -  - [API Reference](API.md) [Оглавление](../README.md) From cf4db7ad3163317563bb9c57e0b0724df1df08e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9C=D0=B0?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D0=BE=D0=B2?= Date: Mon, 28 Apr 2025 15:55:48 +0300 Subject: [PATCH 03/10] refactoring --- API/audit.md | 4 +- API/common.md | 93 +++++++++- API/cubeCell.md | 8 +- API/dimensions.md | 2 +- API/elementsManipulator.md | 12 +- API/readingGrid.md | 308 +++++++++++++++++++++++++++++++++ API/scriptChains.md | 10 +- API/variables.md | 2 +- API/views.md | 18 +- appendix/constraints.md | 40 +---- cookBook/rowsColumnsFilters.md | 2 +- 11 files changed, 427 insertions(+), 72 deletions(-) create mode 100644 API/readingGrid.md diff --git a/API/audit.md b/API/audit.md index 973a142..b07489e 100644 --- a/API/audit.md +++ b/API/audit.md @@ -93,9 +93,9 @@ eventTypeFilter(data: string | number | (string | number)[]): this; - `string` — название типа события, -- `number` — [`longId`](./views.md#long-id) типа события, +- `number` — [`longId`](./common.md#long-id) типа события, -- `(string | number)[]` — массив (возможно, смешанный) названий и [`longId`](./views.md#long-id) типов событий. +- `(string | number)[]` — массив (возможно, смешанный) названий и [`longId`](./common.md#long-id) типов событий. Возвращает `this`. diff --git a/API/common.md b/API/common.md index 9e1b410..64d4273 100644 --- a/API/common.md +++ b/API/common.md @@ -400,7 +400,7 @@ recalculate(): boolean; ```js backup(path?: string): EntityInfo | boolean; ``` -Сохраняет резервную копию в логах модели: в интерфейсе Optimacros на вкладке `Центр безопастности`->`Логи`->`Резервные копии`. Если указан путь `path`, после создания копии вызовется функция `export()` и вернётся её результат типа `boolean`. Если `path` не указан, возвращает сущность резервной копии в виде [`EntityInfo`](./views.md#entity-info). +Сохраняет резервную копию в логах модели: в интерфейсе Optimacros на вкладке `Центр безопастности`->`Логи`->`Резервные копии`. Если указан путь `path`, после создания копии вызовется функция `export()` и вернётся её результат типа `boolean`. Если `path` не указан, возвращает сущность резервной копии в виде [`EntityInfo`](./common.md#entity-info).   @@ -587,7 +587,7 @@ interface UserInfo { ```js getEntity(): EntityInfo; ``` -Возвращает сущность пользователя в виде [`EntityInfo`](./views.md#entity-info). +Возвращает сущность пользователя в виде [`EntityInfo`](./common.md#entity-info).   @@ -615,7 +615,7 @@ getLastName(): string; ```js getRole(): EntityInfo; ``` -Возвращает сущность роли пользователя в виде [`EntityInfo`](./views.md#entity-info). +Возвращает сущность роли пользователя в виде [`EntityInfo`](./common.md#entity-info).   @@ -653,6 +653,81 @@ setProperty(name: string, value: any): this;   +### Интерфейс EntityInfo (Label) +```ts +interface Label { + longId(): number; + name(): string; + code(): string | null; + alias(): string; + label(): string; + parentLongId(): number; + hierarchyLongId(): number; +} + +``` +Интерфейс сущности. Как правило, представляет собой один из заголовков строки или столбца. + +  + + +```js +longId(): number; +``` +Возвращает внутренний идентификатор сущности в системе, уникальный в пределах модели. + +  + + +```js +name(): string; +``` +Возвращает имя сущности. + +  + +```js +code(): string; +``` +Возвращает код сущности. В Optimacros всего две сущности могут иметь код: элементы справочников и кубы. + +  + + +```js +alias(): string; +``` +Возвращает отображаемое имя. + +Если `this` является сущностью элемента справочника, в настройках которого задано некоторое свойство в качестве отображаемого имени (опция `Отображение`), и для этой сущности задано значение этого свойства, то возвращает значение этого свойства. + +Иначе возвращает [`name()`](#label.name). + +  + +```js +label(): string; +``` +То же, что и [`alias()`](#alias). + +  + +```js +parentLongId(): number; +``` +Если сущность является элементом, у которого есть родительский элемент, то возвращает [`longId`](#long-id) сущности родителя. + +Если родительской сущности нет, возвращает `-1`. + +  + +```js +hierarchyLongId(): number; +``` +Если сущность является элементом или сабсетом справочника (включая справочники времени и версий), возвращает [`longId`](#long-id) самого справочника. Если родительского справочника нет, возвращает `-1`. На данный момент этот метод может некорректно работать в зависимости от способа получения `EntityInfo`, для корректной работы рекомендуется получать сущность с помощью интерфейса [`EntitiesInfo`](#entities-info). + +  + ### Интерфейс EntitiesInfo ```ts interface EntitiesInfo { @@ -660,21 +735,21 @@ interface EntitiesInfo { getCollection(longId: number[]): EntityInfo[]; } ``` -Интерфейс для получения сущности по [`longId`](./views.md#long-id). +Интерфейс для получения сущности по [`longId`](./common.md#long-id).   ```js get(longId: number): EntityInfo | null; ``` -Возвращает сущность [`EntityInfo`](./views.md#entity-info) по её [`longId`](./views.md#long-id). +Возвращает сущность [`EntityInfo`](#entity-info) по её [`longId`](#long-id).   ```js getCollection(longId: number[]): EntityInfo[]; ``` -Возвращает массив сущностей [`EntityInfo`](./views.md#entity-info) по массиву их [`longId`](./views.md#long-id). Корректно работает, только если все переданные `longId` корректные (существуют в модели). Иначе возвращает массив меньшей размерности. Использовать с осторожностью. Порядок возвращаемых сущностей `EntityInfo` может отличаться от порядка переданных `longId`. +Возвращает массив сущностей [`EntityInfo`](#entity-info) по массиву их [`longId`](#long-id). Корректно работает, только если все переданные `longId` корректные (существуют в модели). Иначе возвращает массив меньшей размерности. Использовать с осторожностью. Порядок возвращаемых сущностей `EntityInfo` может отличаться от порядка переданных `longId`.   @@ -703,14 +778,14 @@ interface CopyData { ```js setSourceLongId(longId: number): this; ``` -Устанавливает [`longId`](./views.md#long-id) элемента-источника *заданного измерения*. +Устанавливает [`longId`](#long-id) элемента-источника *заданного измерения*.   ```js setDestLongId(longId: number): this; ``` -Устанавливает [`longId`](./views.md#long-id) элемента-приёмника *заданного измерения*. +Устанавливает [`longId`](#long-id) элемента-приёмника *заданного измерения*.   @@ -731,7 +806,7 @@ enableCustomProperties(): this; ```js setMulticubeLongIds(longIds: number[]): this; ``` -Предписывает произвести копирование в указанных по [`longId`](./views.md#long-id) мультикубах, которые содержат *заданное измерение*. +Предписывает произвести копирование в указанных по [`longId`](#long-id) мультикубах, которые содержат *заданное измерение*.   diff --git a/API/cubeCell.md b/API/cubeCell.md index c2d30fa..83f9b38 100644 --- a/API/cubeCell.md +++ b/API/cubeCell.md @@ -37,7 +37,7 @@ getDimensionIds(): number[]; ```js getDimensionItems(): EntityInfo[]; ``` -Возвращает массив [`EntityInfo`](./views.md#entity-info) элементов измерений куба, которыми определена клетка. Порядок измерений фиксирован и соответствует порядку, в котором их же возвращает функция [`CubeInfo.getDimensions()`](#cube-info.get-dimensions). +Возвращает массив [`EntityInfo`](./common.md#entity-info) элементов измерений куба, которыми определена клетка. Порядок измерений фиксирован и соответствует порядку, в котором их же возвращает функция [`CubeInfo.getDimensions()`](#cube-info.get-dimensions).   @@ -56,7 +56,7 @@ interface CubeInfo extends EntityInfo { getDimensions(): EntityInfo[]; } ``` -Интерфейс информации о кубе. Интерфейс наследуется от [`EntityInfo`](./views.md#entity-info). +Интерфейс информации о кубе. Интерфейс наследуется от [`EntityInfo`](./common.md#entity-info).   @@ -78,7 +78,7 @@ getFormatInfo(): CubeFormatInfo; ```js getDimensions(): EntityInfo[]; ``` -Возвращает массив [`EntityInfo`](./views.md#entity-info) измерений куба. +Возвращает массив [`EntityInfo`](./common.md#entity-info) измерений куба.   @@ -96,7 +96,7 @@ interface CubeFormatInfo { ```js getFormatTypeEntity(): EntityInfo; ``` -Возвращает сущность [`EntityInfo`](./views.md#entity-info) формата куба. Возможные форматы: `'Number'`, `'Text'`, `'Boolean'`, `'Date'`, `'Entity'`, `'Time Entity'`, `'Version'`, `'Line Item Subset'`, `'None'`. +Возвращает сущность [`EntityInfo`](./common.md#entity-info) формата куба. Возможные форматы: `'Number'`, `'Text'`, `'Boolean'`, `'Date'`, `'Entity'`, `'Time Entity'`, `'Version'`, `'Line Item Subset'`, `'None'`.   diff --git a/API/dimensions.md b/API/dimensions.md index 7887860..1e26213 100644 --- a/API/dimensions.md +++ b/API/dimensions.md @@ -348,7 +348,7 @@ interface TimeOptionsTab extends Tab { applyForm(): Object; } ``` -Вкладка `Время`. Интерфейс наследуется от [`Tab`](./views.md#tab). Является [`плоской таблицей`](../appendix/constraints.md#flat-table). Кроме того, является формой, аналогичной форме HTML: после изменения значений ячейки/ячеек требуется ещё вызвать функцию `applyForm()` для применения новых данных к модели. +Вкладка `Время`. Интерфейс наследуется от [`Tab`](./views.md#tab). Является [`плоской таблицей`](../appendix/constraints.md#labelless-table). Кроме того, является формой, аналогичной форме HTML: после изменения значений ячейки/ячеек требуется ещё вызвать функцию `applyForm()` для применения новых данных к модели.   diff --git a/API/elementsManipulator.md b/API/elementsManipulator.md index 456a9d5..363855d 100644 --- a/API/elementsManipulator.md +++ b/API/elementsManipulator.md @@ -43,14 +43,14 @@ interface BaseElementsCreator { ```js setPositionAfter(relativeLongId: number): this; ``` -Устанавливает позицию добавления после [`relativeLongId`](./views.md#long-id). Возвращает `this`. +Устанавливает позицию добавления после [`relativeLongId`](./common.md#long-id). Возвращает `this`.   ```js setPositionBefore(relativeLongId: number): this; ``` -Устанавливает позицию добавления до [`relativeLongId`](./views.md#long-id). Возвращает `this`. +Устанавливает позицию добавления до [`relativeLongId`](./common.md#long-id). Возвращает `this`.   @@ -72,14 +72,14 @@ setPositionEnd(): this; ```js setPositionChildOf(parentLongId: number): this; ``` -Устанавливает позицию добавления элемента как дочернего для [`parentLongId`](./views.md#long-id). Возвращает `this`. +Устанавливает позицию добавления элемента как дочернего для [`parentLongId`](./common.md#long-id). Возвращает `this`.   ```js create(): number[]; ``` -Добавляет элементы и возвращает массив их [`longId`](./views.md#long-id). +Добавляет элементы и возвращает массив их [`longId`](./common.md#long-id).   @@ -131,7 +131,7 @@ interface ElementsDeleter { ```js appendIdentifier(identifier: number): this; ``` -Добавляет в буфер элемент, чей [`longId`](./views.md#long-id) равен `identifier`. Повторное добавление элемента в очередь **не** приводит к ошибкам. Возращает `this`. +Добавляет в буфер элемент, чей [`longId`](./common.md#long-id) равен `identifier`. Повторное добавление элемента в очередь **не** приводит к ошибкам. Возращает `this`.   @@ -160,7 +160,7 @@ interface ElementsReorder { ```js append(longId: number, relativeLongId?: number, position?: string): this; ``` -Добавляет в очередь данные о [`longId`](./views.md#long-id) элемента, который впоследствии будет позиционирован относительно элемента `relativeLongId` (значение по умолчанию: `-1`). Возвращает `this`. Способ позиционирования задаёт аргумент `position` (регистр имеет значение): +Добавляет в очередь данные о [`longId`](./common.md#long-id) элемента, который впоследствии будет позиционирован относительно элемента `relativeLongId` (значение по умолчанию: `-1`). Возвращает `this`. Способ позиционирования задаёт аргумент `position` (регистр имеет значение): `'Before'` — непосредственно перед `relativeLongId`; diff --git a/API/readingGrid.md b/API/readingGrid.md new file mode 100644 index 0000000..d6c41a8 --- /dev/null +++ b/API/readingGrid.md @@ -0,0 +1,308 @@ +# Интерфейсы для чтения представления в виде таблицы + +## Интерфейс GridRangeChunk +```ts +interface GridRangeChunk { + cells(): Cells; + rows(): Labels; + columns(): Labels; +} +``` +Интерфейс для обработки части строк [`GridRange`](./views.md#grid-range) — чанка. Содержит информацию о заголовках (возможно многоуровневых) и ячейках двумерной таблицы. + +  + +```js +cells(): Cells; +``` +Возвращает ссылку на набор ячеек [`Cells`](#cells) текущего чанка. + +  + +```js +rows(): Labels; +``` +Возвращает интерфейс [`Labels`](#labels), представляющий заголовки строк. + +  + +```js +columns(): Labels; +``` +Возвращает интерфейс [`Labels`](#labels), представляющий заголовки столбцов. + +  + +### Интерфейс Labels +```ts +interface Labels { + start(): number; + count(): number; + all(): LabelsGroup[]; + get(index: number): LabelsGroup | null; + chunkInstance(): GridRangeChunk; + findLabelByLongId(longId: number): Label | null; +} +``` +Интерфейс, представляющий набор объектов [`LabelsGroup`](#labels-group), то есть набор заголовков строк/столбцов с их возможно многоуровневой структурой. Как правило, его можно получить функциями интерфейса [`GridRangeChunk`](#grid-range-chunk). + +  + +```js +start(): number; +``` +Возвращает номер первой строки/столбца текущего [`GridRangeChunk`](#grid-range-chunk) в таблице [`Grid`](./views.md#grid). + +  + +```js +count(): number; +``` +Возвращает количество строк/столбцов в наборе. + +Если `this` относится к строкам, то это значение, которое было посчитано в функции [`GridRange`](./views.md#grid-range).[`generator(size)`](./views.md#generator) на основе аргумента `size`. + +Если `this` относится к столбцам, то это в точности значение аргумента `columnCount` функции [`Grid`](./views.md#grid).[`range(rowStart, rowCount, columnStart, columnCount)`](./views.md#range). + +  + +```js +all(): LabelsGroup[]; +``` +Возвращает массив объектов заголовков каждой строки/столбца [`LabelsGroup`](#labels-group). + +  + +```js +get(index: number): LabelsGroup | null; +``` +Аналог `all()[index]`. В случае некорректного индекса возвращает `null`. + +  + +```js +chunkInstance(): GridRangeChunk; +``` +Возвращает обратную ссылку на [`GridRangeChunk`](#grid-range-chunk), из которого был получен `this`. + +  + +```js +findLabelByLongId(longId: number): Label | null; +``` +Возвращает объект [`Label`](#label) по его [`longId`](./common.md#long-id), если он присутствует в `this`, иначе — `null`. + +  + +## Интерфейс LabelsGroup +```ts +interface LabelsGroup { + all(): Label[]; + first(): Label; + cells(): Cells; +} +``` +Интерфейс, представляющий многоуровневый набор заголовков конкретной строки или столбца. + +  + +```js +all(): Label[]; +``` +Возвращает массив конкретных заголовков [`Label`](#label). + +  + +```js +first(): Label; +``` +Аналог `all()[0]`. + +  + +```js +cells(): Cells; +``` +Возвращает интерфейс [`Cells`](#cells), предоставляющий доступ к ячейкам данной строки или столбца. + +  + +### Интерфейс Label +```ts +interface Label = EntityInfo; +``` +Интерфейс сущности, полученный при чтении грида (таблицы). Как правило, представляет собой один из заголовков строки или столбца. Должен быть идентичен интерфейсу [`EntitiesInfo`](./common.md#entities-info), но может отличаться. Поэтому рекомендуется получить [`longId`](./common.md#long-id) сущности с помощью этого интерфейса, а затем получить [`EntitiesInfo`](./common.md#entities-info) с помощью метода [`EntitiesInfo.get()`](./common.md#entities-info). + +  + +### Интерфейс Cells +```ts +interface Cells { + all(): Cell[]; + first(): Cell | null; + setValue(value: number | string | boolean | null): this; + count(): number; + chunkInstance(): GridRangeChunk; + getByIndexes(indexes: number[]): Cells; +} +``` +Интерфейс, представляющий (как правило, прямоугольный) набор клеток таблицы. + +  + +```js +all(): Cell[]; +``` +Возвращает одномерный массив всех клеток [`Cell`](#cell). + +  + +```js +first(): Cell | null; +``` +Аналог `all()[0]`. Возвращает `null`, если массив клеток пустой. + +  + + +```js +setValue(value: number | string | boolean | null): this; +``` +Устанавливает одно и то же значение для всех клеток. Отрабатывает в момент вызова и мгновенно приводит к пересчёту зависимых от них клеток. Поэтому ***не*** рекомендуется к использованию в больших мультикубах. Возвращает `this`. + +  + +```js +count(): number; +``` +Возвращает количество клеток в наборе. + +  + + +```js +chunkInstance(): GridRangeChunk; +``` +Возвращает обратную ссылку на [`GridRangeChunk`](#grid-range-chunk), из которого был получен `this`. + +  + +```js +getByIndexes(indexes: number[]): Cells; +``` +Производит выборку из одномерного представления клеток объекта `this` по индексам `indexes` и возвращает новый объект [`Cells`](#cells). В этом случае функция [`chunkInstance()`](#chunk-instance) для нового объекта будет возвращать ссылку на тот же самый объект [`GridRangeChunk`](#grid-range-chunk), что и для `this`. Это *единственный* способ создать непрямоугольный объект [`Cells`](#cells). + +  + +### Интерфейс Cell +```ts +interface Cell { + setValue(value: number | string | boolean | null): this; + + getValue(): number | string | null; + getVisualValue(): string | null; + getNativeValue(): number | string | null; + getContextValue(): string | null; + + definitions(): number[]; + columns(): LabelsGroup | null; + rows(): LabelsGroup | null; + + dropDown(): Labels; + getFormatType(): string; + isEditable(): boolean; +} +``` +Интерфейс, представляющий клетку таблицы. + +  + + +```js +setValue(value: number | string | boolean | null): this; +``` +Устанавливает значение клетки. Отрабатывает в момент вызова и мгновенно приводит к пересчёту зависимых клеток. Поэтому ***не*** рекомендуется к использованию в больших мультикубах. Возвращает `this`. + +  + + +```js +getValue(): number | string | null; +``` +Возвращает значение клетки, которое видит пользователь. Если клетка имеет логический формат, то возвращается строковое значение `'true'` или `'false'`. + +  + +```js +getVisualValue(): string | null; +``` +Возвращает отображаемое значение в ячейке, если куб в формате даты или справочника, для других форматов куба возвращает `null`. + +  + + +```js +getNativeValue(): number | string | null; +``` +Возвращает самородное значение клетки, зависящее от формата. Если клетка имеет формат справочника, то возвращается [`longId`](./common.md#long-id). + +В противном случае возвращает то же, что и [`getValue()`](#cell.get-value). + +  + + +```js +getContextValue(): string | null; +``` +Если ячейка имеет формат справочника, в настройках которого задано некоторое свойство `prop` в качестве отображаемого имени (опция `Отображение`), и для этой ячейки задано значение этого свойства, то возвращает строку, состоящую из имени, двойной вертикальной черты и значения свойства `prop`, например, `'#5||Берлин'`. + +В противном случае возвращает `null`. + +  + +```js +definitions(): number[]; +``` +То же, что и [`CubeCell.definitions()`](./cubeCell.md#cube-cell.definitions). + +  + +```js +columns(): LabelsGroup | null; +``` +Возвращает многоуровневый набор заголовков [`LabelsGroup`](#labels-group) конкретного столбца, или `null`, если у клетки нет измерений на столбцах. + +  + +```js +rows(): LabelsGroup | null; +``` +Возвращает многоуровневый набор заголовков [`LabelsGroup`](#labels-group) конкретной строки, или `null`, если у клетки нет измерений на строках. + +  + +```js +dropDown(): Labels; +``` +Возвращает набор заголовков строк [`Labels`](#labels) выпадающего списка, который в интерфейсе пользователя Optimacros можно получить кликом по треугольнику внутри ячейки. Эта функция считается неэффективной, так как выгружает справочник целиком. Лучше зайти в нужный справочник и итерироваться по нему. + +  + +```js +getFormatType(): string; +``` +Возвращает строку с форматом клетки. Возможные значения: `'NUMBER'`, `'BOOLEAN'`, +`'ENTITY'`, `'TIME_ENTITY'`, `'LINE_ITEM_SUBSET'`, `'VERSION'`, `'TEXT'`, `'DATE'`, `'NONE'`. + +  + +```js +isEditable(): boolean; +``` +Возвращает признак возможности редактирования ячейки пользователем. + +  + +[API Reference](API.md) + +[Оглавление](../README.md) diff --git a/API/scriptChains.md b/API/scriptChains.md index 835d42f..0f13a59 100644 --- a/API/scriptChains.md +++ b/API/scriptChains.md @@ -18,7 +18,7 @@ interface ResultActionsInfo { ```js makeMacrosAction(identifier: string | number): ResultMacrosAction; ``` -Создаёт и возвращает действие [`ResultMacrosAction`](#result-macros-action) запуска существующего в модели скрипта. Аргумент `identifier` означает имя или [`longId`](./views.md#long-id) скрипта. +Создаёт и возвращает действие [`ResultMacrosAction`](#result-macros-action) запуска существующего в модели скрипта. Аргумент `identifier` означает имя или [`longId`](./common.md#long-id) скрипта.   @@ -32,28 +32,28 @@ makeCodeExecutionAction(code: string): CodeExecutionAction; ```js makeDashboardOpenAction(identifier: string | number): ResultOpenAction; ``` -Создаёт и возвращает действие [`ResultOpenAction`](#result-open-action) открытия существующего в модели дашборда. Аргумент `identifier` означает имя или [`longId`](./views.md#long-id) дашборда. +Создаёт и возвращает действие [`ResultOpenAction`](#result-open-action) открытия существующего в модели дашборда. Аргумент `identifier` означает имя или [`longId`](./common.md#long-id) дашборда.   ```js makeContextTableOpenAction(identifier: string | number): ResultOpenAction; ``` -Создаёт и возвращает действие [`ResultOpenAction`](#result-open-action) открытия существующей в модели контекстной таблицы. Аргумент `identifier` означает имя или [`longId`](./views.md#long-id) контекстной таблицы. +Создаёт и возвращает действие [`ResultOpenAction`](#result-open-action) открытия существующей в модели контекстной таблицы. Аргумент `identifier` означает имя или [`longId`](./common.md#long-id) контекстной таблицы.   ```js makeMulticubeViewOpenAction(multicube: string | number, view?: string | number | null): ResultOpenAction; ``` -Создаёт и возвращает действие [`ResultOpenAction`](#result-open-action) открытия существующего в модели мультикуба. Аргумент `identifier` означает имя или [`longId`](./views.md#long-id) мультикуба, `view` означает имя или [`longId`](./views.md#long-id) представления. +Создаёт и возвращает действие [`ResultOpenAction`](#result-open-action) открытия существующего в модели мультикуба. Аргумент `identifier` означает имя или [`longId`](./common.md#long-id) мультикуба, `view` означает имя или [`longId`](./common.md#long-id) представления.   ```js makeListViewOpenAction(list: string | number, view?: string | number | null): ResultOpenAction; ``` -Создаёт и возвращает действие [`ResultOpenAction`](#result-open-action) открытия существующего в модели справочника. Аргумент `identifier` означает имя или [`longId`](./views.md#long-id) справочника, `view` означает имя или [`longId`](./views.md#long-id) представления. +Создаёт и возвращает действие [`ResultOpenAction`](#result-open-action) открытия существующего в модели справочника. Аргумент `identifier` означает имя или [`longId`](./common.md#long-id) справочника, `view` означает имя или [`longId`](./common.md#long-id) представления.   diff --git a/API/variables.md b/API/variables.md index 29a644c..f6c3a0f 100644 --- a/API/variables.md +++ b/API/variables.md @@ -31,7 +31,7 @@ interface Variable { ```js isEntity(): boolean; ``` -Возвращает `true`, если значение переменной - объект [`EntityInfo`](./views.md#entity-info), и `false` в противном случае. +Возвращает `true`, если значение переменной - объект [`EntityInfo`](./common.md#entity-info), и `false` в противном случае.   diff --git a/API/views.md b/API/views.md index 12249b7..b9c4ea1 100644 --- a/API/views.md +++ b/API/views.md @@ -113,7 +113,7 @@ cleanCellsData(cubesIdentifiers?: number[]): this; ```js cubeCellSelector(identifier: string | number): CubeCellSelectorBuilder; ``` -Возвращает интерфейс [`CubeCellSelectorBuilder`](./cubeCell.md#cube-cell-selector-builder) выборки клеток для куба `identifier`. `identifier` должен быть именем или [`longId`](./readingGrid.md#long-id) куба. При указании некорректного `identifier` выбрасывается исключение. +Возвращает интерфейс [`CubeCellSelectorBuilder`](./cubeCell.md#cube-cell-selector-builder) выборки клеток для куба `identifier`. `identifier` должен быть именем или [`longId`](./common.md#long-id) куба. При указании некорректного `identifier` выбрасывается исключение.   @@ -121,14 +121,14 @@ cubeCellSelector(identifier: string | number): CubeCellSelectorBuilder; cubeCellUpdater(identifier: string | number): CubeCellUpdaterBuilder; ``` -Возвращает интерфейс [`CubeCellUpdaterBuilder`](./cubeCell.md#cube-cell-updater-builder) обновления клеток куба с именем или идентификатором `identifier` по формуле. `identifier` должен быть именем или [`longId`](./readingGrid.md#long-id) куба. При указании некорректного `identifier` выбрасывается исключение. +Возвращает интерфейс [`CubeCellUpdaterBuilder`](./cubeCell.md#cube-cell-updater-builder) обновления клеток куба с именем или идентификатором `identifier` по формуле. `identifier` должен быть именем или [`longId`](./common.md#long-id) куба. При указании некорректного `identifier` выбрасывается исключение.   ```js getCubeInfo(identifier: string | number): CubeInfo; ``` -Возвращает интерфейс [`CubeInfo`](./cubeCell.md#cube-info) для получения информации о кубе `identifier`. `identifier` должен быть именем или [`longId`](./readingGrid.md#long-id) куба. При указании некорректного `identifier` выбрасывается исключение. +Возвращает интерфейс [`CubeInfo`](./cubeCell.md#cube-info) для получения информации о кубе `identifier`. `identifier` должен быть именем или [`longId`](./common.md#long-id) куба. При указании некорректного `identifier` выбрасывается исключение.   @@ -217,9 +217,9 @@ rowsFilter(data: string | string[] | number | number[]): this; `string[]` — массив названий строк; -`number` — [`longId`](./readingGrid.md#long-id) строки; +`number` — [`longId`](./common.md#long-id) строки; -`number[]` — массив [`longId`](./readingGrid.md#long-id) строк. +`number[]` — массив [`longId`](./common.md#long-id) строк. Возвращает `this`. @@ -245,11 +245,11 @@ withoutValues(): this; ```js addDependentContext(identifier: number): this; ``` -Добавляет в фильтр по строкам весь зависимый контекст переданного [`longId`](./readingGrid.md#long-id) `identifier`: материнские и дочерние элементы всех уровней. +Добавляет в фильтр по строкам весь зависимый контекст переданного [`longId`](./common.md#long-id) `identifier`: материнские и дочерние элементы всех уровней. Если эта функция многократно вызывается с аргументами, один из которых является потомком остальных (порядок вызовов не имеет значения), то это считается уточнением запроса, и результат будет равносилен однократному вызову с этим аргументом. -Если для полученного [`Grid`](#grid) установлен фильтр [`GridPageSelector`](#grid-page-selector) (или несколько), а `identifier` — это [`longId`](./readingGrid.md#long-id) элемента измерения одного из этих фильтров, то в соответствующем фильтре будет программно установлен этот элемент. +Если для полученного [`Grid`](#grid) установлен фильтр [`GridPageSelector`](#grid-page-selector) (или несколько), а `identifier` — это [`longId`](./common.md#long-id) элемента измерения одного из этих фильтров, то в соответствующем фильтре будет программно установлен этот элемент. Возвращает `this`. @@ -455,9 +455,9 @@ cellCount(): number; ```js generator(size?: number): IterableIterator; ``` -Возвращает генератор, при каждом обращении возвращающий интерфейс [`GridRangeChunk`](#grid-range-chunk) размером *не более* `size` ячеек, позволяющий обрабатывать `GridRange` покусочно. +Возвращает генератор, при каждом обращении возвращающий интерфейс [`GridRangeChunk`](./readingGrid.md#grid-range-chunk) размером *не более* `size` ячеек, позволяющий обрабатывать `GridRange` покусочно. -Каждый возвращаемый [`GridRangeChunk`](#grid-range-chunk) содержит целое количество строк, т. е. все колонки `GridRange`, а количество строк в нём определяется по формуле `size / columnCount()`. Здесь используется целочисленное деление с округлением в большую сторону. Например, если в таблице `14` столбцов, а параметр `size` равен `1500`, то генератор вернёт [`GridRangeChunk`](#grid-range-chunk) из `1500 / 14 = 107.14 ≈ 108` строк, в котором будет `14 * 108 = 1512` ячеек. +Каждый возвращаемый [`GridRangeChunk`](./readingGrid.md#grid-range-chunk) содержит целое количество строк, т. е. все колонки `GridRange`, а количество строк в нём определяется по формуле `size / columnCount()`. Здесь используется целочисленное деление с округлением в большую сторону. Например, если в таблице `14` столбцов, а параметр `size` равен `1500`, то генератор вернёт [`GridRangeChunk`](./readingGrid.md#grid-range-chunk) из `1500 / 14 = 107.14 ≈ 108` строк, в котором будет `14 * 108 = 1512` ячеек. Значение аргумента `size` ограничено снизу значением `500` и сверху значением `5000`, поэтому в скриптах 1.0 [`невозможно`](../appendix/constraints.md#generator) работать с `GridRange` с б*О*льшим количеством столбцов. Значение по умолчанию: `1500`. diff --git a/appendix/constraints.md b/appendix/constraints.md index 0e66891..c791b0d 100644 --- a/appendix/constraints.md +++ b/appendix/constraints.md @@ -7,18 +7,10 @@   - -## Плоские таблицы + +## Таблицы без строк и/или столбцов -Если в сводной таблице на столбцах нет измерений (в этом случае в интерфейсе отображается один столбец), то к ячейкам невозможно получить доступ через функцию [`LabelsGroup`](../API/views.md#labels-group).`cells()`. В этой ситуации она возвращает `null`: - -```js -for (const chunk of generator) { - const rowsCells = chunk.rows().all()[0].cells(); // null -} -``` - -В этом случае система скриптов создаёт виртуальное измерение, к которому можно получить доступ стандартным способом, и вызов +Если в сводной таблице в строках или столбцах нет измерений, система скриптов создаёт виртуальное измерение, к которому можно получить доступ стандартным способом, и вызов ```js definitionInfo.getColumnDimensions()[0]getDimensionEntity().name(); @@ -26,31 +18,11 @@ definitionInfo.getColumnDimensions()[0]getDimensionEntity().name(); вернёт специальное значение `'Empty 1 0'`. -Характерный пример плоской таблицы – [`вкладка`](../API/dimensions.md#time-options-tab) настроек времени. +Характерный пример такой таблицы – [`вкладка`](../API/dimensions.md#time-options-tab) настроек времени. -Для решения этой проблемы следует использовать функцию [`GridRangeChunk`](../API/views.md#grid-range-chunk).`cells()`, которая возвращает линейный массив, параллельный массиву [`GridRangeChunk`](../API/views.md#grid-range-chunk).`rows()`. Пример кода, который в настройках времени устанавливает нужное значение в ячейку `Current Month`, используя такой подход: - -```js -for (const chunk of generator) { - let currentMonthIndex = null; - - chunk.rows().all().forEach((rowLabels, index) => { - const name = rowLabels.first().name(); - if (name === 'Current Month') { - currentMonthIndex = index; - } - }); - - if (currentMonthIndex === null) { - throw new Error(`Option 'Current Month' not found`); - } - - const cells = chunk.cells().all(); - cells[currentMonthIndex].setValue(newCurrentMonthValue); -} -``` +Такое измерение не содержит заголовков и вызов [`LabelsGroup`](../API/readingGrid.md#labels-group).`all()` вернёт пустой массив. -Если в сводной таблице нет измерений на *строках*, ситуация полностью аналогична описанной. +Если таблица не собержит ни строк, ни колонок, то доступ к единственной ячейке возможет только с помощью метода [`GridRangeChunk`](../API/readingGrid.md#grid-range-chunk).`cells()`.   diff --git a/cookBook/rowsColumnsFilters.md b/cookBook/rowsColumnsFilters.md index fff4a93..1a2d0df 100644 --- a/cookBook/rowsColumnsFilters.md +++ b/cookBook/rowsColumnsFilters.md @@ -228,7 +228,7 @@ console.log(`Filter dimensions: ${pageSelectedNames.join(', ')} \n`); ![Измерения в фильтрах МК условия и расчёты 2, скрипт](./pic/rcf_FiltersReady2.png) -Необходимо заметить, что в выводе измерений столбцов `Column dimensions` появилось измерение `'Empty 1 0'`, хотя в представлении МК измерений на столбцах нет. Подробнее про это можно прочитать [здесь](../appendix/constraints.md#flat-table). +Необходимо заметить, что в выводе измерений столбцов `Column dimensions` появилось измерение `'Empty 1 0'`, хотя в представлении МК измерений на столбцах нет. Подробнее про это можно прочитать [здесь](../appendix/constraints.md#labelless-table). [Курс молодого бойца](cookBook.md) From cddfdae163646b8e05c75557375b5ea0e31f15e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9C=D0=B0?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D0=BE=D0=B2?= Date: Mon, 28 Apr 2025 16:32:12 +0300 Subject: [PATCH 04/10] refactoring vol 2 --- API/common.md | 9 +++++---- API/readingGrid.md | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/API/common.md b/API/common.md index 64d4273..82d87b4 100644 --- a/API/common.md +++ b/API/common.md @@ -145,7 +145,7 @@ interface CellBuffer { ```js set(cell: Cell | CubeCell, value: number | string | boolean | null): this; ``` -Устанавливает значение `value` в клетку `cell` в буфере. Возвращает `this`. +Устанавливает значение `value` в клетку `cell` в буфере. В качестве значения `value` можно передать то же, что и для метода [`Cell.setValue()`](./readingGrid.md#cell.set-value). Возвращает `this`.   @@ -615,7 +615,7 @@ getLastName(): string; ```js getRole(): EntityInfo; ``` -Возвращает сущность роли пользователя в виде [`EntityInfo`](./common.md#entity-info). +Возвращает сущность роли пользователя в виде [`EntityInfo`](#entity-info).   @@ -678,7 +678,7 @@ longId(): number;   - + ```js name(): string; ``` @@ -686,6 +686,7 @@ name(): string;   + ```js code(): string; ``` @@ -701,7 +702,7 @@ alias(): string; Если `this` является сущностью элемента справочника, в настройках которого задано некоторое свойство в качестве отображаемого имени (опция `Отображение`), и для этой сущности задано значение этого свойства, то возвращает значение этого свойства. -Иначе возвращает [`name()`](#label.name). +Иначе возвращает [`name()`](#name).   diff --git a/API/readingGrid.md b/API/readingGrid.md index d6c41a8..e16533c 100644 --- a/API/readingGrid.md +++ b/API/readingGrid.md @@ -221,7 +221,7 @@ interface Cell { ```js setValue(value: number | string | boolean | null): this; ``` -Устанавливает значение клетки. Отрабатывает в момент вызова и мгновенно приводит к пересчёту зависимых клеток. Поэтому ***не*** рекомендуется к использованию в больших мультикубах. Возвращает `this`. +Устанавливает значение клетки. Отрабатывает в момент вызова и мгновенно приводит к пересчёту зависимых клеток. Поэтому ***не*** рекомендуется к использованию в больших мультикубах. В случае клетки формата справочника в качестве значени можно использовать [имя элемента](./common.md#name), его [код](./common.md#code), [`longId`](./common.md#long-id) или [пару `отображаемое-имя||имя`](cell.get-context-value). Возвращает `this`.   @@ -254,7 +254,7 @@ getNativeValue(): number | string | null; ```js getContextValue(): string | null; ``` -Если ячейка имеет формат справочника, в настройках которого задано некоторое свойство `prop` в качестве отображаемого имени (опция `Отображение`), и для этой ячейки задано значение этого свойства, то возвращает строку, состоящую из имени, двойной вертикальной черты и значения свойства `prop`, например, `'#5||Берлин'`. +Если ячейка имеет формат справочника, в настройках которого задано некоторое свойство `prop` в качестве отображаемого имени (опция `Отображение`), и для этой ячейки задано значение этого свойства, то возвращает строку, состоящую из имени, двойной вертикальной черты и значения свойства `prop`. Например, для отображамого имени `Берлин` и имени элемента `#5` — `'Берлин||#5'`. В противном случае возвращает `null`. From 9c4fda61ef9a5caa97d03a928f94e131f893c246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9C=D0=B0?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D0=BE=D0=B2?= Date: Tue, 29 Apr 2025 09:30:04 +0300 Subject: [PATCH 05/10] dropDownSelector() --- API/readingGrid.md | 85 ++++++++++++++++++++++++++++++++++++++++++++- API/scripts.om.d.ts | 3 +- 2 files changed, 86 insertions(+), 2 deletions(-) diff --git a/API/readingGrid.md b/API/readingGrid.md index e16533c..15b7019 100644 --- a/API/readingGrid.md +++ b/API/readingGrid.md @@ -209,6 +209,7 @@ interface Cell { rows(): LabelsGroup | null; dropDown(): Labels; + dropDownSelector(): DropDownSelector; getFormatType(): string; isEditable(): boolean; } @@ -284,7 +285,19 @@ rows(): LabelsGroup | null; ```js dropDown(): Labels; ``` -Возвращает набор заголовков строк [`Labels`](#labels) выпадающего списка, который в интерфейсе пользователя Optimacros можно получить кликом по треугольнику внутри ячейки. Эта функция считается неэффективной, так как выгружает справочник целиком. Лучше зайти в нужный справочник и итерироваться по нему. + +Этот метод признан устаревшим. Вместо него стоит использовать метод [`dropDownSelector()`](#cell.dropdown-selector). + +Возвращает набор заголовков строк [`Labels`](#labels) выпадающего списка, который в интерфейсе пользователя `Optimacros` можно получить кликом по треугольнику внутри ячейки. Эта функция считается неэффективной, так как выгружает справочник целиком. Лучше зайти в нужный справочник и итерироваться по нему. + +  + + +```js +dropDownSelector(): DropDownSelector; +``` + +Позволяет постранично читать набор опций выпадающего списка значений клетки. Требует наличия `SHARED` блокировки для всех случаев, кроме колонки `Api Service Model` [таблицы веб-сервисов воркспейса](./apiServicesAdministration.md), которая требует отсутствия блокировок — `UNLOCK` (чтение опций клеток колонки `Api Service Script` требует `SHARED` блокировки, так как список скриптов без чтения модели получить не выйдет). Возвращает ссылку на интерфейс [`DropDownSelector`](#dropdown-selector) выпадающего списка, который в интерфейсе пользователя `Optimacros` можно получить кликом по треугольнику внутри ячейки.   @@ -296,6 +309,7 @@ getFormatType(): string;   + ```js isEditable(): boolean; ``` @@ -303,6 +317,75 @@ isEditable(): boolean;   +### Интерфейс DropDownSelector + +```js +interface DropDownSelector { + totalCount(): number; + generator(chunkSize: number | null): IterableIterator; +} +``` + +Интерфейс постраничного получения опций выпадающего списка для клеток формата сущности — `'ENTITY'`, `'TIME_ENTITY'`, `'VERSION'`. Который должен во всех случаях совпадать со списком, доступным пользователю через `web`-интерфейс (со всеми применимыми фильтрациями). + +Для клеток, доступных только для чтения, список опций всё равно доступен, хотя изменение значения клетки невозможно, поэтому чтобы понять, можно ли изменять клетку, стоит обратиться к методу [`Cell.isEditable()`](#cell.is-editable). Если недоступно даже чтение значения клетки, попытка получения данного интерфейса приведёт к ошибке. + +По неизвестной науке причине с помощью этого интерфейса также **возможно** чтение списка доспупных пользовательских измерений мультикуба `User Lists`. По той же причине, если в справочнике типа `Cube Link` не установлено значение мультикуба `Multicube Link`, то попытка чтения опций кубов `Cube Link` приведёт к ошибке. Эта же причниа влияет и на то, что если в справочнике создать свойство с форматом этого же или родительского справочника и применить зависимый контекст по измерению, то в `web`-интерфейсе фильтрация **не** будет работать, но интерфейс `DropDownSelector` **будет** работать с фильтрацией. + +Для получения новыйх страниц требуется блокировка того же уровня, что и для получения ссылки на сам интерфейс с помощью [`Cell.dropDownSelector`](#cell.dropdown-selector). + +Также стоит отметить, что наличе опции в выпадающем списке не гарантирует, что данное значение может быть установлено. + +  + +```js +totalCount(): number; +``` +Возвращает общее количество опций выпадающего списка. + +  + +```js +generator(chunkSize: number | null): IterableIterator; +``` +Метод получения итератора для постраничного чтения опций выпадающего списка. Аргумент `chunkSize` — максимальное количество опций на одной странице итератора в интервале от 500 до 5000 (по умолчанию 1000). Влияние параметра `chunkSize` на скорость работы итератора достаточно не изучено и это предстоит устанавливать в каждом конкретном случае. Возвращает итерируемый объект для чтения страниц опций выдающего списка [`DropDownSelectorChunk`](#dropdown-selector-chunk). + +  + +### Интерфейс DropDownSelectorChunk + +```js +interface DropDownSelectorChunk { + start(): number; + count(): number; + all(): Label[]; +} +``` +Интерфейс содержащий одну страницу опций выпадающего списка возможных значений клетки. + +  + +```js +start(): number; +``` +Возвращает номер первой опции текущей страницы выдающего списка, начиная отсчёт с 0. + +  + +```js +count(): number; +``` +Возвращает общее число опций на данной странице. + +  + +```js +all(): Label[]; +``` +Возвращает список сущностей [Label](#label) опций выпадающего списка. + +  + [API Reference](API.md) [Оглавление](../README.md) diff --git a/API/scripts.om.d.ts b/API/scripts.om.d.ts index 0086aff..498db23 100644 --- a/API/scripts.om.d.ts +++ b/API/scripts.om.d.ts @@ -22,10 +22,11 @@ export interface Cell { columns(): LabelsGroup | null; rows(): LabelsGroup | null; + /** DEPRECATED */ dropDown(): Labels; + dropDownSelector(): DropDownSelector; getFormatType(): string; isEditable(): boolean; - dropDownSelector(): DropDownSelector; } export interface DropDownSelector { From 4e4b8504185a7b5717c1e180eda2c23d8def8074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9C=D0=B0?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D0=BE=D0=B2?= Date: Tue, 29 Apr 2025 09:40:07 +0300 Subject: [PATCH 06/10] dropDownSelector() vol 2 --- API/readingGrid.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/API/readingGrid.md b/API/readingGrid.md index 15b7019..18290a8 100644 --- a/API/readingGrid.md +++ b/API/readingGrid.md @@ -296,8 +296,7 @@ dropDown(): Labels; ```js dropDownSelector(): DropDownSelector; ``` - -Позволяет постранично читать набор опций выпадающего списка значений клетки. Требует наличия `SHARED` блокировки для всех случаев, кроме колонки `Api Service Model` [таблицы веб-сервисов воркспейса](./apiServicesAdministration.md), которая требует отсутствия блокировок — `UNLOCK` (чтение опций клеток колонки `Api Service Script` требует `SHARED` блокировки, так как список скриптов без чтения модели получить не выйдет). Возвращает ссылку на интерфейс [`DropDownSelector`](#dropdown-selector) выпадающего списка, который в интерфейсе пользователя `Optimacros` можно получить кликом по треугольнику внутри ячейки. +Позволяет постранично читать набор опций выпадающего списка значений клетки. Требует наличия `SHARED` блокировки для всех случаев, кроме колонки `Api Service Model` [таблицы веб-сервисов воркспейса](./apiServicesAdministration.md), которая требует отсутствия блокировок — `UNLOCK` (чтение опций клеток колонки `Api Service Script` требует `SHARED` блокировки, так как список скриптов без чтения модели получить не выйдет). Вызов на клетке, не содержащей выпадающего списка, приведёт к ошибке. Возвращает ссылку на интерфейс [`DropDownSelector`](#dropdown-selector) выпадающего списка, который в интерфейсе пользователя `Optimacros` можно получить кликом по треугольнику внутри ячейки.   @@ -330,7 +329,7 @@ interface DropDownSelector { Для клеток, доступных только для чтения, список опций всё равно доступен, хотя изменение значения клетки невозможно, поэтому чтобы понять, можно ли изменять клетку, стоит обратиться к методу [`Cell.isEditable()`](#cell.is-editable). Если недоступно даже чтение значения клетки, попытка получения данного интерфейса приведёт к ошибке. -По неизвестной науке причине с помощью этого интерфейса также **возможно** чтение списка доспупных пользовательских измерений мультикуба `User Lists`. По той же причине, если в справочнике типа `Cube Link` не установлено значение мультикуба `Multicube Link`, то попытка чтения опций кубов `Cube Link` приведёт к ошибке. Эта же причниа влияет и на то, что если в справочнике создать свойство с форматом этого же или родительского справочника и применить зависимый контекст по измерению, то в `web`-интерфейсе фильтрация **не** будет работать, но интерфейс `DropDownSelector` **будет** работать с фильтрацией. +По неизвестной науке причине с помощью этого интерфейса также **возможно** чтение списка доспупных пользовательских измерений мультикуба `User Lists`. По той же причине, если в справочнике типа `Cube Link` не установлено значение мультикуба `Multicube Link`, то у клетки пропадает выпадающий список полностью и она становится нередактируемой, а значит, попытка чтения опций кубов `Cube Link` приведёт к ошибке. Эта же причниа влияет и на то, что если в справочнике создать свойство с форматом этого же или родительского справочника и применить зависимый контекст по измерению, то в `web`-интерфейсе фильтрация **не** будет работать, но интерфейс `DropDownSelector` **будет** работать с фильтрацией. Для получения новыйх страниц требуется блокировка того же уровня, что и для получения ссылки на сам интерфейс с помощью [`Cell.dropDownSelector`](#cell.dropdown-selector). From 9711ea99a68ede0b6b54fd40cb34967079318fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9C=D0=B0?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D0=BE=D0=B2?= Date: Tue, 29 Apr 2025 11:48:38 +0300 Subject: [PATCH 07/10] changelog, new file was added to the docx content --- API/readingGrid.md | 2 +- changelog.md | 1 + publish/contents.json | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/API/readingGrid.md b/API/readingGrid.md index 18290a8..a3bdb13 100644 --- a/API/readingGrid.md +++ b/API/readingGrid.md @@ -282,10 +282,10 @@ rows(): LabelsGroup | null;   + ```js dropDown(): Labels; ``` - Этот метод признан устаревшим. Вместо него стоит использовать метод [`dropDownSelector()`](#cell.dropdown-selector). Возвращает набор заголовков строк [`Labels`](#labels) выпадающего списка, который в интерфейсе пользователя `Optimacros` можно получить кликом по треугольнику внутри ячейки. Эта функция считается неэффективной, так как выгружает справочник целиком. Лучше зайти в нужный справочник и итерироваться по нему. diff --git a/changelog.md b/changelog.md index 2bee552..cab1b0a 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,7 @@ | Дата релиза | Тег релиза | Версия ScriptAPI | Версии MiddleWork | Версия приложения | Изменения | | --- | --- | --- | --- | --- | --- | +| xx.xx.xxxx | [v9.300](https://github.com/optimacros/scripts_documentation/tree/v9.300) | — |
  • 9.300
|
|
  • Интерфейсы доступа к содержимому грида — заголовкам и ячейкам — были вынесены в отдельный файл — [readingGrid.md](./API/readingGrid.md)
  • Добавлен интерфейс постраничного получения списка опций значений клетки [DropDownSelector](./API/readingGrid.md#dropdown-selector) и метод для получения доступа к нему — [`Cell.dropDownSelector()`](./API/readingGrid.md#cell.dropdown-selector)
  • Метод получения списка опций значений клетки [`Cell.dropDown()`](./API/readingGrid.md#cell.dropdown) признан устаревшим
| | 24.03.2025 | [v9.300](https://github.com/optimacros/scripts_documentation/tree/v9.300) | — |
  • 9.300
|
|
  • В интерфейсе [Filesystem](./API/fs.md#filesystem) изменены декларации функций `delete()`, `rename()`, `copy()`, `createDir()`, `deleteDir()`, `getSize()`
  • В интерфейс [CellBuffer](./API/common.md#cell-buffer) добавлена функция `lastApplyErrors()`
  • В интерфейсе [Importer](./API/exportImport.md#importer) исправлены исключения, которые могут бросать функции
| | 16.12.2024 | [v9.?00.x.x](https://github.com/optimacros/scripts_documentation/tree/v9.?00.x.x) | — |
  • 9.?00.x.x
|
|
  • Интерфейс работы с лицензиями воркспейса `EnterpriseLicenseManager` заменён на новый интерфейс работы с данными договора о параметрах воркспейса [EnterpriseContractManager](./API/common.md#enterprise-contract-manager)
| | 15.11.2024 | [9.200.x.13](https://github.com/optimacros/scripts_documentation/tree/v9.200.x.13) | — |
  • 9.200.dev.13
|
  • 9.200.x.x
|
  • В интерфейс [Filesystem](./API/fs.md#filesystem) добавлен метод для изменения кодировки файла `changeTextFileCharset()`
| diff --git a/publish/contents.json b/publish/contents.json index b2bf887..5e27cd9 100644 --- a/publish/contents.json +++ b/publish/contents.json @@ -9,6 +9,7 @@ "env.md", "variables.md", "views.md", + "readingGrid.md", "cubeCell.md", "dimensions.md", "elementsManipulator.md", From 1c3fe763bcebec87116a615d6d545e6224e3056d Mon Sep 17 00:00:00 2001 From: mgolovkina Date: Tue, 10 Jun 2025 14:08:51 +0700 Subject: [PATCH 08/10] Corrected small mistakes --- API/common.md | 4 ++-- API/readingGrid.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/API/common.md b/API/common.md index 82d87b4..a689923 100644 --- a/API/common.md +++ b/API/common.md @@ -400,7 +400,7 @@ recalculate(): boolean; ```js backup(path?: string): EntityInfo | boolean; ``` -Сохраняет резервную копию в логах модели: в интерфейсе Optimacros на вкладке `Центр безопастности`->`Логи`->`Резервные копии`. Если указан путь `path`, после создания копии вызовется функция `export()` и вернётся её результат типа `boolean`. Если `path` не указан, возвращает сущность резервной копии в виде [`EntityInfo`](./common.md#entity-info). +Сохраняет резервную копию в логах модели: в интерфейсе Optimacros на вкладке `Центр безопастности`->`Логи`->`Резервные копии`. Если указан путь `path`, после создания копии вызовется функция `export()` и вернётся её результат типа `boolean`. Если `path` не указан, возвращает сущность резервной копии в виде [`EntityInfo`](#entity-info).   @@ -690,7 +690,7 @@ name(): string; ```js code(): string; ``` -Возвращает код сущности. В Optimacros всего две сущности могут иметь код: элементы справочников и кубы. +Возвращает код сущности.   diff --git a/API/readingGrid.md b/API/readingGrid.md index a3bdb13..d120188 100644 --- a/API/readingGrid.md +++ b/API/readingGrid.md @@ -222,7 +222,7 @@ interface Cell { ```js setValue(value: number | string | boolean | null): this; ``` -Устанавливает значение клетки. Отрабатывает в момент вызова и мгновенно приводит к пересчёту зависимых клеток. Поэтому ***не*** рекомендуется к использованию в больших мультикубах. В случае клетки формата справочника в качестве значени можно использовать [имя элемента](./common.md#name), его [код](./common.md#code), [`longId`](./common.md#long-id) или [пару `отображаемое-имя||имя`](cell.get-context-value). Возвращает `this`. +Устанавливает значение клетки. Отрабатывает в момент вызова и мгновенно приводит к пересчёту зависимых клеток. Поэтому ***не*** рекомендуется к использованию в больших мультикубах. В случае клетки формата справочника в качестве значения можно использовать [имя элемента](./common.md#name), его [код](./common.md#code), [`longId`](./common.md#long-id) или [пару `отображаемое-имя||имя`](cell.get-context-value). Возвращает `this`.   From 0171d9e12c447b24605fbfbca1696aa7c33709b5 Mon Sep 17 00:00:00 2001 From: mgolovkina Date: Tue, 10 Jun 2025 16:11:45 +0700 Subject: [PATCH 09/10] Corrections after review --- API/common.md | 6 +-- API/readingGrid.md | 105 ++++++++++++++++++++-------------------- appendix/constraints.md | 4 +- 3 files changed, 57 insertions(+), 58 deletions(-) diff --git a/API/common.md b/API/common.md index a689923..883edd6 100644 --- a/API/common.md +++ b/API/common.md @@ -587,7 +587,7 @@ interface UserInfo { ```js getEntity(): EntityInfo; ``` -Возвращает сущность пользователя в виде [`EntityInfo`](./common.md#entity-info). +Возвращает сущность пользователя в виде [`EntityInfo`](#entity-info).   @@ -700,7 +700,7 @@ alias(): string; ``` Возвращает отображаемое имя. -Если `this` является сущностью элемента справочника, в настройках которого задано некоторое свойство в качестве отображаемого имени (опция `Отображение`), и для этой сущности задано значение этого свойства, то возвращает значение этого свойства. +Если `this` является сущностью элемента справочника, в настройках которого задано некоторое свойство в качестве отображаемого имени (колонка `Отображаемое имя` на вкладке `Справочники`), и для этой сущности задано значение этого свойства, то возвращает значение этого свойства. Иначе возвращает [`name()`](#name). @@ -736,7 +736,7 @@ interface EntitiesInfo { getCollection(longId: number[]): EntityInfo[]; } ``` -Интерфейс для получения сущности по [`longId`](./common.md#long-id). +Интерфейс для получения сущности по [`longId`](#long-id).   diff --git a/API/readingGrid.md b/API/readingGrid.md index d120188..84802a8 100644 --- a/API/readingGrid.md +++ b/API/readingGrid.md @@ -3,9 +3,9 @@ ## Интерфейс GridRangeChunk ```ts interface GridRangeChunk { - cells(): Cells; - rows(): Labels; - columns(): Labels; + cells(): Cells; + rows(): Labels; + columns(): Labels; } ``` Интерфейс для обработки части строк [`GridRange`](./views.md#grid-range) — чанка. Содержит информацию о заголовках (возможно многоуровневых) и ячейках двумерной таблицы. @@ -36,12 +36,12 @@ columns(): Labels; ### Интерфейс Labels ```ts interface Labels { - start(): number; - count(): number; - all(): LabelsGroup[]; - get(index: number): LabelsGroup | null; - chunkInstance(): GridRangeChunk; - findLabelByLongId(longId: number): Label | null; + start(): number; + count(): number; + all(): LabelsGroup[]; + get(index: number): LabelsGroup | null; + chunkInstance(): GridRangeChunk; + findLabelByLongId(longId: number): Label | null; } ``` Интерфейс, представляющий набор объектов [`LabelsGroup`](#labels-group), то есть набор заголовков строк/столбцов с их возможно многоуровневой структурой. Как правило, его можно получить функциями интерфейса [`GridRangeChunk`](#grid-range-chunk). @@ -97,9 +97,9 @@ findLabelByLongId(longId: number): Label | null; ## Интерфейс LabelsGroup ```ts interface LabelsGroup { - all(): Label[]; - first(): Label; - cells(): Cells; + all(): Label[]; + first(): Label; + cells(): Cells; } ``` Интерфейс, представляющий многоуровневый набор заголовков конкретной строки или столбца. @@ -138,12 +138,12 @@ interface Label = EntityInfo; ### Интерфейс Cells ```ts interface Cells { - all(): Cell[]; - first(): Cell | null; - setValue(value: number | string | boolean | null): this; - count(): number; - chunkInstance(): GridRangeChunk; - getByIndexes(indexes: number[]): Cells; + all(): Cell[]; + first(): Cell | null; + setValue(value: number | string | boolean | null): this; + count(): number; + chunkInstance(): GridRangeChunk; + getByIndexes(indexes: number[]): Cells; } ``` Интерфейс, представляющий (как правило, прямоугольный) набор клеток таблицы. @@ -197,21 +197,21 @@ getByIndexes(indexes: number[]): Cells; ### Интерфейс Cell ```ts interface Cell { - setValue(value: number | string | boolean | null): this; - - getValue(): number | string | null; - getVisualValue(): string | null; - getNativeValue(): number | string | null; - getContextValue(): string | null; - - definitions(): number[]; - columns(): LabelsGroup | null; - rows(): LabelsGroup | null; - - dropDown(): Labels; - dropDownSelector(): DropDownSelector; - getFormatType(): string; - isEditable(): boolean; + setValue(value: number | string | boolean | null): this; + + getValue(): number | string | null; + getVisualValue(): string | null; + getNativeValue(): number | string | null; + getContextValue(): string | null; + + definitions(): number[]; + columns(): LabelsGroup | null; + rows(): LabelsGroup | null; + + dropDown(): Labels; + dropDownSelector(): DropDownSelector; + getFormatType(): string; + isEditable(): boolean; } ``` Интерфейс, представляющий клетку таблицы. @@ -318,33 +318,33 @@ isEditable(): boolean; ### Интерфейс DropDownSelector -```js +```ts interface DropDownSelector { - totalCount(): number; - generator(chunkSize: number | null): IterableIterator; + totalCount(): number; + generator(chunkSize: number | null): IterableIterator; } ``` -Интерфейс постраничного получения опций выпадающего списка для клеток формата сущности — `'ENTITY'`, `'TIME_ENTITY'`, `'VERSION'`. Который должен во всех случаях совпадать со списком, доступным пользователю через `web`-интерфейс (со всеми применимыми фильтрациями). +Интерфейс постраничного получения опций выпадающего списка для клеток формата сущности — `'ENTITY'`, `'TIME_ENTITY'`, `'VERSION'`, который должен во всех случаях совпадать со списком, доступным пользователю через `web`-интерфейс (со всеми применимыми фильтрациями). -Для клеток, доступных только для чтения, список опций всё равно доступен, хотя изменение значения клетки невозможно, поэтому чтобы понять, можно ли изменять клетку, стоит обратиться к методу [`Cell.isEditable()`](#cell.is-editable). Если недоступно даже чтение значения клетки, попытка получения данного интерфейса приведёт к ошибке. +Для клеток, доступных только для чтения, список опций всё равно доступен, хотя изменение значения клетки невозможно. Чтобы понять, можно ли изменять клетку, стоит обратиться к методу [`Cell.isEditable()`](#cell.is-editable). Если недоступно даже чтение значения клетки, попытка получения данного интерфейса приведёт к ошибке. -По неизвестной науке причине с помощью этого интерфейса также **возможно** чтение списка доспупных пользовательских измерений мультикуба `User Lists`. По той же причине, если в справочнике типа `Cube Link` не установлено значение мультикуба `Multicube Link`, то у клетки пропадает выпадающий список полностью и она становится нередактируемой, а значит, попытка чтения опций кубов `Cube Link` приведёт к ошибке. Эта же причниа влияет и на то, что если в справочнике создать свойство с форматом этого же или родительского справочника и применить зависимый контекст по измерению, то в `web`-интерфейсе фильтрация **не** будет работать, но интерфейс `DropDownSelector` **будет** работать с фильтрацией. +По неизвестной науке причине с помощью этого интерфейса также **возможно** чтение списка доступных пользовательских измерений мультикуба в колонке `User Lists` на вкладке `Multicubes`. По той же причине, если в справочнике типа `Cube Link` не установлено значение мультикуба в колонке `Multicube Link`, то у клетки пропадает выпадающий список полностью и она становится нередактируемой, а значит, попытка чтения опций кубов в колонке `Cube Link` приведёт к ошибке. Эта же причина влияет и на то, что если в справочнике создать свойство с форматом этого же или родительского справочника и применить зависимый контекст по измерению, то в `web`-интерфейсе фильтрация **не будет** работать, но интерфейс `DropDownSelector` **будет** работать с фильтрацией. -Для получения новыйх страниц требуется блокировка того же уровня, что и для получения ссылки на сам интерфейс с помощью [`Cell.dropDownSelector`](#cell.dropdown-selector). +Для получения новых страниц требуется блокировка того же уровня, что и для получения ссылки на сам интерфейс с помощью [`Cell.dropDownSelector`](#cell.dropdown-selector). -Также стоит отметить, что наличе опции в выпадающем списке не гарантирует, что данное значение может быть установлено. +Так же стоит отметить, что наличие опции в выпадающем списке не гарантирует, что данное значение может быть установлено.   -```js +```ts totalCount(): number; ``` Возвращает общее количество опций выпадающего списка.   -```js +```ts generator(chunkSize: number | null): IterableIterator; ``` Метод получения итератора для постраничного чтения опций выпадающего списка. Аргумент `chunkSize` — максимальное количество опций на одной странице итератора в интервале от 500 до 5000 (по умолчанию 1000). Влияние параметра `chunkSize` на скорость работы итератора достаточно не изучено и это предстоит устанавливать в каждом конкретном случае. Возвращает итерируемый объект для чтения страниц опций выдающего списка [`DropDownSelectorChunk`](#dropdown-selector-chunk). @@ -352,33 +352,32 @@ generator(chunkSize: number | null): IterableIterator;   ### Интерфейс DropDownSelectorChunk - -```js +```ts interface DropDownSelectorChunk { - start(): number; - count(): number; - all(): Label[]; + start(): number; + count(): number; + all(): Label[]; } ``` -Интерфейс содержащий одну страницу опций выпадающего списка возможных значений клетки. +Интерфейс, содержащий одну страницу опций выпадающего списка возможных значений клетки.   -```js +```ts start(): number; ``` Возвращает номер первой опции текущей страницы выдающего списка, начиная отсчёт с 0.   -```js +```ts count(): number; ``` -Возвращает общее число опций на данной странице. +Возвращает общее число опций на текущей странице.   -```js +```ts all(): Label[]; ``` Возвращает список сущностей [Label](#label) опций выпадающего списка. diff --git a/appendix/constraints.md b/appendix/constraints.md index c791b0d..f468439 100644 --- a/appendix/constraints.md +++ b/appendix/constraints.md @@ -13,7 +13,7 @@ Если в сводной таблице в строках или столбцах нет измерений, система скриптов создаёт виртуальное измерение, к которому можно получить доступ стандартным способом, и вызов ```js -definitionInfo.getColumnDimensions()[0]getDimensionEntity().name(); +definitionInfo.getColumnDimensions()[0].getDimensionEntity().name(); ``` вернёт специальное значение `'Empty 1 0'`. @@ -22,7 +22,7 @@ definitionInfo.getColumnDimensions()[0]getDimensionEntity().name(); Такое измерение не содержит заголовков и вызов [`LabelsGroup`](../API/readingGrid.md#labels-group).`all()` вернёт пустой массив. -Если таблица не собержит ни строк, ни колонок, то доступ к единственной ячейке возможет только с помощью метода [`GridRangeChunk`](../API/readingGrid.md#grid-range-chunk).`cells()`. +Если таблица не содержит ни строк, ни колонок, то доступ к единственной ячейке возможет только с помощью метода [`GridRangeChunk`](../API/readingGrid.md#grid-range-chunk).`cells()`.   From 897bc6dfc349eb212bc4562546928ba533af0dc0 Mon Sep 17 00:00:00 2001 From: mgolovkina Date: Tue, 10 Jun 2025 16:16:10 +0700 Subject: [PATCH 10/10] Code must be in TS style --- API/readingGrid.md | 62 +++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/API/readingGrid.md b/API/readingGrid.md index 84802a8..7b3586e 100644 --- a/API/readingGrid.md +++ b/API/readingGrid.md @@ -12,21 +12,21 @@ interface GridRangeChunk {   -```js +```ts cells(): Cells; ``` Возвращает ссылку на набор ячеек [`Cells`](#cells) текущего чанка.   -```js +```ts rows(): Labels; ``` Возвращает интерфейс [`Labels`](#labels), представляющий заголовки строк.   -```js +```ts columns(): Labels; ``` Возвращает интерфейс [`Labels`](#labels), представляющий заголовки столбцов. @@ -48,14 +48,14 @@ interface Labels {   -```js +```ts start(): number; ``` Возвращает номер первой строки/столбца текущего [`GridRangeChunk`](#grid-range-chunk) в таблице [`Grid`](./views.md#grid).   -```js +```ts count(): number; ``` Возвращает количество строк/столбцов в наборе. @@ -66,28 +66,28 @@ count(): number;   -```js +```ts all(): LabelsGroup[]; ``` Возвращает массив объектов заголовков каждой строки/столбца [`LabelsGroup`](#labels-group).   -```js +```ts get(index: number): LabelsGroup | null; ``` Аналог `all()[index]`. В случае некорректного индекса возвращает `null`.   -```js +```ts chunkInstance(): GridRangeChunk; ``` Возвращает обратную ссылку на [`GridRangeChunk`](#grid-range-chunk), из которого был получен `this`.   -```js +```ts findLabelByLongId(longId: number): Label | null; ``` Возвращает объект [`Label`](#label) по его [`longId`](./common.md#long-id), если он присутствует в `this`, иначе — `null`. @@ -106,21 +106,21 @@ interface LabelsGroup {   -```js +```ts all(): Label[]; ``` Возвращает массив конкретных заголовков [`Label`](#label).   -```js +```ts first(): Label; ``` Аналог `all()[0]`.   -```js +```ts cells(): Cells; ``` Возвращает интерфейс [`Cells`](#cells), предоставляющий доступ к ячейкам данной строки или столбца. @@ -150,14 +150,14 @@ interface Cells {   -```js +```ts all(): Cell[]; ``` Возвращает одномерный массив всех клеток [`Cell`](#cell).   -```js +```ts first(): Cell | null; ``` Аналог `all()[0]`. Возвращает `null`, если массив клеток пустой. @@ -165,14 +165,14 @@ first(): Cell | null;   -```js +```ts setValue(value: number | string | boolean | null): this; ``` Устанавливает одно и то же значение для всех клеток. Отрабатывает в момент вызова и мгновенно приводит к пересчёту зависимых от них клеток. Поэтому ***не*** рекомендуется к использованию в больших мультикубах. Возвращает `this`.   -```js +```ts count(): number; ``` Возвращает количество клеток в наборе. @@ -180,14 +180,14 @@ count(): number;   -```js +```ts chunkInstance(): GridRangeChunk; ``` Возвращает обратную ссылку на [`GridRangeChunk`](#grid-range-chunk), из которого был получен `this`.   -```js +```ts getByIndexes(indexes: number[]): Cells; ``` Производит выборку из одномерного представления клеток объекта `this` по индексам `indexes` и возвращает новый объект [`Cells`](#cells). В этом случае функция [`chunkInstance()`](#chunk-instance) для нового объекта будет возвращать ссылку на тот же самый объект [`GridRangeChunk`](#grid-range-chunk), что и для `this`. Это *единственный* способ создать непрямоугольный объект [`Cells`](#cells). @@ -219,7 +219,7 @@ interface Cell {   -```js +```ts setValue(value: number | string | boolean | null): this; ``` Устанавливает значение клетки. Отрабатывает в момент вызова и мгновенно приводит к пересчёту зависимых клеток. Поэтому ***не*** рекомендуется к использованию в больших мультикубах. В случае клетки формата справочника в качестве значения можно использовать [имя элемента](./common.md#name), его [код](./common.md#code), [`longId`](./common.md#long-id) или [пару `отображаемое-имя||имя`](cell.get-context-value). Возвращает `this`. @@ -227,14 +227,14 @@ setValue(value: number | string | boolean | null): this;   -```js +```ts getValue(): number | string | null; ``` Возвращает значение клетки, которое видит пользователь. Если клетка имеет логический формат, то возвращается строковое значение `'true'` или `'false'`.   -```js +```ts getVisualValue(): string | null; ``` Возвращает отображаемое значение в ячейке, если куб в формате даты или справочника, для других форматов куба возвращает `null`. @@ -242,7 +242,7 @@ getVisualValue(): string | null;   -```js +```ts getNativeValue(): number | string | null; ``` Возвращает самородное значение клетки, зависящее от формата. Если клетка имеет формат справочника, то возвращается [`longId`](./common.md#long-id). @@ -252,7 +252,7 @@ getNativeValue(): number | string | null;   -```js +```ts getContextValue(): string | null; ``` Если ячейка имеет формат справочника, в настройках которого задано некоторое свойство `prop` в качестве отображаемого имени (опция `Отображение`), и для этой ячейки задано значение этого свойства, то возвращает строку, состоящую из имени, двойной вертикальной черты и значения свойства `prop`. Например, для отображамого имени `Берлин` и имени элемента `#5` — `'Берлин||#5'`. @@ -261,21 +261,21 @@ getContextValue(): string | null;   -```js +```ts definitions(): number[]; ``` То же, что и [`CubeCell.definitions()`](./cubeCell.md#cube-cell.definitions).   -```js +```ts columns(): LabelsGroup | null; ``` Возвращает многоуровневый набор заголовков [`LabelsGroup`](#labels-group) конкретного столбца, или `null`, если у клетки нет измерений на столбцах.   -```js +```ts rows(): LabelsGroup | null; ``` Возвращает многоуровневый набор заголовков [`LabelsGroup`](#labels-group) конкретной строки, или `null`, если у клетки нет измерений на строках. @@ -283,7 +283,7 @@ rows(): LabelsGroup | null;   -```js +```ts dropDown(): Labels; ``` Этот метод признан устаревшим. Вместо него стоит использовать метод [`dropDownSelector()`](#cell.dropdown-selector). @@ -293,14 +293,14 @@ dropDown(): Labels;   -```js +```ts dropDownSelector(): DropDownSelector; ``` Позволяет постранично читать набор опций выпадающего списка значений клетки. Требует наличия `SHARED` блокировки для всех случаев, кроме колонки `Api Service Model` [таблицы веб-сервисов воркспейса](./apiServicesAdministration.md), которая требует отсутствия блокировок — `UNLOCK` (чтение опций клеток колонки `Api Service Script` требует `SHARED` блокировки, так как список скриптов без чтения модели получить не выйдет). Вызов на клетке, не содержащей выпадающего списка, приведёт к ошибке. Возвращает ссылку на интерфейс [`DropDownSelector`](#dropdown-selector) выпадающего списка, который в интерфейсе пользователя `Optimacros` можно получить кликом по треугольнику внутри ячейки.   -```js +```ts getFormatType(): string; ``` Возвращает строку с форматом клетки. Возможные значения: `'NUMBER'`, `'BOOLEAN'`, @@ -309,7 +309,7 @@ getFormatType(): string;   -```js +```ts isEditable(): boolean; ``` Возвращает признак возможности редактирования ячейки пользователем. @@ -333,7 +333,7 @@ interface DropDownSelector { Для получения новых страниц требуется блокировка того же уровня, что и для получения ссылки на сам интерфейс с помощью [`Cell.dropDownSelector`](#cell.dropdown-selector). -Так же стоит отметить, что наличие опции в выпадающем списке не гарантирует, что данное значение может быть установлено. +Также стоит отметить, что наличие опции в выпадающем списке не гарантирует, что данное значение может быть установлено.