Страница 2 из 2
Re: Универсальный журнал-ордер в Excel
Добавлено: 18 дек 2006, 18:02
other95
Goblin писал(а):Maverick, не пугай народ, понимает SLK горизонтальные циклы
Nick, динамическое кол-во столбцов можно в SLK делать с помощью конструкции
.{.?<идент. цикла>;<тело цикла>.}
, есть только ряд ограничений(нигде не описано, методом пробного тыка получено и использовано уже в десятке самописных отчетов):
1) Открываться и закрываться цикл должен в разных ячейках.
2) Открытие или закрытие цикла на ячейку - только одно.
3) Тело цикла должно быть в той же ячейке что и открытие цикла
если не получится - скинь форму на мыло
А как сделать горизонтальный цикл по таблице?
.{horizontal table 'Test'; <тело цикла>.} - Не работает
.{.? table 'Test'; <тело цикла>.} - Так тоже не работает
Re: Универсальный журнал-ордер в Excel
Добавлено: 08 фев 2011, 10:12
Marisha_P
если на вопрос не было ответа, я так понимаю, что нельзя сделать цикл по таблице, да?:(
Re: Универсальный журнал-ордер в Excel
Добавлено: 08 фев 2011, 12:03
LaaLaa
Marisha_P писал(а):если на вопрос не было ответа, я так понимаю, что нельзя сделать цикл по таблице, да?:(
Горизонтальные циклы в FCOM это не разрешимая загадка.
Рисуйте отчеты с динамическим количеством колонок в FastReport. Для этого там есть две возможности "Объект Cross-Tab" и "Вертикальные бэнды".
Re: Универсальный журнал-ордер в Excel
Добавлено: 08 фев 2011, 13:21
oiko
По таблице не пробовал. Если просто хочется сделать вертикальный цикл, то в прототипе например пишем
.{.?stpotreb_01_01;^ .}
а в slk
| ячейка1 | ячейка2 | ячейка3 |
| |.{.?stpotreb_01;^ | .} |
И так все работает
Re: Универсальный журнал-ордер в Excel
Добавлено: 02 мар 2011, 14:46
Marisha_P
проблема разрешилась на мой взгляд достаточно просто.
сначала в файле с расширением vpp написала след. код:
table struct tmpCnt
(
fld: string
);
а потом в самом slk заполнила эту табличку значениеями из запроса:
TERM._loop katmarsh TERM._loop marsh_sp TERM._loop mnfoper
{
term_v.Insert tC set fld := TERM.mnfoper.name;
}
ну а это уже непосредственно сам вывод горизонтального цикла:
.{horizontal table 'term_v.tC'
^
.}
Осталось загадкой - как теперь расчертить границы для ячеек? просто значений неясное количество, и если значений нет, то ничего не прочерчивается
(( Получается нерасивая лесенка
Re: Универсальный журнал-ордер в Excel
Добавлено: 02 мар 2011, 15:28
edward_K
excel лучше - в текстовой присоединенке заполняете как хотите, где хотите, чертите , ставите ширину колонок и так далее. И проще. А если научитесь использовать шаблоны типа актов на списание, то еще проще(тока слегка медленнее, чем если бы все руками создавать, да и файло с макросом открывается дольше).
Re: Универсальный журнал-ордер в Excel
Добавлено: 02 мар 2011, 16:37
Marisha_P
не поняла, что нужно сделать:( вывод переделать из slk в текст? или в текстовом файле прописать особенности разметки? который компилировать потом в проекте?
Re: Универсальный журнал-ордер в Excel
Добавлено: 02 мар 2011, 17:39
edward_K
да. Slk переделать в текст. Параллельно или вместо использовать xl функции - поищите на форуме XlOpenExcel, xlCreateExcelWithTemplate, Excel.doc и так далее.
Чтобы погасить вывод на экран текстовой формы используйте
Это как раз тот случай когда стоит слегка подучится, потом за 5 минут долететь.
У меня так своя библиотека написана, и на разработку простенького отчета уходит от получаса.
Re: Универсальный журнал-ордер в Excel
Добавлено: 12 май 2011, 13:55
Semi-bit
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.
Надеюсь, данный способ пригодится всем присутствующим
Re: Универсальный журнал-ордер в Excel
Добавлено: 12 май 2011, 18:09
LaaLaa
По моему FR в данном случае поможет сохранить клетки мозга
Re: Универсальный журнал-ордер в Excel
Добавлено: 13 май 2011, 09:25
Semi-bit
Сытый конному не... то есть, с 7 и не такие выкрутасы приходится творить
В своих интерфейсах уже давно использую макросы и ExcelLib для таких вещей, но в стандартных их запустить не проще, чем реализовать приведённый пример. Хотя, использовать текстовичок по методу edward_K не додумался пока ещё.