Печать осуществляется на основе 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} — передача переменной с форматированием. Форматирование может быть назначено как простой переменной, так и переменной с ключом. Возможное форматирование:
Используется для вывода числового значения в виде текста прописью. Внимание — значимо отсутствие пробела после запятой.
<div>{num,money}</div>
{"num":10000.10}
Результат:
<div>десять тысяч рублей 10 копеек</div>
Используется для числового значения для вывода форматированного числа.
После двоеточия в number
вводятся параметры разделенные |
в определенной последовательности:
Количество знаков после запятой.
Разделитель целой и дробной части.
Разделитель тысяч.
Единицы измерения — если передан null или пустая строка, единицы измерения не выводятся.
<div>{num,number:0|,| | р.}</div>
{"num":10000.10}
Результат:
<div>10 000 р.</div>
Используется для даты/времени, выводится форматированная дата/время.
После двоеточия указывается формат даты так же, как и для функции dateFormat.
Если в формате использована:
F — выводится название месяца по-русски.
f — название месяца по-русски в родительном падеже.
Используется для значений 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 в соответствии со своими правами видимости полей и ограничениями префильтра.
Выгружаются только те строки и в том порядке, которые пользователь видит в 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 + 3 — name
колонок футера.
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. ;;
Поля Кнопка и Комментарии выгружаются пустыми и загрузке не подлежат.
Поле Пароль выгружается пустым, загружается как строка.
Поля Текст, Данные выгружаются и загружаются в формате base64.
Поле Файл не может быть выгружено и должно быть скрыто.
Поля Cелект и Селект-дерево выгружаются в виде [основание:значение]
.
Для множественных селектов в виде [основание1:значение1][основани2:значение2]
.
Загружаются таким же образом. Значащим при загрузке является основание, значение может быть пустым — [3:]
.
При экспорте Только строчной части выгружаются только видимые поля и строки строчной части в том порядке полей в котором их видит пользователь.
Без id
строк и заголовков. Только данные.
При загрузке происходит только добавление новых строк. Обновление данных в строках в этом режиме невозможно.
Соотнесение столбцов в загружаемом файле происходит 1 к 1 в том порядке, в котором пользователь видит поля в момент загрузки.