Помогите с группировкой...

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Pasynkova
Посетитель
Сообщения: 40
Зарегистрирован: 29 окт 2008, 13:00

Помогите с группировкой...

Сообщение Pasynkova »

Здравствуйте! :)
Очень прошу подскажите как правильно сгруппировать данные для выкида в excell.. :eek:

Код: Выделить всё

procedure PrintBodyReport (var aStr    : integer );
{                          var gr_NumD : string;
                 
       xlSetCellStringValue('brrrrrrrr c '+dtn+'по'+dtk,2,3,2,3); 
       
             
         //вывод данных=============================================================================/
      
 _loop D 

          //Ordered by index Index1 
   
        
               {     if (not INextVisual(D.ndog)) break; 
  
                        
                          if    gr_NumD = D.NDog

                                {astr:=astr-1}

                       {
                          xlsetbackcolor(0dfffffh, aStr, 1, aStr, 16)

                          xlSetCellStringValue(D.DDog_N, aStr, 1, aStr, 1);

	     		  xlSetCellStringValue(D.DDog_K, aStr, 2, aStr, 2); 

                          xlSetCellStringValue(D.NDog, aStr, 3, aStr, 3);

                          xlSetCellNumberValue(D.StatDog, aStr, 4, aStr, 4); 
	     		
                          xlSetCellStringValue(D.Post, aStr, 5, aStr, 5);

                          xlSetCellStringValue(D.SumDog, aStr, 9, aStr, 9);

                          xlSetCellStringValue(D.SumDogTg, aStr, 11, aStr, 11);

                          xlSetCellStringValue(D.NeoplSum, aStr, 13, aStr, 13);

                          xlSetCellStringValue(D.Strana, aStr, 14, aStr, 14);

                          xlSetCellStringValue(D.Valut, aStr, 15, aStr, 15);

                          xlSetCellStringValue(D.Kurator, aStr, 16, aStr, 16);

                          aStr:=aStr+1;           
                        }

                        xlSetCellStringValue(D.NDog, aStr, 3, aStr, 3);
            
                       {  
                          xlSetCellStringValue(D.MC, aStr, 6, aStr, 6);

                          xlSetCellStringValue(D.Nazn, aStr, 7, aStr, 7);

                          xlSetCellStringValue(D.SumNazn, aStr, 8, aStr, 8);

                          xlSetCellStringValue(D.SumNaznTg, aStr, 10, aStr, 10);

                          xlSetCellStringValue(D.SumDogNaznTg, aStr, 12, aStr, 12);

                          aStr:=aStr+1;           
                        }
                          

                   gr_NumD:= D.NDog;
                         
                  aStr:=aStr+1;  
           

               } // _Loop D    
в excell выкидывается примерно так:
Если в договоре одна мц то все ровно, а если несколько то идет строчка с номером и датами ниже мц с назначением, вторая опять с номером и датами того же договора вторая мц с назначением и тд. смотря сколько мц в договоре..
А надо: Строка номером и датами и ниже все мц находящиеся в этом договоре... :-?
k_vit
Постоянный обитатель
Сообщения: 143
Зарегистрирован: 09 авг 2006, 16:40
Откуда: Россия, Тюмень, ОАО "Сибирский Научно-Аналитический Центр"

Сообщение k_vit »

А сделайте две таблички.
Первую например tDogovor, а вторую tMc

и соедините их по типу

Код: Выделить всё

  tDogovor.cMc == tMc.nRecMc

(cMc - ссылка на МЦ)

а далее

Код: Выделить всё

  _loop tDogovor {
//    тут выводится договор 
    _loop tMc {
       // а тут МЦ привязанные к нему
    }
  }
Pasynkova
Посетитель
Сообщения: 40
Зарегистрирован: 29 окт 2008, 13:00

Сообщение Pasynkova »

Спасибо за совет!
Но на сколько я понимаю чтобы использовать две логические таблицы мне нужно будет переписать почти весь отчет :(
А из одной таблицы ни как нельзя сделать такую группировку???
k_vit
Постоянный обитатель
Сообщения: 143
Зарегистрирован: 09 авг 2006, 16:40
Откуда: Россия, Тюмень, ОАО "Сибирский Научно-Аналитический Центр"

Сообщение k_vit »

Ну логическая таблица будет одна, таблицы в памяти будет две.
Можно сделать и одной, если вашу таблицу D сделать иерархической.
Где у ветки (договора) cId = 0, а все листья (МЦ) ссылаются на Id договора. Вобщем по типу талицы Catalogs (поля cParent -> nRec)

например

Код: Выделить всё

select
  D.*,
  D_Par.*

from
  D,
  Synonym D D_Par

where
((
      0 == D.cId and // договоры
  D.id == D_Par.cId // МЦ
));
но тут опять же придётся ваш отчёт подкорректировать. Но я думаю это надёжнее и нагляднее будет.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

w_dog = '??????'
_loop
{ if w_dog<>D.NDog
{ - выводим договор
w_dog:=D.NDog
}
спецификация
}
у вас схема другая :)
Pasynkova
Посетитель
Сообщения: 40
Зарегистрирован: 29 окт 2008, 13:00

Сообщение Pasynkova »

Спасибо огромное!!!:))
Все получилось и с одной таблицей :))))
Ответить