⟵ сюдатуда ⟶
  • Мастерклассы
  • Внешние подключения
  • Tableau и PowerBI
  • amoCRM
  • Битрикс 24
  • База знаний
  • Обращение к данным временной таблицы
  • Потеря связи с БД при большом трафике данных
  • Сохранить файл в поле по внешней ссылке url
  • Формирование списка из отмеченных галочками строк и вывод на печать
  • Добавление цикла в таблицу циклов кнопкой из временной таблицы
  • Функция TryCatch и передача данных после отката
  • Ошибка доступа при переходе в цикл если первая таблица недоступна для пользователя
  • Архитектура системы рассчитывающей остатки по кассе или складу
  • Сортировка при выборке по отображению поля Селект, а не по его основанию
  • Блокировка введения дублированного значения
  • Табличное отображение в контекстной панели
  • Сортировка строк в таблице с помощью кнопки
  • Как получить значение по условию из списка вложенных массивов?
  • Сбросить счётчик id в таблице
  • Скрытие поля в таблице по условию
  • Подтверждение действия при нажатии на кнопку в контекстном окне
  • Пересчет большой таблицы
  • Как суммировать значения в rowList по одному из ключей (по одной из колонок)
  • Наборы полей по условию при открытии через linkToTable
  • Как отложить выполнение действия и выполнить его в фоне
  • Создание и удаление строк при выборе значений в Селект или Селект-дерево
  • selectRowListForSelect с условием при котором текущее значение получается зачеркнутым
  • Не все внешние запросы на Remotes выполняются и ломается счетчик id
  • Сортировка Расчётных таблиц в Цикле
  • Как передать данные в виде чисел при обращении POST к API стороннего сервиса (must be a "integer")
  • Как сделать график если есть несколько параметров
  • Сохранение изначальных значений в поле в случае, когда поле рассчитывается кодом
  • Формирование списка из отмеченных галочками строк и вывод на печать

    Оригинал на GitHub

    Ссылка на GitHub ⟹

    Вопрос

    Есть таблица, необходимо взять значения 2 столбцов таблицы из строк, отмеченных галочками (динамические пользовательские галочки в столбце с id) и вывести на печать.

    Поле код действия содержит следующее:

    =: linkToPrint(template: "Reestr_sertif"; data: $row)
    
        row: rowCreate(field: "reestr" = $example)
            example: select(table: 'certificate_iss_tracking'; field: 'serial_numbers'; where: 'id' = $num)
                num: var(name: "count"; value: $#ids)
    

    На печать выводит только одно значение (с наименьшим ID) хотя выделено 3 строки.

    Подскажите как сделать что бы выводились все значение на печать?

    Ответ

    Totum жестко разделяет одинарные значения и множественные — они же списки или list.

    Соответственно, функции имеют два варианта — одинарные (например select) и множественные (selectList).

    В коде, который вы привели в строке example используется одинарный вариант (select), поэтому берется одно значение с наименьшим id (если не задан order то не обязательно так — это определяет postgres у себя внутри).

    Я модифицирую код на множественный:

    =: linkToPrint(template: "Reestr_sertif"; data: $row)
        row: rowCreate(field: "reestr" = $example)
            example: selectList(table: 'certificate_iss_tracking'; field: 'serial_numbers'; where: 'id' = $#ids)
    

    Еще я убрал var и прописал where: 'id' = $#ids — тк тут не нужна дополнительная строка кода.

    Сделав это, вы столкнетесь с ошибкой! тк они list, а шаблон печати ожидает text.

    Добавим превращение list —> text функцией listJoin:

    =: linkToPrint(template: "Reestr_sertif"; data: $row)
        row: rowCreate(field: "reestr" = $example)
            example: listJoin(list: $list; str: "<br>")
                list: selectList(table: 'certificate_iss_tracking'; field: 'serial_numbers'; where: 'id' = $#ids)
    

    В качестве разделителя используем <br>, а не быструю переменную $#nl (это сокращение от new line) тк html не понимает эти разделители линий.

    Теперь уже должно работать нормально, но будет ошибка, когда галочки не стоят (ни одна). Добавим в начало проверку наличия галочек. Переменная $#ids это список (list), поэтому нам надо сравнить ее с пустым list$#lc:

    =: if(condition: $#ids != $#lc; then: $print; else: $err)
    
        err: linkToDataText(title: "Предупреждение печати"; text: "Выберите хотя бы одну позицию")
    
        print: linkToPrint(template: "Reestr_sertif"; data: $row)
            row: rowCreate(field: "reestr" = $example)
                example: listJoin(list: $list; str: "<br>")
                    list: selectList(table: 'certificate_iss_tracking'; field: 'serial_numbers'; where: 'id' = $#ids)
    

    Вот обычно в таком варианте это используется в наших проектах.