Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / [vfp9] скрыть поле из отчета / 25 сообщений из 31, страница 1 из 2
18.11.2011, 12:10
    #37533172
tvolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
Всем привет.

Ситуация. Есть таблица, по которой формируется отчет (стандартный report).
Есть некоторое условие, при выполнении которого одну из колонок не нужно выводить.
Для соответствующего поля в отчете я установил свойство "Print only when expression is true".
Таким образом, когда необходимо, значение не печатается. Но под него, к сожалению, отводится место в отчете. То есть, печатается просто пустая вертикальная полоса. Возможно ли это как-то побороть ?
Заранее благодарю за помощь.
...
Рейтинг: 0 / 0
18.11.2011, 16:34
    #37533866
Ffffffffffffffff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
Что такое "пустая вертикальная полоса"?
...
Рейтинг: 0 / 0
18.11.2011, 16:39
    #37533883
tvolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
FfffffffffffffffЧто такое "пустая вертикальная полоса"?

Имеется, ввиду, что само содержимое колонки не выводится, но выводится пустое место под неё. Что создает иллюзию пустой вертикальной полосы в отчете.
...
Рейтинг: 0 / 0
18.11.2011, 17:17
    #37533977
Ffffffffffffffff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
Скриншот приложите.
...
Рейтинг: 0 / 0
18.11.2011, 17:23
    #37533983
sqlnew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
А не проще иметь два отчета? Тем более, что одним отличием может и не ограничится...
...
Рейтинг: 0 / 0
18.11.2011, 18:10
    #37534063
tvolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
FfffffffffffffffСкриншот приложите.

Ну, например, есть отчет
===
Поле1 Поле2 Поле3
Поле1 Поле2 Поле3
...
Поле1 Поле2 Поле3
===

Когда я скрываю вывод Поля2, у меня отчет начинает выглядеть так:

===
Поле1 [Пуст.меcто] Поле3
Поле1 [Пуст.меcто] Поле3
...
Поле1 [Пуст.меcто] Поле3
====

А хотелось бы, чтобы он выглядел в итоге так:
====
Поле1 Поле3
Поле1 Поле3
...
Поле1 Поле3
====

Надеюсь, суть донес.
...
Рейтинг: 0 / 0
18.11.2011, 18:14
    #37534069
tvolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
sqlnewА не проще иметь два отчета? Тем более, что одним отличием может и не ограничится...

Я задачу, разумеется, упростил. Пользователь, по сути, выбирает, какие конкретно поля он хочет видеть в отчете. Полей этих предполагается в районе 10 штук. Так что, если для каждой комбинации сочетаний полей формировать свой отчет, их будет не 2, а значительно больше. Понятно, что нормальным решением проблемы это не назвать.
...
Рейтинг: 0 / 0
18.11.2011, 18:37
    #37534098
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
tvolf,

1. вывод в Excel
2. отчёт - можно сделать пустографку
т.е. отчёт с максимальным количеством колонок
и полями курсора field1, field2, ..., field12
эти поля заполнять в курсоре перед выводом отчёта
...
Рейтинг: 0 / 0
18.11.2011, 19:09
    #37534156
tvolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
alextashk1. вывод в Excel

Хотелось бы обойтись "родными" фокспрошными средствами, по возможности.

alextashk2. отчёт - можно сделать пустографку
т.е. отчёт с максимальным количеством колонок
и полями курсора field1, field2, ..., field12
эти поля заполнять в курсоре перед выводом отчёта

Но в этом случае, все неиспользуемые в данный момент поля будут занимать в отчете пустое место справа, я правильно понял ?
То есть, не выводить их в отчете не получится ? То есть, если у нас отчет написан на максимальные 10 полей, а в курсоре мы заполняем только первые 3, например (field1, field2, field3), то в отчете будут выводиться все 10, включая и те 7, которые нам не нужны ?
...
Рейтинг: 0 / 0
18.11.2011, 19:33
    #37534195
SSn888
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
tvolf,
А Вы хотите, чтоб было занято все пространство по горизонтали, а ширина полей в отчете автоматом "подгонялась" под нужные значение? Такое, к сожалению - только в формах.

Как еще один вариант - могу предложить Вам использовать горизонтальный вывод, не столбцами, а строками, наприпер вместо

№ ФИО Должность
1 Иванов И.И. Сантехик-рыболов
2 Петров П.П. Слесарь-маляр

выводить
№: 1
ФИО: Иванов И.И.
Должность: Сантехик-рыболов
№: 2
ФИО: Петров П.П.
Должность: Слесарь-маляр

тогда "ненужно" будет представлено в виде строки, которую легко выкинуть ...
...
Рейтинг: 0 / 0
18.11.2011, 19:47
    #37534219
tvolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
SSn888А Вы хотите, чтоб было занято все пространство по горизонтали, а ширина полей в отчете автоматом "подгонялась" под нужные значение? Такое, к сожалению - только в формах.

Да, похоже, что в отчетах FoxPro не получится сделать так, как хотелось. Тут проблема даже не в том, что "убираемое" по условию поле в отчете всё равно занимает какое-то место, а в том, что последующие поля в своих свойствах имеют жестко заданные
координаты относительно левого верхнего угла соответствующего band'а. Вот если бы можно было задать некий "плавающий" режим, когда при удалении поля все остальные поля, расположенные справа от него, автоматически смещались бы влево на необходимую величину. Что-то типа float:left в html-верстке блоков. Но такого режима, видимо, нет.
...
Рейтинг: 0 / 0
18.11.2011, 20:02
    #37534243
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
Не, ну можно сделать, как во времена FPD: сформировать в курсоре дополнительно поле - текстовую строку с выборкой нужных вам полей по условию, типа:
Код: plaintext
iif(is_field1,'|'+padr(field1, 30 ),'')+iif(is_field2,'|'+padr(field2, 10 ),'')+...
и выводить в отчет эти строчки, НО - шрифт придется использовать моноширинный...
...
Рейтинг: 0 / 0
18.11.2011, 20:10
    #37534252
SSn888
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
AndreTM,

И что Вы выиграете? Точно также пардрами забъете пустые месте и в итоге будете иметь пустую колонку :)
...
Рейтинг: 0 / 0
18.11.2011, 20:36
    #37534285
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
Если у Вас VFP9, то, теоретически, это возможно используя ReportListener. Правда, там будет проблема в идентификации объектов, относящихся к скрываемому столбцу. Впрочем, можно просто по координатам определить. Схематично, примерно так получается

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
oRL = CreateObject('HideColumnReport')
Report Form report_simple.frx preview object oRL

DEFINE CLASS HideColumnReport as ReportListener  
  ListenerType =  1   
   
  PROCEDURE RENDER  
  LPARAMETERS nFRXRecNo,nLeft,nTop,nWidth,nHeight,;  
  			nObjectContinuationType, ;  
  			cContentsToBeRendered, GDIPlusImage  

	* Скрываем все объекты, лежащие в диапазоне от  50  до  100  мм
	Local lnFrom, lnTo, lnDelta
	lnFrom =  50  *  960  /  25 . 4   
	lnTo =  100  *  960  /  25 . 4    
	lnDelta = lnTo - lnFrom

	Do case
	Case nLeft < m.lnFrom 
		* Выводим "как есть"
		  DODEFAULT(nFRXRecNo,m.nLeft,nTop,m.nWidth,nHeight,;  
		  			nObjectContinuationType, ;  
		  			cContentsToBeRendered, GDIPlusImage)  
	Case nLeft >= m.lnFrom and nLeft+nWidth <= m.lnTo
		* Ничего не делаем
		* Не печатаем объекты, которые попали в эти координаты
	Otherwise
		* Сдвигаем на размер "освободившегося" места
		  DODEFAULT(nFRXRecNo,m.nLeft - m.lnDelta,nTop,m.nWidth,nHeight,;  
		  			nObjectContinuationType, ;  
		  			cContentsToBeRendered, GDIPlusImage)  
	
	EndCase

   
  NODEFAULT  
  ENDPROC  
    
  ENDDEFINE  
...
Рейтинг: 0 / 0
18.11.2011, 21:48
    #37534379
tvolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
ВладимирМЕсли у Вас VFP9, то, теоретически, это возможно используя ReportListener. Правда, там будет проблема в идентификации объектов, относящихся к скрываемому столбцу. Впрочем, можно просто по координатам определить. Схематично, примерно так получается
[..]

Спасибо за пример. Интересно. Получается, что можно субклассировать стандартный ReportListener и передать его экземпляр в REPORT FORM. Правда, наверное, с практической точки зрения это не очень удобно будет (возни много), а вот идея, которую предложил AndreTM, более жизнеспособна, как мне кажется. Теряем, правда, немножко в гибкости, но это в данном случае не так страшно. В общем, можно попробовать действительно поместить все выводимые поля курсора в одно поле отчета и при его формировании проверять требуемые логические условия: если условие вывода не выполняется, то просто выводить пустую строку.
...
Рейтинг: 0 / 0
18.11.2011, 22:11
    #37534401
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
tvolfalextashk1. вывод в Excel

Хотелось бы обойтись "родными" фокспрошными средствами, по возможности.

alextashk2. отчёт - можно сделать пустографку
т.е. отчёт с максимальным количеством колонок
и полями курсора field1, field2, ..., field12
эти поля заполнять в курсоре перед выводом отчёта

Но в этом случае, все неиспользуемые в данный момент поля будут занимать в отчете пустое место справа, я правильно понял ?
То есть, не выводить их в отчете не получится ? То есть, если у нас отчет написан на максимальные 10 полей, а в курсоре мы заполняем только первые 3, например (field1, field2, field3), то в отчете будут выводиться все 10, включая и те 7, которые нам не нужны ?

формировала документ в формате НТМ для печати вордом или просмотра броузером
упрощенный пример прилагаю
...
Рейтинг: 0 / 0
18.11.2011, 22:26
    #37534417
tvolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
ПЕНСИОНЕРКАформировала документ в формате НТМ для печати вордом или просмотра броузером
упрощенный пример прилагаю

Спасибо, погляжу.
...
Рейтинг: 0 / 0
18.11.2011, 22:50
    #37534443
tvolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
Обнаружил интересную проблему. В построителе выражений (Expression Builder) для ввода знечения поля отчета
существует ограничению на общую длину вводимой строки в 255 символов. То есть, всё, что вводится свыше этого, просто не сохраняется. Хотя в справке к Expression Builder'у говорится:
===
Tip

You can enter more than 255 characters as well as extended characters, such as CHR(13) (carriage return) and CHR(10) (linefeed), for expressions in the Expression Builder. The Expression box in the Expression Builder supports color syntax and background compilation when turned on. For more information, see How to: Display and Print Source Code in Color.
===
Непонятно, в общем.
...
Рейтинг: 0 / 0
18.11.2011, 23:09
    #37534455
SSn888
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
tvolf,

стройте выражение заранее :)
пихайте данные в курсор всякими иифами, а уж поля курсора кидайте в отчет :)

(раз уз решили использовать этот способ)
...
Рейтинг: 0 / 0
18.11.2011, 23:14
    #37534461
tvolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
SSn888tvolf,
стройте выражение заранее :)
пихайте данные в курсор всякими иифами, а уж поля курсора кидайте в отчет :)
(раз уз решили использовать этот способ)
Сделал чуть по-другому. Написал пользовательскую функцию, и уже её одну вызываю из построителя выражения в отчете.
Вроде бы работает :)
...
Рейтинг: 0 / 0
19.11.2011, 07:36
    #37534628
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
SSn888tvolf,
стройте выражение заранее
пихайте данные в курсор всякими иифами, а уж поля курсора кидайте в отчетЯ, впрочем, это и имел ввиду... А tvolf , видимо, воспринимает совет как "сформировать строку с выражением, а потом в отчете её вычислить" Надо было написАть что-то вроде "выводить в отчет значение этого поля".
Потому что использование UDF в отчете - не лучший вариант. И по времени, и с областью видимости переменных могут быть проблемы...
...
Рейтинг: 0 / 0
19.11.2011, 17:07
    #37534874
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
tvolfвот идея, которую предложил AndreTM, более жизнеспособна, как мне кажется. Теряем, правда, немножко в гибкости, но это в данном случае не так страшно. В общем, можно попробовать действительно поместить все выводимые поля курсора в одно поле отчета и при его формировании проверять требуемые логические условия: если условие вывода не выполняется, то просто выводить пустую строку.
Как Вы понимаете, Вы далеко не первый, кто захотел решить данную задачу. Подобную задачу уже "повертели" под разными углами. Выводы примерно такие

1. Сам факт возникновения подобной задачи означает, что пользователи сами не знают чего хотят. В том смысле, что у них отсутствую навыки анализа данных. Как следствие, любой отчет какой бы Вы им ни сделали их не удовлетворит. В конце концов, они будут просто "тупо" выводить ВСЕ столбцы, какие только можно

2. Если цель отчета - это вывод неких бланков строгой или условно-строгой отчетности, то лучшим решением будет создавать отдельный отчет на каждую задачу. Просто будут возникать некие сопутствующие модификации в зависимости от наличия того или иного столбца, которые будет крайне сложно учесть в универсальном отчете.

3. Если цель отчета - это предоставление неких исходных данных для последующего анализа, то использование отчета FoxPro не имеет смысла. Ведь пользователям надо будет загрузить полученные данные в какой-то инструмент для последующего анализа. Например, в Excel. А с отчетом FoxPro это сделать проблематично. Т.е. придется либо напрямую выводить данные в Excel, либо создавать файл, который может прочитать анализирующая система (тот же HTML)

Другими словами, решение данной задачи средствами отчета FoxPro - это хорошая учебная задача, но практически бесполезна в реальных приложениях. Ну, разве что, как временная "затычка", что "отвязались". Потом все-равно придется переделывать.
...
Рейтинг: 0 / 0
19.11.2011, 18:16
    #37534956
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
Да здесь проще всего перед выводом отчёта сделать MyForm.Mygrid.MyColumn.Width = 0 и вы сроду в отчёте эту колонку не увидите. Только после возврата Width не забудьте вернуть в прежнее значение.
...
Рейтинг: 0 / 0
21.11.2011, 11:17
    #37536390
tvolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
ВладимирМКак Вы понимаете, Вы далеко не первый, кто захотел решить данную задачу.
Была такая мысль, врать не буду :)

ВладимирМ[...]
1. Сам факт возникновения подобной задачи означает, что пользователи сами не знают чего хотят. В том смысле, что у них отсутствую навыки анализа данных. Как следствие, любой отчет какой бы Вы им ни сделали их не удовлетворит. В конце концов, они будут просто "тупо" выводить ВСЕ столбцы, какие только можно
Тут дело обстоит так. Имеются "специально обученные люди", которым необходимо формировать периодически эти самые отчеты. В указаниях на формирование отчетов вполне недвусмысленно говорится, какие именно колонки (поля) в отчетах должны быть (в каждом свои). Так что самодеятельность вида "А давайте включим ВСЁ!" исключена :)

ВладимирМ2. Если цель отчета - это вывод неких бланков строгой или условно-строгой отчетности, то лучшим решением будет создавать отдельный отчет на каждую задачу. Просто будут возникать некие сопутствующие модификации в зависимости от наличия того или иного столбца, которые будет крайне сложно учесть в универсальном отчете.
Сами понимаете, что когда полей 10 штук, этих отчетов может быть достаточно много. Если я правильно вас понял, конечно.

ВладимирМДругими словами, решение данной задачи средствами отчета FoxPro - это хорошая учебная задача, но практически бесполезна в реальных приложениях. Ну, разве что, как временная "затычка", что "отвязались". Потом все-равно придется переделывать.
Задача вполне себе "боевая" :)
...
Рейтинг: 0 / 0
21.11.2011, 11:19
    #37536395
tvolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[vfp9] скрыть поле из отчета
rewareДа здесь проще всего перед выводом отчёта сделать MyForm.Mygrid.MyColumn.Width = 0 и вы сроду в отчёте эту колонку не увидите. Только после возврата Width не забудьте вернуть в прежнее значение.
Интересно. Каким образом скрытие колонки в гриде влияет на данные, формируемые отчетом ?
Там вполне может быть свой курсор, который с гридом вообще никак не связан.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / [vfp9] скрыть поле из отчета / 25 сообщений из 31, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]