Marisha_P писал(а):Осталось загадкой - как теперь расчертить границы для ячеек? просто значений неясное количество, и если значений нет, то ничего не прочерчивается (( Получается нерасивая лесенка
Для того, чтобы не печаталась "лесенка", решение в Слк не менее "простое". Модифицируйте свой код следующим образом:
Код: Выделить всё
table struct tmpCnt
(
rownum: integer;
fld: string
)
with index
(
byRow = rownum
)
;
В файле слк вьюху term_v перепишите так:
Код: Выделить всё
.var
MaxCols: Integer;
MaxRows: Integer;
I: Integer;
.endVar
.create view term_v var nRow: Integer from tC where ((nRow == tC.rownum))
Далее, таблицу tC заполняем с указанием номера строки и выравниваем количество ячеек в ней:
Код: Выделить всё
// в начале формы
.begin
term_v.nRow := 0;
end.
//в теле цикла по строкам
.begin
Inc(term_v.nRow);
end.
// заполнение таблицы
term_v.delete all tC;// если ранее в текущую строку попали значения, они нам не нужны
TERM._loop katmarsh TERM._loop marsh_sp TERM._loop mnfoper
{
term_v.Insert tC set fld := TERM.mnfoper.name, rownum := term_v.nRow;
}
MaxCols := 0;
MaxRows := term_v.nRow;
// подсчёт максимального количества колонок
for(; term_v.nRow > 0; Dec(term_v.nRow))
{
term_v._loop tC {}
if RowCount > MaxCols then
MaxCols := RowCount;
}
// установка максимального количества колонок
for(term_v.nRow := 1; term_v.nRow <= MaxRows; Inc(term_v.nRow))
{
term_v._loop tC {}
for(i := RowCount; i < MaxCols; Inc(i))
term_v.Insert tC Set fld := "", rownum := term_v.nRow;
}
Вывод tC следует теперь вынести за все управляемые циклы, и модифицировать следующим образом:
Код: Выделить всё
.begin
nRow := 0;
end.
.{while term_v.nRow < MaxRows
.begin
Inc(term_v.nRow);
end.
.{horizontal table 'term_v.tC'
^
.}
.}
Принцип формирования таблицы получается такой: в теле цикла по строкам исходной таблицы мы копируем все статичные поля во временную, дополняем её динамическими, а затем расширяем до максимального количества столбцов. Потом построчно печатаем полученную таблицу, разбивая её на отдельные строки с помощью поля rownum.
Надеюсь, данный способ пригодится всем присутствующим