Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2012, 07:54   #11
GX_h10
Пользователь
 
Регистрация: 20.04.2009
Сообщений: 28
По умолчанию

Так и предполагал. Увы, изначально вопрос был по поводу такого варианта: http://ehlib.com/IMAGES/dbgridehform18.PNG
Можно, небольшую наглость? Хочу посмотреть ваш SQL-исходник к "экспериментальной таблице".
GX_h10 вне форума Ответить с цитированием
Старый 05.05.2012, 08:05   #12
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Дерево собирается из трех разнохарактерных таблиц, поэтому несколько громоздко и вряд ли чем поможет:
Код:
SELECT ID ID_Customer, NULL ID_vid, NULL [Дата регистрации заказа], 
       (SELECT SUM([Стоимость заказа])
        FROM Заказы З
        WHERE Клиенты.ID = З.ID_Customer
        GROUP BY Клиенты.ID) AS [Стоимость заказа], 
       ID+10000 ID_Order, 0 id_par, 
       NULL [Дата Оплаты], NULL [Тип оплаты**],

       (SELECT SUM([Сумма оплаты])
        FROM Оплата O, Заказы З
        WHERE Клиенты.ID = З.ID_Customer and З.id_order = O.id_order
        GROUP BY Клиенты.ID) AS [Оплачено], 

        CASE WHEN (SELECT SUM([Сумма оплаты])
                   FROM Оплата O, Заказы З
                   WHERE Клиенты.ID = З.ID_Customer and З.id_order = O.id_order
                   GROUP BY Клиенты.ID) IS NULL 
             THEN 
               (SELECT SUM([Стоимость заказа])
                FROM Заказы З
                WHERE Клиенты.ID = З.ID_Customer
                GROUP BY Клиенты.ID) 
             ELSE 
               (SELECT SUM([Стоимость заказа])
                FROM Заказы З
                WHERE Клиенты.ID = З.ID_Customer
                GROUP BY Клиенты.ID) -
               (SELECT SUM([Сумма оплаты])
                FROM Оплата O, Заказы З
                WHERE Клиенты.ID = З.ID_Customer and З.id_order = O.id_order
                GROUP BY Клиенты.ID)
        END AS [Долг]
FROM Клиенты
where ID in (select ID_Customer from Заказы where Заказы.id_order_type = 3)
UNION
SELECT [ID_customer], ID_vid, [Дата регистрации заказа], [Стоимость заказа], 
       ID_order, ID_customer+10000 id_par, 
       NULL [Дата Оплаты], NULL [Тип оплаты**],
       (SELECT SUM([Сумма оплаты])
        FROM [Оплата]
        WHERE id_order = O.id_order
        GROUP BY id_order) AS [Оплачено], 
        CASE WHEN (SELECT SUM([Сумма оплаты])
                   FROM [Оплата]
                   WHERE id_order = O.id_order
                   GROUP BY id_order) IS NULL 
             THEN [Стоимость заказа] 
             ELSE
               (SELECT [Стоимость заказа] - SUM([Сумма оплаты])
                FROM [Оплата]
                WHERE id_order = O.id_order
                GROUP BY id_order) END AS [Долг]
FROM  [Заказы] O
WHERE id_order_type = 3
UNION
SELECT NULL ID_pay, NULL ID_pay, NULL ID_pay, NULL ID_pay, 
       id_pay - 10000000 id_pay, id_order id_par, 
       [Дата оплаты], [ID_type_pay], [сумма оплаты], [Долг]
FROM [Оплата]
order by долг desc
А в чем вы видите принципиальную разницу между таблицами (видами гридов)? Приведенную вами и той, которая у меня, если говорить лишь об открытии/закрытии узлов дерева.

Последний раз редактировалось Прик; 05.05.2012 в 08:08.
Прик вне форума Ответить с цитированием
Старый 05.05.2012, 08:43   #13
GX_h10
Пользователь
 
Регистрация: 20.04.2009
Сообщений: 28
По умолчанию

За код благодарствую.

Цитата:
А в чем вы видите принципиальную разницу между таблицами (видами гридов)? Приведенную вами и той, которая у меня, если говорить лишь об открытии/закрытии узлов дерева.
Для моей задачи, использование DataGrouping наиболее подходящий случай.
Может все же есть мысли, как программно раскрыть узел при использовании исключительно DataGrouping (без использования TreeList)?
GX_h10 вне форума Ответить с цитированием
Старый 05.05.2012, 09:25   #14
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

К сожалению, в моей версии EhLib нет DataGrouping.
Прик вне форума Ответить с цитированием
Старый 05.05.2012, 13:44   #15
GX_h10
Пользователь
 
Регистрация: 20.04.2009
Сообщений: 28
По умолчанию

Прик Пробовал создать дерево в гриде основываясь на двух полях "Place" (Подразделение) и "SubPlace" (Отделы Подразделения). Соответсвенно прописываю имена полей в KeyFieldname и RefParentFieldName. Активирую TreeList, лучший результат экпериментов (редактирование sql-запроса, перетаскивание полей и т.д. ит.п.) - раскрытый TreeView без плюсиков.
Что делаю не так?
GX_h10 вне форума Ответить с цитированием
Старый 05.05.2012, 14:05   #16
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Хм, можно ли по описанию понять "что не так"?
Первое что в голову приходит - отношения полей SubPlace и Place (соответствие их значений) не корректны.
Например, Place просто обязан иметь уникальные значения во всей таблице, а
SubPlace не может иметь значений, которых нет в Place.
Прик вне форума Ответить с цитированием
Старый 05.05.2012, 14:12   #17
GX_h10
Пользователь
 
Регистрация: 20.04.2009
Сообщений: 28
По умолчанию

Мысль понял. Поэкпериментирую
GX_h10 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Группы символов, состоящие только из латинских букв, если первая буква группы входит в нее еще только оди Ela Помощь студентам 0 29.04.2010 13:41
Группировка и раскрытие в DBGREDEH AK BULLETS Общие вопросы Delphi 3 06.04.2010 18:03
Строки(группы букв и группы знаков), Pascal Mrs Smith Помощь студентам 1 10.12.2009 16:31
как запретить раскрытие формы Анастасия123456789 Помощь студентам 3 21.04.2009 11:53
раскрытие веббраузера Анастасия123456789 Помощь студентам 3 06.04.2009 08:28