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

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

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

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

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

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

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

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

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

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

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

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

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

И что Вы выиграете? Точно также пардрами забъете пустые месте и в итоге будете иметь пустую колонку :)
...
Рейтинг: 0 / 0
[vfp9] скрыть поле из отчета
    #37534285
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у Вас 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
[vfp9] скрыть поле из отчета
    #37534379
tvolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМЕсли у Вас VFP9, то, теоретически, это возможно используя ReportListener. Правда, там будет проблема в идентификации объектов, относящихся к скрываемому столбцу. Впрочем, можно просто по координатам определить. Схематично, примерно так получается
[..]

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

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

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

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

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

Спасибо, погляжу.
...
Рейтинг: 0 / 0
[vfp9] скрыть поле из отчета
    #37534443
tvolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обнаружил интересную проблему. В построителе выражений (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
[vfp9] скрыть поле из отчета
    #37534455
SSn888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tvolf,

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

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

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

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

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

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

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

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

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


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