⟵ сюдатуда ⟶
  • Мастерклассы
  • Внешние подключения
  • Tableau и PowerBI
  • amoCRM
  • Битрикс 24
  • База знаний
  • Обращение к данным временной таблицы
  • Потеря связи с БД при большом трафике данных
  • Сохранить файл в поле по внешней ссылке url
  • Формирование списка из отмеченных галочками строк и вывод на печать
  • Добавление цикла в таблицу циклов кнопкой из временной таблицы
  • Функция TryCatch и передача данных после отката
  • Ошибка доступа при переходе в цикл если первая таблица недоступна для пользователя
  • Архитектура системы рассчитывающей остатки по кассе или складу
  • Сортировка при выборке по отображению поля Селект, а не по его основанию
  • Блокировка введения дублированного значения
  • Табличное отображение в контекстной панели
  • Сортировка строк в таблице с помощью кнопки
  • Как получить значение по условию из списка вложенных массивов?
  • Сбросить счётчик id в таблице
  • Скрытие поля в таблице по условию
  • Подтверждение действия при нажатии на кнопку в контекстном окне
  • Пересчет большой таблицы
  • Как суммировать значения в rowList по одному из ключей (по одной из колонок)
  • Наборы полей по условию при открытии через linkToTable
  • Как отложить выполнение действия и выполнить его в фоне
  • Создание и удаление строк при выборе значений в Селект или Селект-дерево
  • selectRowListForSelect с условием при котором текущее значение получается зачеркнутым
  • Не все внешние запросы на Remotes выполняются и ломается счетчик id
  • Сортировка Расчётных таблиц в Цикле
  • Как передать данные в виде чисел при обращении POST к API стороннего сервиса (must be a "integer")
  • Как сделать график если есть несколько параметров
  • Сохранение изначальных значений в поле в случае, когда поле рассчитывается кодом
  • Атозаполнение значений последующих полей полей на основе выбора в первом
  • Как по кнопке во временной таблице записать данные в поле в рассчетной таблице в цикле?
  • В одном поле Селекта показывать значения из двух полей другой таблицы
  • $#ndts не добавляет секунды в поле тип Дата
  • Кнопка калькулятор в поле
  • Экспорт csv без технических данных
  • Отправить на почту html-список из значений в полях
  • Как отправить сразу много файлов по почте одним письмом
  • Действие при нажатии на кнопку в отправленном email
  • Быстрая форма и передача в нее информации из DOM
  • Получить статус закрепления (пина, руки) для ячейки
  • Колонки отображаются неправильного размера
  • Пересобрать многомерный массив в одномерный
  • Настройка общего поиска системы для поиска по части переданного в него номера, а не сначала
  • Как удалить артефакты из общего поиска по системе
  • Можно ли запустить временную таблицу из дерева?
  • Вывод в текст значений нескольких полей через "сепаратор"
  • Фильтр списка с ключом value
  • Выбрать все значения входящие в категорию в поле с типом Селект-дерево
  • Скрыть иконки глаза и печать для пользователей
  • Перенос строки в тексте при отправке email
  • Отправка файла по почте без сохранения в БД
  • Передача файлов из временной таблицы в простую
  • Коды в полях работают только при соблюдении порядка, а мне нужно поставить поле вперед
  • Формат данных в PostgreSQL при доступе из сторонней BI-системы
  • Составные условия в параметрах where
  • Проверка на уникальность при добавлении плюс удаление лишних символов
  • Замена пустых значений в датах в rowList
  • Блокировка обновления вычислений в полях по условию
  • Анонимная таблица обращается на remotes, но данные не возвращаются в анонимную даже при передаче хэша
  • Кнопка назад
  • Работа со значением из префильтра в linkToInputSelect
  • Отсутствие кнопки с тремя точками в iframe
  • Блокировать удаление файлов в поле тип Файл
  • Как сделать просмотр для файлов PDF
  • Смена name уже созданной таблицы
  • Проверка связей поля таблицы в проекте
  • ID пользователей с учетом их роли для notificationSend
  • Регулирование настроек доступа к выдаче Meilisearch по ролям
  • Персональная сортировка в таблице
  • Редактирование поля тип Файл
  • Отправить файл из панели без сохранения
  • Как сделать в таблице, чтобы у дней недели чередовались цвета по очереди
  • Регистрация/Авторизация клиентов через форму
  • LDAP ( "ОШИБКА:Operations error" )
  • selectRowList как собать все данные с листа
  • Как в шаблон печати добавить изображение?
  • Есть ли возможность убрать названия хедеров полей и пространство, которое они занимают
  • Как при создании цикла передать туда параметр префильтра?
  • Сохранение паролей из формы в таблицу Пользователи
  • Как в быстрой форме регистрации проверить логин?
  • Отсутствующие ключи в ответе внешнего API
  • Доступ определённого пользователя только к привязанной к нему строке таблицы
  • Как сделать, чтобы пользователь видел только таблицу внутри цикла, а таблицу цикла не видел?
  • Выводить в префильтре с селектом в списке выбора только уникальные значения
  • Как закрыть доступ пользователю на изменение пароля?
  • Как сделать переход в разные таблицы в цикле с учетом ролей при его создании
  • Дополнительная информация в поле таблицы циклов изнутри цикла
  • Как узнать, что строка последняя в колонке?
  • Вернуть список только тех значений, которые представлены в исходном списке в единственном экземпляре
  • Строку как ссылку открывать с https://
  • Функция panelImg. Как поставить картинку на превью с другой таблицы?
  • Система тормозит с количеством пользователей онлайн более 10
  • Нумерация строки в зависимости от даты в поле Дата
  • Отправить на почту файлы из нескольких строк таблицы
  • Как при открытии цикла отображать в Дереве имя или номер заказа, а не id цикла?
  • Порядок вывода табов в цикле
  • Строгий фильтр в поле тип Селект при выборе значения
  • Получение порядкового номера недели месяца по заданной дате
  • Отслеживание изменения нескольких полей
  • Селект по созданным данным в другом поле этой же таблицы
  • Замена значений в списке на новые составные
  • Оптимизация расчетов в таблице когда вычисление дублируется между код и код форматирования
  • Не выполнять код действия, если изменение вызвано скриптом
  • Не менять значение в ячейке, если не выполнено действие
  • Нумерация строки в зависимости от даты в поле Дата

    Оригинал на GitHub

    Ссылка на GitHub ⟹

    Вопрос

    Подскажите, пожалуйста, как сделать правильную нумерацию строк в поле #number в зависимости от даты в поле #date.

    Пример

    Есть таблица в ней есть строки, состоящие из двух столбцов date и number:

    01.03.24 1 07.03.24 2 20.03.24 3

    Как сделать, чтобы значения в столбце Порядковый номер пересчитывались в соответствии с датами, где самой ранней дате бы присваивался наименьший порядковый номер, а самой поздней наибольший?

    Продолжаю пример, чтобы лучше объяснить вопрос

    Добавляю в эту же таблицу строку со значением в поле дата 10.03.24, должно получиться так:

    01.03.24 1 07.03.24 2 10.03.24 3 20.03.24 4

    И еще нюанс, если добавляю строку с датой уже имеющейся в таблице, например 07.03.24, должно получиться так (номера в таблице должны изменится в соответсвии с новым порядком):

    01.03.24 1 07.03.24 2 07.03.24 3 10.03.24 4 20.03.24 5

    Как такое реализовать?

    Ответ

    Задачи со сложной сортировкой в таблицах, например когда нам нужна сквозная сортировка по полю date плюс id, решается через дополнительное техническое поле тип Строка, в котором мы собираем строку Y-m-d-id и которое можно поставить как поле сортировки по умолчанию для таблицы.

    id при этом необходимо добавлять с ведущими нулями, так как сравнение будет вестись в строковом режиме: 10 надо использовать как 00010.

    Количество ведущих нулей определяется по максимальному возможному id в таблице.

    Код в техническом поле, создающем сквозной идентификатор сортировки (поле с name teh_order_field):

    =: str`#date + "-" + $zero_prefix + #id`
    
    zero_prefix: strRepeat(str: 0; num: $id_length)
        id_length: 10 - strLength(str: #id)
    

    Для простых таблиц и таблиц циклов:

    Теперь нам нужно вычислить номер в поле number. Номер вычсляется как number в предыдущей строке по сортировке по полю teh_order_field плюс 1.

    Код в поле number:

    =: $prev_num + 1
    
    prev_num: select(table: $#ntn; field: $#nf; where: 'teh_order_field' < #teh_order_field; order: 'teh_order_field' desc)
    

    Стоит отметить, что этот код будет корректно работать только в простых таблицах и таблицах циклов. В рассчетных таблицах и временных таблицах нужен другой подход, так строки в них виртуальные и не соответсвуют строкам в базе данных.

    Далее необходимо добавить код-действия в поле teh_order_field с тригеррами на добавление, изменение и удаление, которых пересчитает строки идущие за измененной строкой:

    Код действия в поле teh_order_field:

    ad1=: reCalculate(table: $#ntn; where: 'teh_order_field' > $#nfv)
    
    dl1=: reCalculate(table: $#ntn; where: 'teh_order_field' > $#onfv)
    
    ch1=: reCalculate(table: $#ntn; where: 'teh_order_field' > $min)
        min: listMin(list: json`[$#nfv,$#onfv]`)
    

    При изменении мы определяем, какой маркер сортировки был меньше (до или после изменения) и от него пересчитываем, так как изменение даты может идти как в меньшую сторону, так и в большую.

    Для Расчетных и Временных таблиц:

    Важно включить для таблицы параметр "Поколоночный пересчет". То есть, нужно чтобы колонка с teh_order_field рассчиталась до конца, когда будет вычисляться number.

    Также в расчетной таблице не нужны никакие коды действия для этой задачи. Так как она всегда рассчитывается целиком.

    Код в поле number:

    = : $key[0] + 1
    
    key: listSearch(list: $list; key: "value" = #teh_order_field)
        list: selectList(table: $#ntn; field: 'teh_order_field'; order: 'teh_order_field' asc)
    

    Для оптимизации лучше сделать поле в футере колонки teh_order_field в котором делать selectList и в listSearch брать уже через #list_in_column_futer.

    Код в поле f_precalc в футере колонки teh_order_field:

    =: selectList(table: $#ntn; field: 'teh_order_field'; order: 'teh_order_field' asc)
    

    Код в поле number:

    = : $key[0] + 1
    
    key: listSearch(list: #f_precalc; key: "value" = #teh_order_field)
    

    Обновление порядка в таблице сразу после выполнения действия

    Когда у нас поле teh_order_field выбрано как Поле сортировки в настройках таблицы оно срабатывает только в момент загрузки таблицы.

    Если у нас все строки таблицы передаются в браузер без разбивки на страницы (без pagination), мы можем обновить их порядок сразу через код форматирования таблицы:

    Код форматирования таблицы:

    f1=: setRowsOrder(ids: $ids)
    
    ids: selectList(table: $#ntn; field: 'id'; order: 'number' asc)