- Главная [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
- Начало работы
- Работа с типами
- Глобальный контекст и изоляция
- Работа с приложениями
- Работа с внешними сервисами
- Скрипты в виджетах
- Веб компоненты
- Права доступа
- Начало работы с процессами
- Начало работы с подписями
- Начало работы с предпросмотром файлов
- Начало работы с организационной структурой
- Начало работы с пользователями и группами
- Начало работы с типом данных Таблица
- Как решить вашу задачу
- Как сделать пользовательское отображение элементов приложений
- Как сделать динамическое отображение полей/виджетов со сложным условием
- Как регистрировать документ
- Как рассчитывать интервал между датами
- Как создать замещение пользователя
- Как использовать пагинацию и сортировку при поиске элементов приложения
- API
- Типы объектов
- Типы данных
- Глобальные константы
- Работа с приложениями
- Веб-запросы
- Права доступа
- Документооборот
- Линии
- Виджет «Код»
- Подписи
- Рабочие календари
- Интеграция с IP-телефонией
- Интеграция с сервисами рассылок
В этой статье
Начало работы с типом данных «Таблица»
Таблица — это тип переменной, представляющий собой массив данных — строк таблицы. Каждая строка является отдельным элементом массива и представляет собой объект, свойства которого определены столбцами таблицы. Важно отметить, что данные в таблице загружаются при загрузке элемента приложения. Это может замедлять загрузку карточек элементов при большом количестве записей в таблице.
Получение количества строк в таблице
Так как строки таблицы являются элементами массива, можно посчитать количество строк в таблице с помощью свойства TTable.length, которое возвращает количество элементов массива в виде числа:
// Присваиваем переменной типа Число количество элементов массива (строк таблицы) Context.data.table_length = Context.data.table.length;
Получение значений из футера таблицы
Для того чтобы вынести результат столбца из таблицы, используется свойство TTable.result. Обратиться к результату из футера можно, только если он настроен в свойствах переменной.
// Проверка на заполненность футера в требуемом столбце if (Context.data.table.result.cost) { // Присваиваем переменной результат столбца Стоимость (тип Деньги). Тип переменной должен совпадать с типом данных в столбце Context.data.order_budget = Context.data.table.result.cost; }
Получение строки по индексу
Так как таблица является массивом данных, к каждому из элементов можно обращаться с помощью квадратных скобок []. Это значит, что можно работать с нужной строкой, зная её индекс. Стоит помнить, что отсчет элементов массива начинается с нуля.
/* Проверяем, был ли введен номер нужной строки и достаточна ли длина таблицы для получения соответствующей строки */ if (Context.data.table && Context.data.table.length <= Context.data.rows_number) { /* Используем индекс строки для того, чтобы присвоить переменной нужную строку Нумерация индексов элементов массива начинаются с нуля, поэтому вычитаем единицу */ const row = Context.data.table![Context.data.rows_number - 1]; }
Удаление строки таблицы
Метод TTable.delete удаляет конкретную строку из заданной таблицы.
// Получаем заказ const order = await Context.data.orders!.fetch(); // Обрабатываем каждую строку с помощью цикла for (let i = order.data.content!.length - 1; i >= 0; i--) { const row = order.data.content![i]; // Проверяем, заполнено ли поле Количество if(!row.amount) { // Удаляем строку, если не заполнено order.data.content!.delete(i); } } // Сохраняем заказ await order.save();
Изменение данных каждой строки в цикле
В цикле
for
можно изменять значения каждого из элементов массива. Добавим в строку со стоимостью заказа название валюты (тип данных в столбце Стоимость — Строка).// Проверим, заполнена ли таблица if (Context.data.table && Context.data.table.length > 0) { /* В каждую строку таблицы в столбец Стоимость (строковый тип данных) добавляем название валюты */ for (let row of Context.data.table){ row.cost = row.cost + ' рублей'; } // Обновляем таблицу, если сценарий исполняется на клиентской части Context.data.table = Context.data.table; }
Данный сценарий будет изменять значение каждой строки, если таблица уже была сохранена, то есть на форме просмотра элемента приложения или на форме задачи, если таблица передана в контекст бизнес-процесса из контекста приложения с помощью блока Присваивание.
Сортировка данных в таблице
Чтобы выполнить сортировку данных в таблице, можно использовать метод
sort()
. Он сортирует значения по столбцу, переносит отсортированные значения в пустой массив, а затем возвращает значения в первоначальную таблицу с удалением неотсортированных строк.// Проверяем, не пустая ли таблица if (Context.data.result_table.length > 0) { // Передаем таблицу в переменную const table = Context.data.result_table; /* Создаем новый массив, полностью повторяющий нашу таблицу. Метод map() создаёт новый массив с результатом вызова указанной функции (f => f) для каждого элемента массива */ let sortTable = table.map(f => f); /* Сортируем данные в массиве от меньшего числа к большему. Сортировать будем по свойству 'number'. Для этого используем нативный метод массива sort(). */ sortTable.sort((a, b) => a.number - b.number); /* Удаляем элементы первоначальной таблицы. Создаем цикл, который обрабатывает каждый элемент массива — строку таблицы. (let i = table.length - 1) — возвращаем количество строк, вычитая из длины массива единицу, так как элементы массива отсчитываются от 0; (i >= 0) — задаем условие, при котором цикл будет выполняться; (i--) — последовательно обрабатываем все элементы */ for (let i = table.length - 1; i >= 0; i--) { // Удаляем каждую строку table.delete(i); }; for (let i of sortTable) { /* Вставляем отсортированные строки в массив, который создали на предыдущем шаге. Затем вставляем отсортированные значения по столбцам (number, name) */ const row = table!.insert(); row.number = i.number; row.name = i.name; } } // Инициализируем таблицу заново, если сценарий исполняется на клиентской части Context.data.result_table = Context.data.result_table;
Получение номера строки из объекта строки
Метод TTable.indexOf возвращает первый индекс, по которому данный элемент может быть найден в массиве или -1, если такого индекса нет.
// Проверяем, не являются ли таблица и значение, по которому нужно найти индекс строки, пустыми if (Context.data.table.length > 0 && Context.data.row_value) { /* Возвращаем номер строки, в которой есть совпадающее значение. Нумерация элементов массива начинается с 0, поэтому добавляем единицу */ Context.data.row_number = Context.data.table.indexOf(row) + 1; }
Фильтрация таблицы
Метод TTable.filter создаёт новый массив со всеми элементами, прошедшими проверку, которая задана в передаваемой функции. Метод вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве. Затем он создаёт новый массив со всеми значениями, для которых функция callback вернула значение, приводимое к
true
.Функция callback вызывается только для индексов массива с уже определёнными значениями; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.
Элементы массива, не прошедшие проверку функцией callback, просто пропускаются и не включаются в новый массив.
// Проверяем, не пустая ли таблица if (Context.data.table.length > 0) { // Передаём в переменную отфильтрованный массив таблицы let tab = Context.data.table.filter(i => i.name === Context.data.filter); // Очистка прежней таблицы if (Context.data.table.length > 0) { for (let i = Context.data.table.length - 1; i >= 0; i--) { Context.data.table.delete(i); } // Запись в очищенную таблицу отфильтрованного массива строк for (let j = 0; j <= tab.length - 1; j++) { let newRow = Context.data.table.insert(); newRow.name = tab[j].name; newRow.cost = tab[j].cost; } /* Инициализируем таблицу заново (требуется, только если сценарий расположен на форме и исполняется на клиентской части) */ Context.data.table = Context.data.table; } }
Поиск первого элемента массива
Метод TTable.find находит первый элемент массива, соответствующий переданному условию.
// Проверяем, не пустая ли таблица if (Context.data.table.length > 0) { // Передаём в переменную первую в массиве строку таблицы, подходящую под условия фильтрации let tab = Context.data.table.find(i => i.name === Context.data.filter); }
Создание массива с результатом вызова функции
Метод TTable.map создаёт новый массив с результатом вызова указанной функции для каждого элемента массива.
// Проверяем, не пустая ли таблица if (Context.data.result_table.length > 0) { /* Передаём в множественную переменную типа Приложение массив данных из столбца Изделия (тип Приложение)*/ Context.data.items = Context.data.result_table.map(f => f.product); }
Ещё один пример использования TTable.map представлен выше в разделе Сортировка данных в таблице.
Вставка строки в таблицу
Для того чтобы вставить в таблицу новую строку, передадим в переменную таблицу и вызовем метод TTable.insert, затем сопоставим столбцы.
// Вставляем строку; `row` присваивается ссылка на новую строку const row = order.data.table!.insert(); // Заполняем строку row.item = Context.data.product!; row.amount = Context.data.amount!;
Обновление таблицы
В случае использования сценариев на клиентской части может потребоваться обновить данные в таблице. Для этого необходимо инициализировать её заново путем присваивания её самой себе. Примеры использования данного способа можно также найти в сценариях выше.