Страница 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 не додумался пока ещё.