powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Report, группировка в строчку
17 сообщений из 17, страница 1 из 1
Report, группировка в строчку
    #34347854
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста , можно ли после группировки в Group Header сделать так чтобы
данные выводились в строчку.
Обычно после группировки так.
Код: plaintext
1.
2.
3.
4.
ГИП
АСО
ВИК
САПР
а надо так
Код: plaintext
ГИП АСО ВИК САПР
Количество данных меняется.
Спасибо
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34347879
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно. Процедурно.
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34347988
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно немного подробнее, хотя бы алгоритм или пример кода.
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34348044
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-) Создай переменную отчета Report - Variables с именем, например, TotalLine
-) У этой переменной сделай такие настройки

Init Value = ""
ValueToStore = TotalLine + " "+ AllTrim(MyTab.MyField)
Reset value = признак группировки

-) Создай объект печати в Group Footer и в качестве выражения укажи имя этой переменной

Если это нужно именно для Group Header , то все делается аналогично, но не через переменные отчета, а через "внешние" (по отношению к отчету) функции. Т.е. "тупо" сканируешь нужные записи таблицы и складываешь нужную строку
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34350254
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, в репорте и так можно. Совсем забыл ;-)
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34353832
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UrriДа, в репорте и так можно. Совсем забыл ;-)
А как ето настроить.
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34354526
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ как раз же и написал, как ;-)

Еще раз.
Вопрос был: Подскажите пожалуйста , можно ли после группировки в Group Header сделать так чтобы данные выводились в строчку.

Ответ был:
-) Создай переменную отчета Report - Variables с именем, например, TotalLine
-) У этой переменной сделай такие настройки

Init Value = ""
ValueToStore = TotalLine + " "+ AllTrim(MyTab.MyField)
Reset value = признак группировки

-) Создай объект печати в Group Footer и в качестве выражения укажи имя этой переменной

Если это нужно именно для Group Header, то все делается аналогично, но не через переменные отчета, а через "внешние" (по отношению к отчету) функции. Т.е. "тупо" сканируешь нужные записи таблицы и складываешь нужную строку

Условия соблюдены: Group Footer отображается после группировки в Group Header.

Если же тебе нужно что-то другое, то прошу переформулировать вопрос. Описать подробнее, чего именно ты хочешь добиться. Наглядный пример привести.
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34370602
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ-) Создай переменную отчета Report - Variables с именем, например, TotalLine
-) У этой переменной сделай такие настройки

Init Value = ""
ValueToStore = TotalLine + " "+ AllTrim(MyTab.MyField)
Reset value = признак группировки

-) Создай объект печати в Group Footer и в качестве выражения укажи имя этой переменной

Если это нужно именно для Group Header , то все делается аналогично, но не через переменные отчета, а через "внешние" (по отношению к отчету) функции. Т.е. "тупо" сканируешь нужные записи таблицы и складываешь нужную строку

Может я что-то неправильно сделал, но отчет выводит только одно наименование, может потому что я создал две переменные. Посмотрите пожалуйста в чем ошибка.

Просто должно быть так в Group Header1:code3 - выводится общая информация о каждом проекте
А в Group Footer2:g1 должна выводится в строчку информация о ГИП(view9.name2_a и view9.name2_b)
Ну например, для view9.code3=2660
Код: plaintext
1.
2.
Получает: ГИП   ВИК   ВСЕ  (view9.name2_a  при view9.g1= 0 )
ОТдает:    ВСЕ   Архив        (view9.name2_b  при view9.g1= 1 )

И ещё вопросик
Нужно чтобы получилось так, например для view9.code3=4404
Т.е. выбирается промежуток времени(не больше месяца), у меня это отдельная форма.
И происходит сравнение если view9.date1 попало в промежуток и g1=0 верхний ряд,
если g2=1 нижний ряд.Если значения не найдены то пишется в верху Данные не получает
В низу данные не отдает

Код: plaintext
1.
2.
3.
         x                 x        
 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ;...; 25 ; 26 ; 27 ; 28 ; 29 ; 30 ; 31 
                                        x 
Я это все реализовываю но у меня не получается отобразить это все в одну строку.
Опыта мало поэтому задаю такие вопросы.
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34371634
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты просто выделил слишком мало места для печати сформированной строки. Весь текст не вмещается в выделенную облать и переносится по пробелам. Вот ты и видишь только первое найденное слово. Увелич длину объекта печати. Место, куда должен выводится текст переменных TotalLine и TotalLine2
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34372401
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМТы просто выделил слишком мало места для печати сформированной строки. Весь текст не вмещается в выделенную облать и переносится по пробелам. Вот ты и видишь только первое найденное слово. Увелич длину объекта печати. Место, куда должен выводится текст переменных TotalLine и TotalLine2
Действительно все верно. Спасибо.
А не подскажите как сделать такой ход в отчете.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Нужно чтобы получилось так, например для view9.code3= 4404 
Т.е. выбирается промежуток времени(не больше месяца), у меня это отдельная форма.
И происходит сравнение если view9.date1 попало в промежуток и g1= 0  верхний ряд,
если g2= 1  нижний ряд.Если значения не найдены то пишется в верху Данные не получает
В низу данные не отдает


         x                 x        
 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ;...; 25 ; 26 ; 27 ; 28 ; 29 ; 30 ; 31 
                                        x 

Я это все реализовываю но у меня не получается отобразить это все в одну строку.
Опыта мало поэтому задаю такие вопросы.
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34372718
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понял задачу: надо поставить символы "х" в соответствующих местах или вывести некий текст.

В принципе, это можно сделать средствами отчета. Но лучшен не надо. Проблема не в том, что это слишком сложно, а в том, что всевозможные "навороты" внутри отчета "не прозрачны". Такой отчет крайне трудно редактировать. Тяжело понять "кто на ком стоял".

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

В данном случае, две строк и 31 поле (больше 31 дня в месяце быть не может). До печати отчета заполняешь эту таблицу и ее же содержимое и печатаешь.

Такая технология проще, понятнее и удобнее в работе. Как на этапе создания, так и на этапе последующего редактирования отчета.
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34372867
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМЯ правильно понял задачу: надо поставить символы "х" в соответствующих местах или вывести некий текст.

В принципе, это можно сделать средствами отчета. Но лучшен не надо. Проблема не в том, что это слишком сложно, а в том, что всевозможные "навороты" внутри отчета "не прозрачны". Такой отчет крайне трудно редактировать. Тяжело понять "кто на ком стоял".

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

В данном случае, две строк и 31 поле (больше 31 дня в месяце быть не может). До печати отчета заполняешь эту таблицу и ее же содержимое и печатаешь.

Такая технология проще, понятнее и удобнее в работе. Как на этапе создания, так и на этапе последующего редактирования отчета.

Да вы правильно поняли задачу, и я понимаю что через временные таблицы проще.Я как бы и создаю с временного selecta, но например я имею временную таблицу такую как приложена, и я могу сделать ещё одну выборку по нужному условию(чтобы view9.date1 или view9.date2 лежали в определенном интервале) но договоров много и как на каждый сделать так я не знаю.Т.е. выбрал договор заполнил таблицу, в отчет , отчистил таблицу взял новый договор заполнил таблицу и в отчет. А как ето сделать ???
Спасибо за помощь.
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34373426
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, простейший вариант:

Код: plaintext
1.
2.
3.
4.
SELECT ... FROM ... INTO CURSOR curReport NOFILTER WHERE ...
select curReport
REPORT FORM MyReport.frx
USE IN curReport

В таком синтаксисе отчет должен быть сделан в Default DataSession и в DataEnvironment отчета ничего не должно быть. Все объекты печати либо вообще не должны иметь алиаса таблицы, либо вручную прописывать алиас курсора, который будет сформирован непосредственно перед выполнением отчета curReport.Field

Очищать курсор не надо. Надо его просто удалять и создавть заново.

В приведенном выше примере курсор был заполнен за один запрос, но там вполне может быть и процедура любой степени сложности.
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34376371
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМНу, простейший вариант:

Код: plaintext
1.
2.
3.
4.
SELECT ... FROM ... INTO CURSOR curReport NOFILTER WHERE ...
select curReport
REPORT FORM MyReport.frx
USE IN curReport

В таком синтаксисе отчет должен быть сделан в Default DataSession и в DataEnvironment отчета ничего не должно быть. Все объекты печати либо вообще не должны иметь алиаса таблицы, либо вручную прописывать алиас курсора, который будет сформирован непосредственно перед выполнением отчета curReport.Field

Очищать курсор не надо. Надо его просто удалять и создавть заново.

В приведенном выше примере курсор был заполнен за один запрос, но там вполне может быть и процедура любой степени сложности.
Да я так и делаю.Н оу меня не получается одним запросом получть такой вариант, чтобы сразу в отчет. Все равно надо будет мучаться чтобы данные вывести в строчку.
Я попробывал так, сначала одним select выбрал общие данные и сохранил в таблицу tabe1, потом
на основе tabe1 сделал ещё один select который по определенному условию мне данные представлял одной строкой и сохранил в другую таблицу tabe2. Теперь я делаю так, общие данные в отчете я формирую из tabe1 а там где надо данные в строчку беру из tabe2. Но получается что он берет первую запись из tabe1, а потом все строчки идут из tabe2. Т.е. надо установить что -то типа индекса по общему полю tabe1.code3=tabe2.code3.
Но в tabe1 полей с одинаковым значение поля code3 может быть несколько. Я представлял ето так Group header печатаются общие данные из tabe1 и соответствующая строка из tabe2,а в detail уже печатались подробные данные из tabe1. Помогите пожалуйста очень срочно надо.
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34376715
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как пример.

Код: 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.
40.
41.
42.
43.
44.
* Создаю курсор для будущего отчета
* Поля up... 	- содержат символ, отображаемый над числовым рядом
* Поля down... 	- содержат символ отображаемый под числовым рядом
Create Cursor curReport ( ;
		up1  C( 1 ), up2  C( 1 ), up3  C( 1 ), up4  C( 1 ), up5  C( 1 ), ;
		up6  C( 1 ), up7  C( 1 ), up8  C( 1 ), up9  C( 1 ), up10 C( 1 ), ;
		up11 C( 1 ), up12 C( 1 ), up13 C( 1 ), up14 C( 1 ), up15 C( 1 ), ;
		up16 C( 1 ), up17 C( 1 ), up18 C( 1 ), up19 C( 1 ), up20 C( 1 ), ;
		up21 C( 1 ), up22 C( 1 ), up23 C( 1 ), up24 C( 1 ), up25 C( 1 ), ;
		up26 C( 1 ), up27 C( 1 ), up28 C( 1 ), up29 C( 1 ), up30 C( 1 ), up31 C( 1 ), ;
		down1  C( 1 ), down2  C( 1 ), down3  C( 1 ), down4  C( 1 ), down5  C( 1 ), ;
		down6  C( 1 ), down7  C( 1 ), down8  C( 1 ), down9  C( 1 ), down10 C( 1 ), ;
		down11 C( 1 ), down12 C( 1 ), down13 C( 1 ), down14 C( 1 ), down15 C( 1 ), ;
		down16 C( 1 ), down17 C( 1 ), down18 C( 1 ), down19 C( 1 ), down20 C( 1 ), ;
		down21 C( 1 ), down22 C( 1 ), down23 C( 1 ), down24 C( 1 ), down25 C( 1 ), ;
		down26 C( 1 ), down27 C( 1 ), down28 C( 1 ), down29 C( 1 ), down30 C( 1 ), down31 C( 1 ) ;
		)
* Создаю одну пустую строку
Append Blank 

* Сканирую исходную таблицу по коду view9.code3= 4404  для указанного месяца
* Для примера, за март  2007  года
Local ldFromDate, ldToDate
ldFromDate 	= {^ 2007 - 03 - 01 }
ldToDate	= {^ 2007 - 03 - 31 }

Local lcName
Select view9
Scan FOR view9.code3= 4404  AND Between(view9.date1, m.ldFromDate, m.ldToDate)
	* Формирую имя поля курсора curReport в который пойдет запись
	If view9.g1 =  0 
		lcName = "up"
	Else
		lcName = "down"
	EndIf
	lcName = m.lcName+Transform(Day(view9.date1))
	* Делаю запись в текущую строку курсора curReport
	Select curReport
	REPLACE &lcName WITH 'x'
EndScan

* Собственно печать отчета
Select curReport
Report Form MyReport.frx preview

В отчете создаешь 31 объект для печати над строкой чисел, где указываешь поля up... и 31 объект для печати под строкой чисел, где указываешь поля down...

Если использовать шрифт равной ширины, то можно все это впихнуть в 2 поля, а не разбивать на 2 по 31 полю.

Это все было для одного кода. Можно сделать то же самое и для нескольких кодов. Надо только добавить в curReport поле для хранения кода и перед записью делать поиск нужного кода.
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34377299
МашкоБ.В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ Спасибо большое за пояснеиня я просто не работал с create cursor, все через select into cursor . Извеняюсь за некорректные вопрсы,задавал их по частям и тепер не могу собрать все вместе. Ещё раз, вся выборка идет на основе таблицы view9, по ней в отчете должны быть выбраны все договора, индекс по полю code3,но для договоров у которых ещё view9.data1 лежит в ограниченном временном пределе,будет выводиться дополнительная информация.
Код: plaintext
1.
2.
3.
ldFromDate 	= {^ 2007 - 03 - 01 }
ldToDate	= {^ 2007 - 03 - 31 }
Select view9
Scan FOR Between(view9.date1, m.ldFromDate, m.ldToDate)
Я приложил таблицу и кусочек договора на основе ,когда code3=2660 и для code3= 5339
Помогите пожалуйста, отчет нужен сегодня для директора , а у меня не получается объединить ето все в один отчет.
...
Рейтинг: 0 / 0
Report, группировка в строчку
    #34377679
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри во вложении. Надо запустить файл PRG.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Report, группировка в строчку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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