Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Crystal Reports: Передача данных из основного отчёта в подчинённый

9.5K
16 января 2007 года
ROLpogo
80 / / 22.08.2006
Запрос основного отчёта динамически формируется в программе и допустим выглядит так:
 
Код:
select * from v_ForReport where idTask in (10, 15, 23, 30)

Он выдаёт нам такие данные:

 
Код:
idTask ClientName idMaterial
10      Иван       12
10      Иван       7
15      Андрей     456
23      Николай    34
23      Николай    127
23      Николай    87
30      Михаил     6
30      Михаил     345


Подчинённый же запрос должен содержать первые 2 поля основного, но без повторений, т.е.

 
Код:
idTask ClientName
10      Иван
15      Андрей
23      Николай
30      Михаил



Как такое реализовать в Crystal Report 11?
Проблема в том, как передать в запрос подчинённому отчёту динамически сформированный для основного запроса диапазон id'шников "(10, 15, 23, 30)" :confused:
337
16 января 2007 года
shine
719 / / 09.06.2006
SELECT idTask, ClientName FROM v_ForReport GROUP BY idTask

P.S. Избавляйся от вредной привычки использования * в SQL-запросах
263
16 января 2007 года
koltaviy
816 / / 16.12.2004
Цитата: shine

..
Избавляйся от вредной привычки использования * в SQL-запросах
..


А что в этом вредного?
Или ты имеешь ввиду, что нужно писать:

 
Код:
SELECT TableName.* FROM TableName WHERE .. ORDER BY ..

..тогда возможно, хотя, если запрос простой, то 'SELECT *' подразумевает выбор всех полей из таблицы, указанной в секции FROM..
Что в этом такого?
337
16 января 2007 года
shine
719 / / 09.06.2006
Цитата: koltaviy
А что в этом вредного?



Очень часто встречал повальное использование * в запросах. Например нужно человеку вытащить из таблицы с 30 полями значения 3-х, а он все равно пихает в запрос *.
Более того, даже если в момент написания запроса ты действительно будешь использовать значения всех столбцов, то позже таблица может меняться и ситуация вполне может прийти к той, которую я описал чуть выше.

263
16 января 2007 года
koltaviy
816 / / 16.12.2004
Цитата: shine
Очень часто встречал повальное использование * в запросах. Например нужно человеку вытащить из таблицы с 30 полями значения 3-х, а он все равно пихает в запрос *.
Более того, даже если в момент написания запроса ты действительно будешь использовать значения всех столбцов, то позже таблица может меняться и ситуация вполне может прийти к той, которую я описал чуть выше.


Бред!!
Если тебе надо 'вытащить' все 30 полей из таблицы в 30 полей, то ты что будешь прописывать все 30 полей?:confused: :D А если по твоей логике таблица изменится, но тебе по прежнему нужны будут все поля.. Все 30 будешь переписывать заново:confused:
Если тебе из 30 полей нужно использовать 3, то и пиши так, чтобы запрос 'вытащил' только три поля!
Если человек, которому нужно 3 поля из одной таблицы в 30 полей, пишет 'SELECT * ..', то этот человек - идиот.. И ничего более!!

337
16 января 2007 года
shine
719 / / 09.06.2006
Цитата: koltaviy
Бред!!



Спасибо, что предупредил. То, что последовало за этим - действительно бред. :)

263
16 января 2007 года
koltaviy
816 / / 16.12.2004
Whatever!!
Ты сказал, что использовать '*' в выражениях - вредная привычка, но так и не аргументировал свое высказывание!! Если то, что ты написал - это и есть твои аргументы, то это бред.
Я же не утверждаю свою провоту, просто хочу убедиться, что ты прав.
С твоей стороны же увидел только голословность..
9.5K
17 января 2007 года
ROLpogo
80 / / 22.08.2006
Цитата: shine
SELECT idTask, ClientName FROM v_ForReport GROUP BY idTask

P.S. Избавляйся от вредной привычки использования * в SQL-запросах



Вьюха v_ForReport содержит все записи, а в основной отчёт передаются только те, что перечисленны в списке "...where idTask in (10, 15, 23, 30)"
Если ваш запрос прописать для подчинённого отчёта он выдаст все записи, т.е. не только те, где idTask = 10, 15, 23 и 30

337
17 января 2007 года
shine
719 / / 09.06.2006
Попробуй так:
SELECT idTask, ClientName FROM v_ForReport WHERE idTask IN (10, 15, 23, 30) GROUP BY idTask
9.5K
17 января 2007 года
ROLpogo
80 / / 22.08.2006
Цитата: shine
Попробуй так:
SELECT idTask, ClientName FROM v_ForReport WHERE idTask IN (10, 15, 23, 30) GROUP BY idTask



Похоже меня не поняли.
Список idTask'ов, которые передаются в Crystal Report для основного отчёта, формируется динамически. В основном отчёте находится подчинённый, вот ему и требуется как-то передать этот динамически сформированный список idTask'ов из основного отчёта.

Пока я нашёл только один выход: передавать из самой программы запрос и для подчинённого отчёта. Но хотелось бы узнать можно ли средствами самого Crystal'а передать этот список из основного в подчинённый :rolleyes:

263
18 января 2007 года
koltaviy
816 / / 16.12.2004
Цитата: ROLpogo
Похоже меня не поняли.
Список idTask'ов, которые передаются в Crystal Report для основного отчёта, формируется динамически. В основном отчёте находится подчинённый, вот ему и требуется как-то передать этот динамически сформированный список idTask'ов из основного отчёта.

Пока я нашёл только один выход: передавать из самой программы запрос и для подчинённого отчёта. Но хотелось бы узнать можно ли средствами самого Crystal'а передать этот список из основного в подчинённый :rolleyes:


Думаю, что передача в подчиненный условия тоже - единственный вариант..

А вообще sample в студию!!

263
18 января 2007 года
koltaviy
816 / / 16.12.2004
Если для подчиненного отчета тоже используется 'вьюха', то установи между этими 'вьюхами' Relation (один-к-одному) по полям idTask - idTask.
9.5K
18 января 2007 года
ROLpogo
80 / / 22.08.2006
Цитата: koltaviy
Если для подчиненного отчета тоже используется 'вьюха', то установи между этими 'вьюхами' Relation (один-к-одному) по полям idTask - idTask.



Трабла в том, что подчинённый отчёт не находится в группированной по idTask секции основного отчёта, а расположен так скать "с боку припёку". Суть в том чтоб в подчинённом отчёте тупо отобразить список всех заказов с уникальными idTask из основного :)

263
18 января 2007 года
koltaviy
816 / / 16.12.2004
Ты для обоих отчетов(основного и подчиненного используешь одну и ту же 'вьюху')!?!
Короче, надо смотреть..
Что такое 'расположен так скать "с боку припёку"' сложно догадаться!!
9.5K
18 января 2007 года
ROLpogo
80 / / 22.08.2006
Цитата: koltaviy
Ты для обоих отчетов(основного и подчиненного используешь одну и ту же 'вьюху')!?!
Короче, надо смотреть..
Что такое 'расположен так скать "с боку припёку"' сложно догадаться!!



Вьюхи разные. А "с боку припёку" здесь означает, что SubReport расположен в секции Report Header основного отчёта :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог