⟵ сюдатуда ⟶
  • Quick start
  • Установка MIT
  • Установка PRO
  • Обновления
  • Оптимизация
  • Обновление v4-v5
  • Бэкапы
  • Консольная утилита bin/totum
  • Основы для пользователей
  • Интерфейс и компоновка
  • Таблицы и их параметры
  • Префильтр
  • Поля и их параметры
  • Синтаксис
  • Код, действия, форматирование
  • Реляционные взаимосвязи
  • Порядок расчета и единицы пересчета
  • Автозаполнение расчетных и временных
  • Дублирование строк и циклов
  • Сравнения
  • Функции
  • Отладка
  • Печать и CSV
  • Печать
  • Вызов печати
  • Оформление шаблонов
  • Форматирование значений в шаблоне
  • money
  • number
  • date
  • checkbox
  • Пример
  • CSV полный
  • Общая информация CSV
  • Формат файла
  • Особенности полей в CSV
  • CSV строчная часть
  • Экспорт строчной части
  • Импорт строчной части
  • API
  • Роли и пользователи
  • Нотификации
  • Действия по расписанию
  • Системные таблицы
  • [PRO] Деревья
  • [PRO] Анонимные таблицы
  • [PRO] Внешние формы
  • [PRO] Экспорт и импорт таблиц
  • [PRO] MeiliSearch
  • [PRO] Базы данных
  • [PRO] Настройка CSS
  • [PRO] Custom docs
  • [PRO] LDAP AD
  • [PRO] Версии файлов
  • [PRO] List-unsubscribe
  • [PRO] Динамические поля
  • [PRO] Only Office
  • [PRO] Auth Tokens
  • [PRO] 2FA
  • [PRO] Superlang
  • [PRO] Daemons
  • [PRO] Profiler
  • [PRO] Подключение функций
  • [SRV] Установка и подключение
  • [SRV] Экспорт, pdf, загрузка и предпросмотр
  • [SRV] XLSX/DOCX генераторы
  • Печать и CSV

    Печать

    Вызов печати

    Печать осуществляется на основе HTML-CSS шаблонов, которые берутся из таблицы шаблоны печати. Стандартная печать вызывает шаблон main, передавая в {table} выбранные пользователем значения таблицы.

    Помимо этого, браузерное окно печати может быть вызвано функцией действия linkToPrint.

    При вызове функции linkToPrint шаблон указывается в параметре template:, а данные в параметре data:.

    Значениями template: и data: могут быть:

    • Для простой замены переменных {} в шаблоне:

      • В template: — передается название шаблона как оно указано в name в шаблоны печати.
      • В data: — передается ассоциативный массив с ключами, соответствующими переменным в шаблоне и значениями для подстановки.
      example1: linkToPrint(template: "name"; data: $row1)
      row1: rowCreate(field: "var1" = "value1"; field: "var2" = "value2")
      
      • Если в шаблоне переменная определена с ключом как {test2["key"]} то в этом случае нужно передавать в переменную ассоциативный массив из которого в шаблоне будет осуществлена выборка по ключу.
    • Чтобы при вызове шаблона вместо простой замены переменной использовать дополнительный вложенный шаблон в data: необходимо передать в качестве значения этой переменной ассоциативный массив определенного вида:

    {
      "template": "template_name",
      "data": {
        "key": "value"
      }
    }
    
    example2: linkToPrint(template: "name"; data: $row2)
    row2: rowCreate(field: "var1" = $row22; field: "var2" = "value2")
    row22: rowCreate(field: "template" = "inner_template"; field: "data" = $row222)
    row222: rowCreate(field: "i_var1" = "i_value1"; field: "i_var2" = "i_value2")
    
    • Чтобы использовать вложенный шаблон с повторяющимися элементами (например строками) в data: передается ссылка на вложенный шаблон. В data вложенного шаблона передается список ассоциированных массивов:
    {
      "data": [
        {
          "key1": "value"
        },
        {
          "key1": "value2"
        }
      ],
      "template": "template_name"
    }
    
    example3: linkToPrint(template: "name"; data: $row3)
    row3: rowCreate(field: "var1" = $row33)
    row33: rowCreate(field: "template" = "inner_multi_template"; field: "data" = $row333)
    row333: rowListCreate(field: "i_var1" = $listvalue1; field: "i_var2" = $listvalue2)
    listvalue1: listcreate(item: "value1_row1"; item: "value1_row2")
    listvalue2: listcreate(item: "value2_row1"; item: "value2_row2")
    

    Оформление шаблонов

    Переменные в шаблоне могут быть указаны следующим образом:

    • {test1} — простая замена на значение, либо на вложенный шаблон.

    • {test2["key"]} — переменная с ключом, предусматривающая, что ей будет передан ассоциативный массив, содержащий значения ключей.

    • {test3,date:d.m.Y} — передача переменной с форматированием. Форматирование может быть назначено как простой переменной, так и переменной с ключом. Возможное форматирование:

      • money
      • number
      • date
      • checkbox

    Форматирование значений в шаблоне

    money

    Используется для вывода числового значения в виде текста прописью. Внимание — значимо отсутствие пробела после запятой.

    <div>{num,money}</div>
    
    {"num":10000.10}
    

    Результат:

    <div>десять тысяч рублей 10 копеек</div>
    

    number

    Используется для числового значения для вывода форматированного числа.

    После двоеточия в number вводятся параметры разделенные | в определенной последовательности:

    1. Количество знаков после запятой.

    2. Разделитель целой и дробной части.

    3. Разделитель тысяч.

    4. Единицы измерения — если передан null или пустая строка, единицы измерения не выводятся.

    <div>{num,number:0|,| | р.}</div>
    
    {"num":10000.10}
    

    Результат:

    <div>10 000 р.</div>
    

    date

    Используется для даты/времени, выводится форматированная дата/время.

    После двоеточия указывается формат даты так же, как и для функции dateFormat.

    Если в формате использована:

    • F — выводится название месяца по-русски.

    • f — название месяца по-русски в родительном падеже.

    checkbox

    Используется для значений true/false, выводится одно из предложенных обозначений в зависимости от входящего значения.

    По умолчанию, значения вида true/false печатаются в виде 1 и "".

    <div>{bool,checkbox:✓|-}</div>
    
    {"num":true}
    

    Результат:

    <div>✓</div>
    

    Пример

    example: linkToPrint(template: "main"; data: $#data)
    
    

    Состав используемых шаблонов:

    main

    <div style="position: absolute; right: 0px; top: 0px;">
      <img src="/fls/297_main_img.png" style="width: 40px;"/>
    </div>
    {table}
    

    production_items

    <div class="breakit">
      <div class="title">
        {title}
      </div>
      <div class="context">
          <div class="image" style="background-image: url('{image}')"></div>
          <div class="params">
            <table>
            {params}  
            </table>
         </div>
      </div>
      <div class="parts">
              {parts} 
            </div>
    </div>
    
    

    production_items_params

    <tr>
      <td>{param_name}</td>
      <td>{param_value}</td>
    </tr>
    
    

    production_parts

    <div>
        <div>{name}</div>
        <div>{count}</div>
    </div>
    
    

    Содержимое переменной $#data:

    {
      "table": {
        "template": "production_items",
        "data": {
          "image": "/fls/test.png",
          "params": {
            "template": "production_items_params",
            "data": [
              {
                "param_name": "Дилер/Контрагент",
                "param_value": "Массажный рай"
              },
              {
                "param_name": "Номер заказа спорт",
                "param_value": 1
              },
              {
                "param_name": "Производственный тип",
                "param_value": "Большая сборка"
              },
              {
                "param_name": "Срок сдачи заказа",
                "param_value": "28.06.2019"
              },
              {
                "param_name": "Количество",
                "param_value": "1"
              },
              {
                "param_name": "Количество мест",
                "param_value": null
              },
              {
                "param_name": "Цвет/Кожа",
                "param_value": "Светлобежевый 1132 "
              },
              {
                "param_name": "Описание",
                "param_value": ""
              },
              {
                "param_name": "Стандартная модификация",
                "param_value": ""
              }
            ]
          },
          "parts": {
            "template": "production_parts",
            "data": [
              {
                "name": "Гайка М8",
                "count": 8
              },
              {
                "name": "Болт М8х60",
                "count": 8
              },
              {
                "name": "Хомут",
                "count": 4
              },
              {
                "name": "Рукоход М",
                "count": 1
              },
              {
                "name": "Стойка 3300 мм",
                "count": 4
              }
            ]
          },
          "title": "Кушетка с электроприводом EH6"
        }
      }
    }
    

    Результат:

    <div style="position: absolute; right: 0px; top: 0px;">
        <img src="/fls/297_main_img.png" style="width: 40px;">
    </div>
    <div class="breakit">
        <div class="title">
            Кушетка с электроприводом EH6
        </div>
        <div class="context">
            <div class="image" style="background-image: url('/fls/')"></div>
            <div class="params">
                <table>
                    <tbody>
                    <tr>
                        <td>Дилер/Контрагент</td>
                        <td>Массажный рай</td>
                    </tr>
                    <tr>
                        <td>Номер заказа спорт</td>
                        <td>1</td>
                    </tr>
                    <tr>
                        <td>Производственный тип</td>
                        <td>Большая сборка</td>
                    </tr>
                    <tr>
                        <td>Срок сдачи заказа</td>
                        <td>28.06.2019</td>
                    </tr>
                    <tr>
                        <td>Количество</td>
                        <td>1</td>
                    </tr>
                    <tr>
                        <td>Количество мест</td>
                        <td></td>
                    </tr>
                    <tr>
                        <td>Цвет/Кожа</td>
                        <td>Светлобежевый 1132</td>
                    </tr>
                    <tr>
                        <td>Описание</td>
                        <td></td>
                    </tr>
                    <tr>
                        <td>Стандартная модификация</td>
                        <td></td>
                    </tr>
                    </tbody>
                </table>
            </div>
        </div>
        <div class="detali">
            <div>
                <div>Гайка М8</div>
                <div>8</div>
            </div>
            <div>
                <div>Болт М8х60</div>
                <div>8</div>
            </div>
            <div>
                <div>Хомут</div>
                <div>4</div>
            </div>
            <div>
                <div>Рукоход М</div>
                <div>1</div>
            </div>
            <div>
                <div>Стойка 3300 мм</div>
                <div>4</div>
            </div>
        </div>
    </div>
    

    CSV полный

    Общая информация CSV

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

    • Роли с доступом к CSVроли, которые смогут выгружать таблицу в CSV в соответствии со своими правами видимости полей и ограничениями префильтра.

      • Выгружаются только те строки и в том порядке, которые пользователь видит в web-интерфейсе — js-фильтры тоже применяются.

      • Выгружаются те колонки, которые доступны пользователю в web-интерфейсе с учетом их отображения.

        Поэтому не стоит выгружать из-под одной роли, а загружать под другой — так как у роли загрузки может не хватать прав доступа и не все данные будут обновлены!

    • Роли с редактированием через CSVроли, которые смогут изменять значения в таблице. У этой роли есть почти полная возможность изменения значений в таблице:

      • Правила блокировки по условиям форматирования в случае загрузки CSV не действуют!

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

      • В файле выгрузки содержится шифрованный хеш префильтра по которому будет определена возможность изменения строк.

      • При наличии префильтра в таблице, в которую осуществляется загрузка, наличие хеша префильтра в файле загрузки обязательно!

    • CSV создается в UTF-8 с разделителями точка-запятая ;.

      • В Excel и подобный программах выгрузка в CSV обозначена как «CSV разделитель запятая», но в большинстве случаев выгружается именно точка-запятая. Первый раз вам необходимо проверить открыв получившийся файл в «Text edit».

      • Если в вашей системе создается CSV разделитель запятая, то в Excel это можно переопределить:

        Файл > Опции > Расширенные настройки.
        
        Уберите галочку 'Использовать системные настройки'.
        
        Установите 'Десятичный разделитель' в положение (запятая), и 'Разделитель тысячных' как пробел.
        
        Нажмите Ок.
        
    • В загрузку файл обрабатывается как в кодировке UTF-8, так и WIN-1251. Определение кодировки при загрузке происходит автоматически.

    • Для удаления строки необходимо поставить любой символ в колонку Удаление.

    • Для добавления строки необходимо оставить колонку id пустой.

    Не загружаем данные по полям Комментарии и Кнопка. Поля Текст и Данные выгружаются/загружаются в base64. Поле Файл не выгружается вообще — если оно есть в таблице его необходимо скрыть.

    Формат файла

    Формат файла читается построчно, все секции нужны при загрузке.

    • 1 строка — заголовок таблицы.

    • 2 строка:

      • Дата-время выгрузки.

      • Updated код выгруженной таблицы на момент выгрузки — по нему в момент загрузки определяется была ли изменена таблица после выгрузки. Если не совпадает — будет выведено предупреждение.

      • Updated код таблицы Состав полей — по нему в момент загрузки определяется была ли изменена таблица Состав полей после выгрузки. Изменение в Составе полей может не касаться текущей таблицы. Если не совпадает — будет выведено предупреждение.

    • 3 строка — информация о цикле для расчетных таблиц в цикле.

    • 4 строка — пустая, отбивочная.

    • 5 строка — заголовок "Ручные значения".

    • 6 строка — информационная о возможных значениях параметра "Ручные значения".

    • 7 строка — значения параметра "Ручные значения" — для загрузки.

      • 0«рассчитываемые поля не обрабатываем», означает, что значения всех полей, у которых активна секция Код, обновляться при загрузке не будут.

      • 1«меняем значения рассчитываемых полей уже выставленных в ручное», означает, что значения у полей с активной секцией Код значения при загрузке будут обновлены только в том случае, если полю установлено ручное значение.

      • 2«меняем рассчитываемые поля», означает, что значения у полей с активной секцией Код будут изменены и установлены в ручное значение, если они при загрузке будут отличаться от расчетных.

    • 8 строка — пустая, отбивочная.

    • 9 строка — заголовок "Хедер".

    • 10 строка — заголовки полей хедера.

    • 11 строкаname полей хедера.

    • 12 строка — значения полей хедера.

    • 13 строка — пустая, отбивочная.

    • 14 строка — заголовок "Фильтр".

    • 15 строка — пустая либо значение шифрованного фильтра.

    • 16 строка — пустая, отбивочная.

    • 17 строка — заголовок "Строчная часть".

    • 18 строка — заголовки колонок

    • 19 строкаname колонок

    • 20 - n строка — строки.

    В расчетных таблицах

    Если есть футеры колонок они выводятся после строк в соответствующих колонках в виде

    ;f0H;;"Заголовок футера колонки"
    ;f0N;;name_fc_1
    ;f0V;;"Значение фк1"
    ;f1H;;"Заголовок футера колонки 2"
    ;f1N;;name_fc_1
    ;f1V;;"Значение фк1"
    

    После строчной части:

    • s + 1 — заголовок "Футер".

    • s + 2 — названия колонок футера.

    • s + 3name колонок футера.

    • s + 4 — значения колонок футера.

    Пример выгрузки CSV (номера строк показаны в информационных целях, в реальной выгрузке они отсутствуют):

    1.  "Новая таблица"
    2.  "от 23.10 19:46";code:1013933786;structureCode:1838388430
    3.  "Вне циклов"
    4.  ;;
    5.  "Ручные значения"
    6.  "[0: рассчитываемые поля не обрабатываем] [1: меняем значения рассчитываемых полей уже выставленных в ручное] [2: меняем рассчитываемые поля]"
    7.  0
    8.  ;;
    9.  Хедер
    10. "Поле хедера 1";"Поле хедера 2"
    11. name_h_1; name_h_2
    12. "Значение х1";"Значение х2"
    13. ;;
    14. Фильтр
    15. "gfhutyfndhjfoi98863chyhvx...."
    16. ;;
    17. "Строчная часть"
    18. Удаление;id;"Колонка 1";"Колонка 2"
    19  ;;name_1;name_2
    20. ;1;"Значение 1 строка 1";"Значение 2 строка 1"
    21. ;2;"Значение 1 строка 2";"Значение 2 строка 2"
    22. ;3;"Значение 1 строка 3";"Значение 2 строка 3"
    23. ;f0H;;"Футер колонки 1"
    24  ;f0N;;name_fc_1
    25. ;f0V;;"Значение фк1"
    26. ;;
    27. Футер
    28. "Поле футера 1";"Поле футера 2"
    29  name_h_1; name_h_2
    30. "Значение ф1";"Значение ф2"
    31. ;;
    

    Таблица CSV

    Особенности полей в CSV

    Поля Кнопка и Комментарии выгружаются пустыми и загрузке не подлежат.

    Поле Пароль выгружается пустым, загружается как строка.

    Поля Текст, Данные выгружаются и загружаются в формате base64.

    Поле Файл не может быть выгружено и должно быть скрыто.

    Поля Cелект и Селект-дерево выгружаются в виде [основание:значение].

    Для множественных селектов в виде [основание1:значение1][основани2:значение2].

    Загружаются таким же образом. Значащим при загрузке является основание, значение может быть пустым — [3:].

    CSV строчная часть

    Экспорт строчной части

    При экспорте Только строчной части выгружаются только видимые поля и строки строчной части в том порядке полей в котором их видит пользователь.

    Без id строк и заголовков. Только данные.

    Импорт строчной части

    При загрузке происходит только добавление новых строк. Обновление данных в строках в этом режиме невозможно.

    Соотнесение столбцов в загружаемом файле происходит 1 к 1 в том порядке, в котором пользователь видит поля в момент загрузки.