Оригинал на GitHub
Вопрос
Есть таблица, в которой собираются приходы и расходы за период.
По реализации это временная таблица, сначала список собирается в h_header_input
Я хочу, чтобы соседние дни были разного цвета. Но есть пара но:
Дни могут идти не по порядку, поэтому идея с чётностью чисел отпадает, т.к. может быть 1, 3, 5 число.
В один день может быть много платежей и все они должны быть одного цвета, чтобы чередовались именно дни месяца, а не строки.
Я такое делал на google script
. Но там это в цикле сделано, в котором переменная сбрасывается по-очереди в true/false
, когда следующий день в цикле перебора случается.
Как сделать такое в Totume я что-то ума не приложу, но с такой штукой сильно удобнее работать, информация легче считывается.
Ответ
Это можно сделать через код форматирования строки и процессные переменные. Процессная переменная нужна для того, что бы расчитать весь список покрашенный строк один раз. Какая строка будет окрашена, а какая нет, определяется при помощи listReplace и дополнительной переменной внутри кода, устанавливаемой в противоположное положение для каждого следующего элемента списка.
Код форматирования строки:
f1=: setRowFormat(condition: $list = #date; background: "whitesmoke")
list: if(condition: $@color != $#lc; then: $@color; else: $color)
color: procVar(name: "color"; value: $filter[[date]])
filter: listFilter(list: $replace; key: "color" = true)
replace: listReplace(list: $rawlist; action: "color" = $checkbox)
rawlist: rowListCreate(field: "date" = $uniq)
uniq: listUniq(list: $datelist)
datelist: selectList(table: $#ntn; field: 'date'; where: 'id' = $#rows; order: 'id' asc)
checkbox: if(condition: $varcheck = false; then: false; else: true)
varcheck: if(condition: $check = true; then: $setfalse; else: $settrue)
check: var(name: "check"; default: true)
setfalse: var(name: "check"; value: false)
settrue: var(name: "check"; value: true)
Быстрая переменная $#rows
доступна в коде форматирования таблицы и коде форматирования строк и содержит информация об id строк, отображающихся на странице.